サービスの停止、ファイルの削除、ファイルのインストール、およびサービスの開始を行うバッチ ファイルを作成しました。今まで何のトラブルもありませんでした。しかし、今日はファイルのインストールに失敗しました。
少し検索したところ、サービスが停止していて停止していないことがわかりました。net stop "Service-Name"を使用してサービスを停止しています。
サービスがいつ停止したかを確認したり、サービスが完全に停止するのを待ったりするにはどうすればよいですか?
サービスの停止、ファイルの削除、ファイルのインストール、およびサービスの開始を行うバッチ ファイルを作成しました。今まで何のトラブルもありませんでした。しかし、今日はファイルのインストールに失敗しました。
少し検索したところ、サービスが停止していて停止していないことがわかりました。net stop "Service-Name"を使用してサービスを停止しています。
サービスがいつ停止したかを確認したり、サービスが完全に停止するのを待ったりするにはどうすればよいですか?
wmic service where name="Service-Name" get state
サービスが実行中か停止中かを表示します。そのコマンドにループバックし、ping を使用して一時停止できます。
:running
ping /n 2 0.0.0.0 >NUL
for /f "tokens=2 delims=^=" %%I in ('wmic service where name^="Service-Name" get state /format:list') do (
if #%%I==#Running goto running
)
rem When the script reaches this line, the service status is not "Running."
またはsc
、サービスの状態を判断するために使用したい場合:
:running
ping /n 2 0.0.0.0 >NUL
for /f "tokens=4" %%I in ('sc query Service-Name ^| find /i "state"') do (
if #%%I==#RUNNING goto running
)
rem When the script reaches this line, the service status is not "Running."
確かではありませんが、サービスが実際に「停止」しているときに「停止」したり、実際に「開始」しているときに「実行中」になったりする可能性があります。その場合は、プロセス リストにプロセスが存在するかどうかを確認した方がよい場合があります。これは、wmic:wmic process where name="appname.exe" get name
などを使用して行うこともできます。