Ahoj,
chtěl jsem u služby logovat vyjímky do souboru.
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();
}
Kód jsem vyzkoušel nejdříve ve "woknové" aplikaci, kde fungoval podle očekávaní. Při použití ve službě k vytvoření souboru a zaznamenání vyjímky nedojde, služba kvůli vyjímce skončí. Zkoušel jsem, zda služba soubor vytvoří - při obsluze OnStart zapsat do souboru text "start" - což fungovalo bez problémů. Dále jsem zkoušel exe soubor umístit do adresáře Program Files také bez úspěchu. Metoda LogVyjimky je public.
C++ Builder XE5, Win 7
hu