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

5
我想知道如何使用批处理文件检查服务是否正在运行。
例如:
如果xxxx服务正在运行,则转到start stage2.bat。
否则,进入echo Service not running。
任何帮助将不胜感激。
谢谢。

我已经找到了解决方案,对于其他遇到这个问题的人: - James
关闭回显 sc query PeerDistSvc 如果 %errorlevel% == 1060 echo 无法启动服务。 如果 %errorlevel% == 0 echo 服务已成功启动。 echo 错误级别: %errorlevel% - James
6个回答

12

如何通过批处理脚本检查进程是否正在运行类似。

编辑:
从该帖子中,添加了一个else语句:

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
)

嗨,是的,但它不包括任何其他语句 :( - James
你好,谢谢。不过,如果使用服务而不是进程,你会如何处理呢? - James
啊,詹姆斯,你说得对,我一直以为服务有相应的进程,但这并不总是正确的。在这种情况下,您需要按照PA的帖子使用sc query。请看这里:https://dev59.com/aXRC5IYBdhLWcg3wRO3k - John Leehey
谢谢,基本上我已经想到了 :) - James

4

阅读这篇文章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) 

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

0

首先,您可能需要管理员权限,而且没有任何示例涉及此问题。如果您尚未使用nircmd,现在可以开始使用

这是我做的方式。当我的蓝牙停止工作时

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

0

我的解决方案是,因为在Windows7下仅使用ERRORLEVEL 1无法工作,并且无论findstr是否成功,错误级别都为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
    )

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
        )
    )
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接