用于检查系统服务是否正在运行的批处理文件

时间:2011-05-09 17:47:37

标签: windows service batch-file

我想知道如何使用批处理文件检查服务是否正在运行

e.g。

如果xxxx服务正在运行 去开始stage2.bat 否则转到echo服务未运行

任何帮助将不胜感激

谢谢

6 个答案:

答案 0 :(得分:12)

How to check if a process is running via a batch script类似

编辑:
从帖子中添加了另外一条声明:

tasklist /FI "IMAGENAME eq myapp.exe" 2>NUL | find /I /N "myapp.exe">NUL
if "%ERRORLEVEL%"=="0" (
    call stage2.bat
) else (
    echo Program is not running
)

对于服务:

sc query "ServiceName" | find "RUNNING"
if "%ERRORLEVEL%"=="0" (
    call stage2.bat
) else (
    echo Program is not running
)

答案 1 :(得分:3)

阅读这篇文章http://support.microsoft.com/kb/251192并查看SC /?

然后尝试

SC QUERY

修改 自动化检查,将结果传递给FIND并查找RUNNING

 SC QUERY %1 | FIND "STATE" | FIND "RUNNING" >nul
 IF ERRORLEVEL 1 (echo NOT RUNNING ) ELSE (echo RUNNING) 

答案 2 :(得分:0)

@echo off

color 1F


@sc query >%COMPUTERNAME%_START.TXT

ECHO REPORT MISSING INSTALL SERVICES >%COMPUTERNAME%_MISSING.TXT


find /I "AcPrfMgrSvc" %COMPUTERNAME%_START.TXT >nul

IF ERRORLEVEL 1 NET START "AcPrfMgrSvc"

IF ERRORLEVEL 1 ECHO AcPrfMgrSvc >>%COMPUTERNAME%_MISSING.TXT

答案 3 :(得分:0)

我的解决方案,因为在Windows7下,如果ERRORLEVEL 1成功与否,则findstr不起作用且errorlevel为0。

在我的情况下,我正在寻找由 java.exe 启动的东西,让我们说 HELLO.jar [java.exe的参数]

    wmic PROCESS LIST FULL | findstr /I java.exe | findstr /I HELLO.jar

    if ErrorLevel 1 (
        Echo OK
        msg "%username%" HELLO.jar not started
            Pause   
    ) else (
        Echo ERR
        msg "%username%" HELLO.jar already running
            Pause
        exit
    )

答案 4 :(得分:0)

首先,您可能需要管理员权限,而所有示例都没有。如果您尚未使我们满意,您可以立即开始

无论如何,这就是我的做法。当我的蓝牙停止工作时

set _ServiceName=CSRBtAudioService
 call :SrvStat %_ServiceName%
goto :SomeWhere

:SrvStat
sc query "%1" | find "RUNNING"
    if %Errorlevel% EQU 0 ( echo: restarting %1 & nircmd elevatecmd service restart %1
    ) else ( echo: starting %1 & nircmd elevatecmd service start %1 )
exit /b

答案 5 :(得分:0)

如果有人希望在使用SC的远程系统上执行此操作。注意:放置在额外的'if / I“ %% H”'语句中,以作为进一步使用的示例。

SC \\host query

示例:

:: This example prints the status of a remote service 
SC \\%REMOTE_SYSTEM% query %SERVICE% | FIND "STATE" >nul
IF ERRORLEVEL 1 (
    echo RESULT: %SERVICE% is [UNKNOWN]  
 ) ELSE (
    for /F "tokens=3 delims=: " %%H in ('SC \\%REMOTE_SYSTEM% query "%SERVICE%" ^| findstr "        STATE"') do (
        if /I "%%H"=="STOPPED" (
            echo RESULT: %SERVICE% is %%H
        ) else (
            echo RESULT: %SERVICE% is %%H
        )
    )
)