サービスの停止が完了するまでバッチファイルを停止しますか?
-
03-10-2019 - |
質問
Windowsサービスを停止するためにバッチファイルを使用しています。私は使用しています sc
コマンドですが、以下の質問を考えると、私は他のアイデアにオープンです。問題は、バッチファイルが進行することです その間 サービスは停止しています( stop
への議論 sc
だけです リクエスト 停止 - そうではありません 待つ 停止のために)。
バッチファイルをに変更するにはどうすればよいですか 続行しないでください 停留所まで 完了?
解決
使用は使用できます NET stop
, 、これは同期です。つまり、サービスが停止するまで待ちます。
見る - ネットストップ
他のヒント
sc stop webdriveservice
:loop
sc query webdriveservice | find "STOPPED"
if errorlevel 1 (
timeout 1
goto loop
)
上記のように、Net Stopはサービスに停止コマンドを送信しますが、サービスに特定の時間(20秒程度の観察)が必要な場合、ネットストップでは、戻る前にサービスが実際に停止するのを待ちません。
サービスが停止するまで実際にバッチファイルを一時停止するには、これらのスレッドで概説されているようなアプローチを使用する必要があります。
私は信じている net stop [Service]
先に進む前に、サービスが完全に停止するまで待つ必要があります。 sc stop [Service]
「停止」メッセージをサービスに送信するだけです。
これは少し粗雑ですが、本質的にサービスを再起動するために毎日のバッチファイルをスケジュールできるようにするために私のために機能しました。
ネットストップ[サービス
:再試行する
タイムアウト /t 10 /ノブブレイク
ネットスタート[サービス
if%errorlevel%neq 0 goto tryagain
このコードスニペットで、サービスが正常に開始されない場合、これが無限のループになる可能性があることを理解しています。私は基本的に、ネットストップコマンドが許すものよりもサービスが停止するのに時間がかかる場合があるタイムアウトを使用して問題を回避する方法を基本的に示したかっただけです。
使用 &&
コマンド間のシンボル。 &&
シンボルは、次のコマンドに進む前に前のコマンドを完了するのを待ちます。
すべてのコマンドは同じコマンド行にある必要があります。必要なコマンドを連続して使用できます。
あなたも使用することができます pause
指図。これにより、次の手順に進む前に、キーを押すように依頼します。
例えば:
sc qdescription "MyServiceName" && echo. && sc stop "MyServiceName" && echo. && echo [ "MyServiceName" service stopped ] && echo. && pause