![]() |
Dienst stop nicht
Mein Dienst will nicht stoppen
Delphi-Quellcode:
was habe ich falsch gemachtprocedure TKas_Server.DoRun; Var XML_Server : Txml_kas_server; begin FIsDebugFile:=True; Recon:=False; ShortDateFormat:='dd.mm.yyyy'; DateSeparator:='.'; TimeSeparator:=':'; DecimalSeparator:=','; ShowStatus('KAS Server V1.2',''); ShowStatus('PLUGINS Start',''); XML_Server:=Txml_kas_server.Create; XML_Server.DBServer:=FServerClass.DBServer; XML_Server.DBUserName:=FServerClass.DBUserName; XML_Server.DBPassword:=FServerClass.DBPassword; XML_Server.DBDatabase:=FServerClass.DBDatabase; XML_Server.DebugLevel:=FServerClass.DebugLevel; XML_Server.OnStatus:=ShowStatus; XML_Server.UpdTable; XML_Server.StartDay; XML_Server.Free; Run:=True; ShowStatus('RUN',''); While Run do Begin try If IDatum<>Date then //Tages Wechsel Begin ShowStatus('Tages Start'); IDatum:=Date; If (AktMonat<>StrToInt(FormatDateTime('mm',Date))) Then Begin AktJahr:=StrToInt(FormatDateTime('yyyy',Date)); AktMonat:=StrToInt(FormatDateTime('mm',Date)); End; Try XML_Server:=Txml_kas_server.Create; XML_Server.DBServer:=FServerClass.DBServer; XML_Server.DBUserName:=FServerClass.DBUserName; XML_Server.DBPassword:=FServerClass.DBPassword; XML_Server.DBDatabase:=FServerClass.DBDatabase; XML_Server.DebugLevel:=FServerClass.DebugLevel; XML_Server.OnStatus:=ShowStatus; XML_Server.UpdTable; XML_Server.StartDay; XML_Server.Free; Finally End; End; Sleep(500); If Not Recon then Begin FServerClass.Reconnect; Recon:=True; End; except on E: Exception do Begin ShowStatus(E.Message); End; End; End; // stop program loop Run:=False; end; procedure Tkas_service.ServiceExecute(Sender: TService); begin KAS_Server1.ShowStatus('Service Run'); KAS_Server1.DoRun; end; procedure Tkas_service.ServiceStart(Sender: TService; var Started: Boolean); begin kas_server1:=TKas_Server.Create; KAS_Server1.FIsDebugFile:=True; KAS_Server1.ShowStatus('Service Start'); Started:=True; end; procedure Tkas_service.ServiceStop(Sender: TService; var Stopped: Boolean); begin KAS_Server1.ShowStatus('Service Stop'); KAS_Server1.Run:=False; kas_server1.Free; Stopped := True; end; P.S. in meiner Logfile wird das Stop Service nicht reingeschreiben |
AW: Dienst stop nicht
Hallo Frank,
steht denn etwas von Deinem Service in der Ereignisanzeige? Welchen Status hat Dein Service wenn Du die Services listest? Grüße Klaus |
AW: Dienst stop nicht
Ich denke der Grund ist deine Endlosschleife im DoRun:
Delphi-Quellcode:
Run wird innerhalb der While-Schleife nirgends auf False gesetzt soweit ich das sehe und entsprechend wird die Schleife nie beendet.
While Run do
Begin [...] End; // stop program loop Run:=False; |
AW: Dienst stop nicht
Nein aber im Stop Ereignis vom Service
aber ich hab mal gedebugt und das ServcieStop wird gar nicht angesprungen |
AW: Dienst stop nicht
Hallo,
schau Dir mal die Antwort auf Deine Frage von "SirThornberry" an. Da steht es nämlich drin :wink: |
AW: Dienst stop nicht
Wenn ich das so machen geht das aber auch nicht
Delphi-Quellcode:
procedure Tkas_service.ServiceExecute(Sender: TService);
begin KAS_Server1.ShowStatus('Service Run'); //KAS_Server1.DoRun; while Not Terminated do Begin sleep(10); End; end; |
AW: Dienst stop nicht
Terminated wird True, wenn Terminate aufgerufen wurde ... wo wird dieses aufgerufen?
Deine
Delphi-Quellcode:
-Schleife wird verlassen, wenn Run auf False gesetzt wird ... wo wird Run auf False gesetzt?
While Run do
Bzw. Stopped wird im "Beenden"-Ereignis (ServiceStop) gesetzt, aber wo wertest du dieses, in deiner Programmschleife, aus? usw. Es bringt nichts irgendwas auszuwerten, was nie gesetzt wird oder irgendwas zu setzen, welches nie ausgewertet wird. |
AW: Dienst stop nicht
And now for something completely different... die Passage
Zitat:
Delphi-Quellcode:
XML_Server:=Txml_kas_server.Create;
Try XML_Server.DBServer:=FServerClass.DBServer; XML_Server.DBUserName:=FServerClass.DBUserName; XML_Server.DBPassword:=FServerClass.DBPassword; XML_Server.DBDatabase:=FServerClass.DBDatabase; XML_Server.DebugLevel:=FServerClass.DebugLevel; XML_Server.OnStatus:=ShowStatus; XML_Server.UpdTable; XML_Server.StartDay; Finally XML_Server.Free; End; |
AW: Dienst stop nicht
Meine nächste Vermutung, bei der ich mir aber nicht sicher bin ist, dass ganz keine Möglichkeit besteht das jemals ein Stop bei deinem Service ankommt.
Denn du hast da deine Endlosschleife und darin maximal ein Sleep. Aber nirgendwo verarbeitest du Nachrichten oder dergleichen. Das ist wie in einer normalen Anwendung. Wenn du dort eine Endlosschleife drin hast welche keine Nachrichten verarbeitet, kann man auch auf schließen klicken wie man will und es passiert nichts weil die Nachrichten vom Programm nie verarbeitet werden. [Edit] Hab mal fix gesucht und ich glaub dir fehlt sowas:
Delphi-Quellcode:
[/Edit]
while not Terminated do
begin [...] ServiceThread.ProcessRequests(False); end; |
AW: Dienst stop nicht
Ich hab den Fehler
Das
Delphi-Quellcode:
Fehlte im ServiceExecute muss eine Schleife mit dem Befehl drin stehen sonst gehts nicht
ServiceThread.ProcessRequests(False);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 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