Frage

Ich verwende eine Batch-Datei einen Windows-Dienst zu beenden. Ich bin mit dem sc Befehl, aber ich bin für andere Ideen offen, die Frage weiter unten. Das Problem ist, dass der Batch-Datei Erlös , während der Dienst stoppen (das stop Argument sc scheint nur zu Anfrage der Anschlag - es funktioniert nicht warten für den Anschlag).

Wie kann ich die Batch-Datei ändern, um nicht fortfahren , bis der Anschlag vollständig

War es hilfreich?

Lösung

Mit NET stop verwenden kann, die synchron ist, das heißt es wird warten, bis der Dienst beendet wird.

Siehe - NET stop

Andere Tipps

sc stop webdriveservice
:loop
sc query webdriveservice | find "STOPPED"
if errorlevel 1 (
  timeout 1
  goto loop
)

Wie bereits erwähnt, wird NET STOP einen Stoppbefehl an den Dienst senden, aber, wenn der Dienst mehr als eine bestimmte Zeit in Anspruch nimmt (20 Sekunden oder so ist meine Beobachtung), wird NET STOP für den Dienst wartet nicht aufhören, um tatsächlich vor der Rückkehr.

Um die Batch-Datei tatsächlich anhalten, bis der Dienst beendet wird, müssen Sie wie die in diesen Themen skizziert einen Ansatz verwenden:

Wie kann man überprüfen, ob ein Service über Batch-Datei ausgeführt wird, und starten sie es, wenn es nicht läuft?

Stoppen / Starten ein Remote-Windows-Dienst und wartet, dass es

zum öffnen / schließen

Ich glaube, net stop [Service] warten sollte, bis der Dienst, bevor sie vollständig zum Stillstand gekommen ist. sc stop [Service] sendet einfach eine „stop“ Nachricht an den Dienst.

Das ist ein bisschen grob, aber es funktionierte für mich, um sicherzustellen, dass ich eine tägliche Batch-Datei planen könnte, um im wesentlichen einen Dienst neu starten.

NET STOP [Service]

: TryAgain

TIMEOUT / T 10 / NOBREAK

NET START [Service]

IF% ERRORLEVEL% NEQ 0 GOTO TryAgain

Ich weiß, Schnipsel mit diesem Code, dass diese in einer Endlosschleife führen kann, wenn der Dienst nicht erfolgreich gestartet werden sollte. Ich wollte nur im Grunde zeigen, wie das Problem zu umgehen, TIMEOUT verwenden, wo ein Dienst länger dauern kann, zu stoppen, als der NET STOP-Befehl erlaubt.

Mit dem && Symbol zwischen den Befehlen. Das && Symbol wartet der vorherige Befehl, bevor zum nächsten Befehl beenden gehen.

Alle Befehle in der gleichen Befehlszeile sein muss. Sie können beliebig viele Befehle verwenden Sie in einer Reihe möchten.

können Sie verwenden auch die pause Befehl. Damit fragt eine beliebige Taste drücken, bevor zum nächsten Vorgang fortzufahren.

Zum Beispiel:

sc qdescription "MyServiceName" && echo. && sc stop "MyServiceName" && echo. && echo          [ "MyServiceName" service stopped ] && echo. && pause
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top