バッチファイルを使用してWindowsサービスを停止しています。私はsc
コマンドを使用していますが、以下の質問を考えると、他のアイデアを受け入れることができます。問題は、バッチファイルが進行することですwhileサービスが停止しています(stop
へのsc
引数はrequest停止のみに見えるようです- -停止しません待機停止します)。
停止がcompleteになるまで、バッチファイルを続行しないに変更するにはどうすればよいですか?
使用できますNET stop
、これは同期です。つまり、サービスが停止するまで待機します。
参照- NET停止
sc stop webdriveservice
:loop
sc query webdriveservice | find "STOPPED"
if errorlevel 1 (
timeout 1
goto loop
)
上記のように、NET STOPはサービスに停止コマンドを送信しますが、サービスに一定の時間(私の観察では20秒程度)がかかる場合、NET STOPはサービスが実際に停止するのを待たずに戻ります。
サービスが停止するまでバッチファイルを実際に一時停止するには、次のスレッドで説明されているようなアプローチを使用する必要があります。
私は信じている net stop [Service]
先に進む前に、サービスが完全に停止するまで待機する必要があります。 sc stop [Service]
は単に「停止」メッセージをサービスに送信します。
これは少し粗雑ですが、基本的にサービスを再起動するように毎日のバッチファイルをスケジュールできるようにするために私にとってはうまくいきました。
NET STOP [サービス]
:再試行
タイムアウト/ T 10/NOBREAK
NET START [サービス]
IF%ERRORLEVEL%NEQ 0 GOTO TryAgain
このコードスニペットを使用して、サービスが正常に開始されなかった場合、無限ループが発生する可能性があることに気付きました。基本的に、サービスがNET STOPコマンドで許可されているものよりも停止に時間がかかる可能性があるTIMEOUTを使用して問題を回避する方法を示したかっただけです。
使用 &&
コマンド間の記号。 &&
シンボルは、前のコマンドが完了するのを待ってから、次のコマンドに進みます。
すべてのコマンドは同じコマンド行にある必要があります。続けてコマンドをいくつでも使用できます。
pause
コマンドも使用できます。これにより、次の手順に進む前に、任意のキーを押すように求められます。
例えば:
sc qdescription "MyServiceName" && echo. && sc stop "MyServiceName" && echo. && echo [ "MyServiceName" service stopped ] && echo. && pause