AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Dienst wird nicht richtig beendet
Thema durchsuchen
Ansicht
Themen-Optionen

Dienst wird nicht richtig beendet

Ein Thema von trashcandesign · begonnen am 29. Jun 2007 · letzter Beitrag vom 30. Jun 2007
Antwort Antwort
trashcandesign

Registriert seit: 21. Feb 2006
Ort: Mühlhausen
187 Beiträge
 
Delphi XE2 Professional
 
#1

Dienst wird nicht richtig beendet

  Alt 29. Jun 2007, 07:56
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?
  Mit Zitat antworten Zitat
Benutzerbild von vlees91
vlees91

Registriert seit: 19. Apr 2004
843 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Dienst wird nicht richtig beendet

  Alt 29. Jun 2007, 08:03
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.
vlees91
  Mit Zitat antworten Zitat
trashcandesign

Registriert seit: 21. Feb 2006
Ort: Mühlhausen
187 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Dienst wird nicht richtig beendet

  Alt 29. Jun 2007, 08:07
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?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Dienst wird nicht richtig beendet

  Alt 29. Jun 2007, 08:15
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Dienst wird nicht richtig beendet

  Alt 29. Jun 2007, 08:16
Erst den Thread beenden und dann den Dienst stoppen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
trashcandesign

Registriert seit: 21. Feb 2006
Ort: Mühlhausen
187 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Dienst wird nicht richtig beendet

  Alt 29. Jun 2007, 08:36
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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Dienst wird nicht richtig beendet

  Alt 30. Jun 2007, 07:09
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:40 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