Ahoj,
chtěl jsem si logovat vyjímky které vznikají při běhu služby kvůli diagnostice.
void __fastcall TJadro308::ServiceCreate(TObject *Sender)
{
Forms::Application->OnException = LogVyjimky;
}
void __fastcall TJadro308::LogVyjimky(TObject *Sender, Exception *E)
{
FILE *fw;
SYSTEMTIME lt;
fw = _wfopen(ChangeFileExt(Forms::Application->ExeName, ".log").w_str(), L"a");
if (fw != NULL) {
GetLocalTime(<);
fwprintf(fw, L"%d-%02d-%02d %d:%d:%d %s\r\n", lt.wYear, lt.wMonth, lt.wDay,
lt.wHour, lt.wMinute, lt.wSecond, E->Message.w_str());
fclose(fw);
}
Forms::Application->Terminate();
}
Když dojde k vyjímce, žádný soubor se nevytvoří. zkoušel jsem vytvoření a zápis do souboru při obsluze událostí OnCreate a OnStart, zde práce se souborem fungovala. Stejně tak je výše uvedený kód funkční v běžné "oknové" aplikaci. Metoda LogVyjímky je private. C++ Builder XE5, Win 7.
hu