1. ホーム
  2. windows

[解決済み] バッチファイルを使用してサービスが実行されているかどうかを確認し、実行されていない場合は開始するにはどうすればよいですか?

2022-11-11 21:38:28

質問

以下の処理を行うバッチファイルを作成したい。

  • サービスが稼働しているかどうかを確認する
    • 実行中であれば、バッチを終了させる
    • 実行中でない場合は、サービスを開始します。

これまでググってきたコードサンプルは、動作しないことが判明したので、掲載しないことにしました。

サービスの起動は

net start "SERVICENAME"

  1. サービスが実行されているかどうかを確認するには、バッチファイル内で if 文を作成するにはどうすればよいですか。
  2. 少し混乱しています。net start に渡さなければならない引数は何ですか?サービス名またはその表示名ですか?

どのように解決するのですか?

サービスの状態を確認するには sc query <SERVICE_NAME> . バッチファイル内のifブロックの場合。 ドキュメントを参照してください。 .

次のコードは、サービスの状態をチェックします。 MyServiceName の状態をチェックし、実行中でなければ開始します (サービスが実行中でなければ、if ブロックが実行されます)。

for /F "tokens=3 delims=: " %%H in ('sc query "MyServiceName" ^| findstr "        STATE"') do (
  if /I "%%H" NEQ "RUNNING" (
   REM Put your code you want to execute here
   REM For example, the following line
   net start "MyServiceName"
  )
)

何をするものなのかの説明

  1. サービスのプロパティを問い合わせます。
  2. テキスト "STATE"を含む行を探します。
  3. その行をトークン化し、サービスの状態を含む3番目のトークンを引き出します。
  4. 文字列 "RUNNING" に対して、結果の状態をテストします。

2番目の質問に関しては、引数として net start に渡したい引数は、サービス名です。 ではなく は表示名ではありません。