Autor |
Beitrag |
Peter2002
      
Beiträge: 103
Win XP, Win 7
Delphi 2007 / XE3
|
Verfasst: Di 30.09.08 17:22
Hallo zusammen,
in einer "normalen" Anwendung lassen sich mittels des Events OnException alle nicht behandelten Exceptions protokollieren...
Wie realisiere ich soetwas in einem Dienst?
Ich habe einfach die TApplicationEvents auf den TService gepackt und versucht das OnException zu nutzen. Diese Methode wird allerdings nie ausgeführt.
Hat jemand schon mal sowas gemacht?
Gruß
Peter
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 30.09.08 22:17
Wohr weißt du, dass sie nie ausgeführt wird? Und etwas Code wäre hilfreich.
|
|
Peter2002 
      
Beiträge: 103
Win XP, Win 7
Delphi 2007 / XE3
|
Verfasst: Mi 01.10.08 08:42
Ich hab nen neuen Service erstellt, die Komponente ApplicationEvents draugelegt, das Event OnException angelegt, im Execute ne Exception ausgelöst
und festgestellt dass nichts passiert...
In einer normalen Anwendung lande ich nach einem erfolglosen StrToInt ohne try...except in diesem Event
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs, AppEvnts;
type TService1 = class(TService) ApplicationEvents1: TApplicationEvents; procedure ServiceExecute(Sender: TService); procedure ApplicationEvents1Exception(Sender: TObject; E: Exception); private public function GetServiceController: TServiceController; override; end;
var Service1: TService1;
implementation
{$R *.DFM}
procedure ServiceController(CtrlCode: DWord); stdcall; begin Service1.Controller(CtrlCode); end;
function TService1.GetServiceController: TServiceController; begin Result := ServiceController; end;
procedure TService1.ServiceExecute(Sender: TService); begin StrToInt ('xyz'); end;
procedure TService1.ApplicationEvents1Exception(Sender: TObject; E: Exception); begin ShowMessage('hier komm ich nie an'); end;
end. |
_________________ Gruß Peter
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 01.10.08 08:57
Und was passiert in dem Event? Falls du eine MessageBox erwartest, die wirst du nie sehen, da dein Service in einer anderen Windows Station läuft und keinen Zugriff auf deinen Desktop hat.
|
|
Peter2002 
      
Beiträge: 103
Win XP, Win 7
Delphi 2007 / XE3
|
Verfasst: Mi 01.10.08 09:46
In dem Event passiert gar nichts bzw. es wird nicht ausgelöst. Die MessageBox steht da nur zur Veranschaulichung. (Trotzdem sollete man sie sehen, jedenfalls ein Showmessage im Execute sieht man). Eigentlich sollten die Fehler hier in ne Logfile geschrieben werden. Das passiert aber nicht. Setze ich nen Breakpoint in dieses Event, lande ich dort auch nie. Ich seh nur den Hinweis vom Debugger, dass eine Exception aufgetreten ist.
|
|
White-Tiger
Hält's aus hier
Beiträge: 11
|
Verfasst: Mi 01.10.08 13:32
Hast du den Dienst auch schon mal normal als Dienst ausgeführt? Also Ohne Delphi Debugger?
Ich bin derzeit auch am Dienst basteln und bei mir Debugt Delphi den garnicht erst  er Startet nur und schließt sofot.. aber wenn ich ihn normal als Dienst in Windows starte macht er auch das was er soll..
Zum nicht anzeigen einer ShowMessage... es wird schon ausgegeben man muss nur dem Dienst die interaktion mit dem Desktop erlauben (Start->Ausführen->services.msc und dort eben den Dienst suchen und unter Anmelden "Datenaustausch zwischen DIenst und Desktop zulassen" aktivieren.)
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 01.10.08 13:51
White-Tiger hat folgendes geschrieben : | Zum nicht anzeigen einer ShowMessage... es wird schon ausgegeben man muss nur dem Dienst die interaktion mit dem Desktop erlauben (Start->Ausführen->services.msc und dort eben den Dienst suchen und unter Anmelden "Datenaustausch zwischen DIenst und Desktop zulassen" aktivieren.) |
Das hat er wohl schon gemacht, sonst würde er die erste nachricht nicht sehen. Anzumerken dazu ist nur noch, dass interaktive Dienste eine Sicherheitslücke darstellen können und sie aus diesem Grund unter Vista nicht mehr existieren.
|
|
Peter2002 
      
Beiträge: 103
Win XP, Win 7
Delphi 2007 / XE3
|
Verfasst: Mi 01.10.08 14:33
ShowMessage... Danke für die Hinweise
Mir geht es aber um das das Exception-Handling. Ich möchte alle Excetions, die nicht behandelt wurden (weil vielleicht mal ein try..except vergessen wurde) zentral abfangen, es protokollieren und definiert reagieren.
Genau an dem, welches in "normalen" Applicationen problemlos funktioniert, bin ich bisher gescheitert. 
_________________ Gruß Peter
|
|
Peter2002 
      
Beiträge: 103
Win XP, Win 7
Delphi 2007 / XE3
|
Verfasst: Mi 08.10.08 12:08
Hat sowas noch niemand versucht? Oder löst man das anders?
_________________ Gruß Peter
|
|