![]() |
Service erstellen...
Hallo!
Hbae eine Unit zum auslesen der Event-Logs geschrieben. Diese möchte ich nun in einem Service benutzen. Des Service erstellen ist auch nicht das Problem, aber dieser beendet sich automatisch immer wieder nach ca. 20 sek. Woran liegt das und wie kann ich "ihn am Leben halten"? Habe das ganze halt über nen Timer gemacht und dann soll er die Eventlogs eigentlich alle 2 Minuten auf neue Einträge prüfen. Hat einer ne Idee, warum sich das Programm immer wieder beendet? Danke! Gruß Matthias |
Re: Service erstellen...
Du darfst keinen Code in das OnExecute Ereignis schreiben. Steht da Code, so wird dieser ausgeführt und anschließend der Service beendet. Nutze stattdessen z.B. eine Timer-Komponente, welche in regelmäßigen Abständen Deine "Wünsche erfüllt".
In diesem Thread findest Du ein Beispiel für obige Idee: ![]() ...:cat:... |
Re: Service erstellen...
Habe den Timeraufruf im OnCreate
das onexecute-Ereignis ist leer. woran kann's noch liegen? |
Re: Service erstellen...
Es kann noch an einem Fehler im OnCreate bzw. OnStart liegen. Zeige doch mal dne Code dieser und davon abhängiger Methoden ;-)
...:cat:... |
Re: Service erstellen...
Delphi-Quellcode:
So, das wäre der Teil. Keine Ahnung wo er da hängt.
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs, extctrls, Eventlog; type TLogtray = class(TService) procedure ServiceCreate(Sender: TObject); procedure ServiceStart(Sender: TService; var Started: Boolean); procedure ServiceContinue(Sender: TService; var Continued: Boolean); procedure ServicePause(Sender: TService; var Paused: Boolean); private { Private-Deklarationen } mytimer: TTimer; public function GetServiceController: TServiceController; override; procedure TimerEvent(Sender:Tobject); procedure Timer; { Public-Deklarationen } end; var Logtray: TLogtray; anz_alt: Integer; implementation {$R *.DFM} procedure TLogtray.TimerEvent(Sender:TObject); var anz_neu: Integer; List: TSTringList; BEGIN anz_neu:= getLogNumber('System'); if anz_neu >= (anz_alt+10) then BEGIN mytimer.Enabled:= false; getEventLog('Application', 10, List); List.SavetoFile('C:\Application.txt'); getEventLog('System', 10, List); List.SavetoFile('C:\System.txt'); getEventLog('Security', 10, List); List.SavetoFile('C:\Security.txt'); anz_alt:= anz_neu; mytimer.Enabled:= true; END; END; procedure TLogtray.Timer; BEGIN mytimer:= TTimer.create(nil); mytimer.interval:= 10000; mytimer.OnTimer:= TimerEvent; mytimer.Enabled:= true; END; procedure ServiceController(CtrlCode: DWord); stdcall; begin Logtray.Controller(CtrlCode); end; function TLogtray.GetServiceController: TServiceController; begin Result := ServiceController; end; procedure TLogtray.ServiceCreate(Sender: TObject); begin anz_alt:= 0; end; procedure TLogtray.ServiceStart(Sender: TService; var Started: Boolean); begin Timer; end; end. Danke schonmal für die hilfe! Gruß Matthias |
Re: Service erstellen...
Versuche mal folgende Änderung.
Delphi-Quellcode:
...:cat:...
procedure TLogtray.TimerEvent(Sender:TObject);
var anz_neu: Integer; List: TSTringList; BEGIN TRY anz_neu:= getLogNumber('System'); if anz_neu >= (anz_alt+10) then TRY mytimer.Enabled:= false; getEventLog('Application', 10, List); List.SavetoFile('C:\Application.txt'); getEventLog('System', 10, List); List.SavetoFile('C:\System.txt'); getEventLog('Security', 10, List); List.SavetoFile('C:\Security.txt'); anz_alt:= anz_neu; FINALLY mytimer.Enabled:= true; END; EXCEPT // evtl. loggen, aber EXCEPT stehen lassem END; END; |
Re: Service erstellen...
Hallo!
Also, jetzt beendet er sich zwar nicht mehr, aber es wird nichts gemacht. Wie kann man eine Service-Anwendung denn am besten debuggen? Wenn ich das "normal" in Delphi starte, beendet es sich sofort wieder. Danke! Gruß Matthias |
Re: Service erstellen...
Zitat:
![]() Sollte helfen. ...:cat:... |
Re: Service erstellen...
Du kannst den Service starten und dann in der IDE sagen: Start -> Mit Prozess verbinden.
Dann wählst Du den Dienst aus. Ist zwar etwas umständlich, funktioniert aber ganz gut. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz