如何检查服务是否停止

时间:2013-03-03 08:04:25

标签: service batch-file

我已经完成了一个停止服务,删除文件,安装文件和启动服务的批处理文件。 到现在为止它没有任何麻烦。但今天它无法安装文件。

经过一番搜索后,我看到服务正在停止而不是停止。 我正在使用 net stop“服务名称”来停止服务。

如何检查服务何时停止或等待它们完全停止?

1 个答案:

答案 0 :(得分:1)

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或类似的方式完成。