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 mit Fehler stoppen (https://www.delphipraxis.net/177780-dienst-mit-fehler-stoppen.html)

ralfiii 27. Nov 2013 08:43

Dienst mit Fehler stoppen
 
Hallo!

Ich habe hier einen Dienst der Nutzerrechte (in der Anwendung) verwaltet.
Wenn die Verbindung zum Dongle abreisst soll sich der Dienst beenden.
Ich mache das im Service momentan mit
Controller(SERVICE_CONTROL_STOP);

Wenn man den Dienst in Windows nun so konfigurieren will, dass er sich bei einem Fehler neu startet, dann springt das nicht an weil der Dienst scheinbar ohne Fehler beendet wird.

Wie beende ich den Dienst so, dass Windows das als "beendet weil Fehler" sieht?

Danke!
R.

Sir Rufo 27. Nov 2013 09:05

AW: Dienst mit Fehler stoppen
 
Wieso willst du den Dienst überhaupt beenden?

Liefer doch einfach keine Bestätigungen mehr aus ... oder "Hallo, du keine Rechte!"

Wenn sich ein Dienst durch einen Fehler beendet, dann ist der nicht robust genug programmiert. Darum sollte ein Dienst idR immer laufen.

ralfiii 27. Nov 2013 09:29

AW: Dienst mit Fehler stoppen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1237579)
Wieso willst du den Dienst überhaupt beenden?

Erwischt :)
Ich hab noch mal drübergeschaut und der Lizenz-Dienst läuft eh weiter wenn der Dongle abgezogen wird.

Der Dienst mit dem ich kämpfe ist einer der nur bei Kunden installiert werden DARF die gewisse Rechte haben.
Da ist's aus Support-Sicht eigentlich ganz fein, wenn der Dienst sich gleich beendet oder gar nicht starten lässt wenn die Voraussetzungen nicht passen.

Und es muss doch in Delphi möglich sein, einen Dienst so zu beenden dass Windows mitkriegt dass da was schiefgelaufen ist.

Ich hab nun mal
Delphi-Quellcode:
     ErrorSeverity:=esCritical;
     ErrCode:=ERROR_SERVICE_SPECIFIC_ERROR;
     ReportStatus;
dem Controller(Stop) vorangestellt, im Ereignisprotokoll steht zwar
Der Dienst "foo" wurde mit folgendem dienstspezifischem Fehler beendet: Der Dienst hat einen
dienstspezifischen Fehlercode zurückgegeben..
Aber Windows startet den Dienst noch immer nicht automatisch neu, obwohl ich bei der Dienst-Wiederherstellung (Services-Panel) "bei erstem Fehler -> Dienst neu starten" angegeben hab. (und bei den zwei weiteren das selbe)

Hiiiilfe!

ralfiii 27. Nov 2013 10:36

AW: Dienst mit Fehler stoppen
 
Gelöst.

Super simpel:

Delphi-Quellcode:
     ErrCode:=ERROR_SERVICE_SPECIFIC_ERROR;
     Controller(SERVICE_CONTROL_STOP); // Stop service
Man muss dann nur noch im Windows Dienste Panel das Häkchen bei "Aktionen bei Unterbrechung mit Fehlern aktivieren" anhaken.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 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