Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Dienst wird nicht richtig beendet (https://www.delphipraxis.net/95012-dienst-wird-nicht-richtig-beendet.html)

trashcandesign 29. Jun 2007 07:56


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?

vlees91 29. Jun 2007 08:03

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.

trashcandesign 29. Jun 2007 08:07

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?

SirThornberry 29. Jun 2007 08:15

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.

Luckie 29. Jun 2007 08:16

Re: Dienst wird nicht richtig beendet
 
Erst den Thread beenden und dann den Dienst stoppen.

trashcandesign 29. Jun 2007 08:36

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.

SirThornberry 30. Jun 2007 07:09

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 05:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz