![]() |
Dienst wird nicht richtig beendet
Moin,
ich hab da mal wieder so ein kleines Problem *g* Ich habe einen Dienst, der sich nach ner Weile bei einer Datenbank melden soll, so von wegen "Ich bin aktiv". Dies realisiere ich über einen eigenen Thread, da der Rest des Dienstes parallel weiterlaufen soll. Wird diese Dantenbank vom Thread nun nicht erreicht soll sich der Dienst beenden. Das realisiere ich dann mit doStop. Jetzt wird der Dienst in der Windows Verwaltung allerdings mit "wird beendet..." angezeigt und lässt sich nur durch einen Rechner-Neustart wieder starten, was natürlich unoptimal ist, da das Ding auf einem Server laufen soll. Wenn ich dieses doStop beim Service-Start aufrufe wird alles wunderbar beendet. Gibt es ne Möglichkeit den Dienst besser zu beenden, oder dann wenn er hängt ihn richtig abzuschießen? |
Re: Dienst wird nicht richtig beendet
Kann man nicht einfach ein kleines Kommandozeilen-programm "net stop SERVICENAME" ausführen lassen?
Wass alerdings auch geht, ist ein Service, der das Programm mit der eigentlichen Funktion startet. Sobald es dem Programm nicht gelingt sich selber zu schließen, kann der Dienst es ja noch versuchen. |
Re: Dienst wird nicht richtig beendet
mit net stop erreicht man dann nichts mehr.
Zu deinem 2. Tip: dann hätte ich also zwei Dienste, wobei der eine nur den anderen startet/stopt? |
Re: Dienst wird nicht richtig beendet
führst du das doStop aus dem Thread heraus aus? Das Stoppen des Service sollte nur funktionieren wenn du keine weiteren Threads zu diesem zeitpunkt aktiv sind in dem Service. Ansonsten kann man das von dir beschriebene Problem beobachten.
|
Re: Dienst wird nicht richtig beendet
Erst den Thread beenden und dann den Dienst stoppen.
|
Re: Dienst wird nicht richtig beendet
Aus dem Thread heraus rufe ich das doStop über eine Service-Procedure per Synchronize auf.
N Thread.terminate hat mir leider auch nicht weitergeholfen. Das Thread.terminate hab ich im onStop-Event ausgeführt, ist es da dann schon zu spät? Und wenn ich den Dienst aus dem Dienst raus beende, oder direkt über die Windows Verwaltung, dann funtkioniert das ja auch ohne, dass ich die Threads explizit beende. |
Re: Dienst wird nicht richtig beendet
sobald du aus dem Thread heraus (auch mit syncronize) den Service beendest ist der Thread ja noch aktiv. Du solltest also am besten an den Hauptthread eine Message schicken so das diese den Service beendet und erst wenn dies erfolgreich war (WaitFor...) solltest du das Beenden einleiten.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 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