![]() |
Mein Dienst lässt sich nicht beenden
Aloha!
Mein Dienst funktioniert soweit einwandfrei. Wenn man ihn allerdings über die Verwaltung > Dienste Anhalten oder Beenden will, schweitert das mit dieser Meldung:
Code:
Im OnExecute habe ich eine unendliche while Schleife, damit der Dienst nicht automatisch beendet wird, was er nicht soll. Kann das daran liegen, und wenn ja, wie kann ich dann den Dienst trotzdem über die Verwaltung beenden lassen? Sowas wie Appliacation.ProcessMessages gibts ja bei Diensten nicht...
---------------------------
Dienste --------------------------- Der Dienst "Baphomet" auf "Lokaler Computer" konnte nicht beendet werden. Der Dienst hat keinen Fehler zurückgegeben. Es kann sich um einen internen Windows-Fehler oder einen internen Dienstfehler handeln. Setzen Sie sich mit Ihrem Systemadministrator in Verbindung, falls das Problem weiterhin besteht. --------------------------- OK --------------------------- |
Re: Mein Dienst lässt sich nicht beenden
Hallo Meflin,
damit der Service-Manager deinen Dienst in allen Feinheiten steuern kann, musst du auch die korrespondierenden Ereignisse OnStop etc. bedienen. Hier ein Auszug aus einem meiner Dienste:
Delphi-Quellcode:
Grüße vom marabu
procedure TObserver.ServiceStop(Sender: TService;
var Stopped: Boolean); begin Active := false; CloseServiceHandle(schService); CloseServiceHandle(schSCManager); Stopped := true; Log('Guardian stopped'); end; |
Re: Mein Dienst lässt sich nicht beenden
Du muss nur beim OnStop Ereignis deine unendliche Schleife beenden.
|
Re: Mein Dienst lässt sich nicht beenden
Zitat:
|
Re: Mein Dienst lässt sich nicht beenden
Du bist auf die Art und Weise der Implementation eines Services in Delphi hereingefallen.
Nutzt Du das OnExecute-Ereignis, sind die anderen nicht mehr nutzbar. Der Dienst beendet sich automatisch, wenn die OnExecute-Methode durch ist. Möchtest Du den Dienst steuerbar haben, dann darfst Du OnExecute nicht nutzen. Du musst dann in OnStart einen Thread starten, welchen Du dann in OnPause, OnContinue und OnStop steuern kannst. ...:cat:... |
Re: Mein Dienst lässt sich nicht beenden
Zitat:
|
Re: Mein Dienst lässt sich nicht beenden
Zitat:
...:cat:... |
Re: Mein Dienst lässt sich nicht beenden
Hallo sakura,
Zitat:
Delphi-Quellcode:
Freundliche Grüße vom marabu
procedure TObserver.ServiceExecute(Sender: TService);
begin Log('Guardian executing'); while Active do begin Sleep(1000); if Abs(Now - LastCheck) > Interval then begin CheckTargetService(ServiceName); LastCheck := Now; end; ServiceThread.ProcessRequests(false); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 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 by Thomas Breitkreuz