Služba - logování vyjímek – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Služba - logování vyjímek – C / C++ – Fórum – Programujte.comSlužba - logování vyjímek – C / C++ – Fórum – Programujte.com

 

3. 9. 2014   #1
-
0
-

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(&lt);
	   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

Nahlásit jako SPAM
IP: 195.178.67.–
KIIV
~ Moderátor
+43
God of flame
3. 9. 2014   #2
-
0
-

podle me to spis uklada nekam jinam nez myslis, ci jen nemas prava.. co nejaky pevny vystupni soubor s pravama pro vsechny?

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
3. 9. 2014   #3
-
0
-

To by ta služba nezapsala vůbec. To si lze ověřit snadno - při jejím spuštění provést zápis do souboru (obsluha události OnStart) - funguje podle očekávání. Asi se mi nedaří "podstrčit" můj handler vyjímek. 

hu 

Nahlásit jako SPAM
IP: 2001:67c:1222:800:842f:28...–
z
~ Anonymní uživatel
268 příspěvků
3. 9. 2014   #4
-
0
-

TApplication.HandleException (a z ní OnException) se volá při zpracovávání okenních zpráv (try-catch v Run).

Správná funkčnost TService je zaručena jen v TServiceApplication, která místo toho má DoHandleException.

Nahlásit jako SPAM
IP: 213.211.51.–
3. 9. 2014   #5
-
0
-

Z dokumentace Embarcadera jsem se moc nedověděl, ale našel jsem tohle http://stackoverflow.com/questions/3177395/try-except-doesnt-seem-to-capture-exceptions-delphi-service-application.  Asi by to bylo moc složitý    přimět ho k jinému způsobu zpracování vyjímky než systémový log

hu

Nahlásit jako SPAM
IP: 193.86.81.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 46 hostů

Podobná vlákna

Použití výjimek v C++ — založil Jonyzz

Logování ajpin — založil BlackHole

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý