web-dev-qa-db-ja.com

Windowsサービスが(できれば)バッチのみを使用してインストールされているかどうかをどのように確認しますか?

Windowsサービスがバッチファイルからインストールされているかどうかを確認する必要があります。必要に応じてバッチ以外のものに浸ることができますが、したくありません。これを行う方法はありますか?

19
kerkeslager

これを試して:

@echo off
SC QUERY ftpsvc > NUL
IF ERRORLEVEL 1060 GOTO MISSING
ECHO EXISTS
GOTO END

:MISSING
ECHO SERVICE MISSING

:END

SC QUERYコマンドは、表示名ではなく短いサービス名でクエリを実行することに注意してください。この名前は、ServiceManagerでサービスのプロパティの[全般]タブを確認することで見つけることができます。

55
Kev

「停止」などのコマンドではなく「クエリ」を使用する必要があります。「停止」はサービスが存在する場合に停止する可能性があるため、これは正しい方法ではありません。

@echo OFF

set _ServiceName=SomeServiceName

sc query %_ServiceName% | find "does not exist" >nul
if %ERRORLEVEL% EQU 0 echo Service Does Not Exist.
if %ERRORLEVEL% EQU 1 echo Service Exist.
10
M Sasan MH

どうですか:

sc interrogate "nameofyourservicehere"

tasklistはサービスがインストールされているかどうかに関する情報を提供しないので、これは本当に便利だと思いました。 (または私は方法を見つけられませんでした)

3
Spangenhelm

これは、sc queryを使用してWindowsサービスがインストールされているかどうかを確認し、見つかった場合は停止する例です。

sc query | find /I "%tmpServiceName%" > nul
if not errorlevel 1 echo. && net stop %tmpServiceName%
if errorlevel 1 echo.   - Windows service %tmpServiceName% is not running or doesn't exist.
0