So löschen Sie die Sperrdatei, wenn der Dienst nicht gestartet werden konnte

0

Ich habe einen Dienst, dessen Starttyp auf Automatisch eingestellt ist. Bei einem unerwarteten Neustart konnte dieser Dienst jedoch aufgrund einer vorhandenen Sperrdatei nicht gestartet werden. Wie kann ich diese Sperrdatei automatisch löschen, bevor dieser Dienst versucht zu starten? Oder wie man die Sperrdatei erkennt und löscht, wenn der Dienst beim Start fehlgeschlagen ist? Mir ist die Registerkarte Wiederherstellung in den Diensteigenschaften bekannt. Ich benötige nur eine Batch-Datei, um die Löschaufgabe bei nachfolgenden Fehlern auszuführen. Wenn es einen effizienteren Weg gibt, würde ich das gerne begrüßen.

Euler
quelle
Was für ein Service? Kennen Sie den Speicherort dieser Sperrdatei?
Mokubai
@ Mokubai, dies ist ein benutzerdefinierter Dienst, die Sperrdatei befindet sich inE:\DSpace\handle-server\txns
Euler
Ich bin gerade nicht da, aber ich bin mir ziemlich sicher, dass eine kurze Batch-Datei das kann. Wird wahrscheinlich verwendet netsvc, um festzustellen, ob die Datei gestartet wurde (und um sie neu zu starten), und um schnell zu überprüfen, ob diese Datei vorhanden ist. Ich versuche es später.
Mokubai

Antworten:

0

Stackoverflow bietet ein hervorragendes Beispiel dafür, wie Sie feststellen können, ob ein Dienst ausgeführt wird, und ob Sie etwas tun können, wenn dies nicht der Fall ist :

for /F "tokens=3 delims=: " %%H in ('sc query MyServiceName ^| findstr "        STATE"') do (
  if /I "%%H" NEQ "RUNNING" (
   REM Put your code you want to execute here
   REM For example, the following line
   del E:\DSpace\handle-server\txns
   sc start MyServiceName
  )
)

Alles, was Sie tun müssen, ist, MyServiceNamedurch den Kurznamen Ihres Dienstes zu ersetzen und diese Batch-Datei dann in Ihrem Startordner abzulegen oder sie einfach auszuführen, wenn Sie müssen. Ich habe die Zeile zum Löschen Ihrer Sperrdatei bereits eingefügt.

Mokubai
quelle