Von Zeit zu Zeit crasht einer meiner installierten Dienste, statt ordnungsgemäß herunterzufahren. Wenn er das tut, verbleibt eine Lock-Datei.
Der nächste Start des Dienstes schlägt dann fehlt, weil die Lock-Datei noch vorhanden ist - fälschlicherweise.
Eine simple Abhilfe wäre, die Lockdatei direkt vor dem Starten des Dienstes automatisch zu löschen. Kann ich das irgendwie entweder mit Bordmitteln von Windows einstellen, oder aber gibt es eine programmatische Lösung dafür? Quasi so was wie ein Pre-Service-Hook?
Eine andere Möglichkeit ist noch die Bordmittel von Windows zu nutzen. Bei jedem Dienst kannst du in den Eigenschaften auf dem Reiter "Wiederherstellung" Aktionen durchführen. Eine Aktion davon ist "Programm ausführen". D.h., bei einem Fehler beim Starten, startest du wiederum ein Programm, welches die Lock Datei löscht und dann wird der Dienst wieder versucht zu starten.
Habe ich so noch nie verwendet, sollte aber eigentlich funktionieren.
Ist das ein von Dir selbst geschriebener Dienst? Wenn ja, kannst Du doch versuchen die Lock-Datei als erste Aktion im OnStart()-Event zu löschen, falls noch eine alte Datei da ist. Eine andere Lösung wäre vielleicht einen Dienst vor dem eigentlichen Dienst zu starten, der die alte Lockdatei löscht und erst dann anschließend den eigentlichen Dienst startet, so dass dieser also nicht mehr direkt durch Windows gestartet wird.
So wie ich das sehe, wird allerdings dann bei einem Fehler nur versucht, das Programm auszuführen, nicht aber der Dienst mehr neugestartet, oder?