web-dev-qa-db-ja.com

サービスの停止が完了するまでバッチファイルを停止しますか?

バッチファイルを使用してWindowsサービスを停止しています。私はscコマンドを使用していますが、以下の質問を考えると、他のアイデアを受け入れることができます。問題は、バッチファイルが進行することですwhileサービスが停止しています(stopへのsc引数はrequest停止のみに見えるようです- -停止しません待機停止します)。

停止がcompleteになるまで、バッチファイルを続行しないに変更するにはどうすればよいですか?

33
lance

使用できますNET stop、これは同期です。つまり、サービスが停止するまで待機します。

参照- NET停止

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

上記のように、NET STOPはサービスに停止コマンドを送信しますが、サービスに一定の時間(私の観察では20秒程度)がかかる場合、NET STOPはサービスが実際に停止するのを待たずに戻ります。

サービスが停止するまでバッチファイルを実際に一時停止するには、次のスレッドで説明されているようなアプローチを使用する必要があります。

サービスが実行されていない場合に、バッチファイル経由でサービスが実行されているかどうかを確認して開始する方法

リモートWindowsサービスを停止/開始し、それが開く/閉じるのを待機しています

13
Jonesome

私は信じている net stop [Service]先に進む前に、サービスが完全に停止するまで待機する必要があります。 sc stop [Service]は単に「停止」メッセージをサービスに送信します。

1

これは少し粗雑ですが、基本的にサービスを再起動するように毎日のバッチファイルをスケジュールできるようにするために私にとってはうまくいきました。

NET STOP [サービス]

:再試行

タイムアウト/ T 10/NOBREAK

NET START [サービス]

IF%ERRORLEVEL%NEQ 0 GOTO TryAgain

このコードスニペットを使用して、サービスが正常に開始されなかった場合、無限ループが発生する可能性があることに気付きました。基本的に、サービスがNET STOPコマンドで許可されているものよりも停止に時間がかかる可能性があるTIMEOUTを使用して問題を回避する方法を示したかっただけです。

1
Simpleton

使用 &&コマンド間の記号。 &&シンボルは、前のコマンドが完了するのを待ってから、次のコマンドに進みます。

すべてのコマンドは同じコマンド行にある必要があります。続けてコマンドをいくつでも使用できます。

pauseコマンドも使用できます。これにより、次の手順に進む前に、任意のキーを押すように求められます。

例えば:

sc qdescription "MyServiceName" && echo. && sc stop "MyServiceName" && echo. && echo          [ "MyServiceName" service stopped ] && echo. && pause
0
AntonyMan