我有一个在服务器上运行并停止服务的批处理脚本。 有时会出现服务无法停止使用NET STOP并且需要终止服务的问题。 为了解决这个问题,我添加了一个IF语句来杀死服务,如果没有停止的话。
NET STOP "Service"
FOR /F "tokens=3 delims=: " %%H IN ('sc query "Service" ^| findstr " STATE"') DO (
IF /I "%%H" EQU "RUNNING" (
:: Kill the service if it is still running
Taskkill /F /FI "SERVICES eq Service"
)
)
我试图搜索这个,但看不到明确的答案。
问题是;是否在'NET STOP'完成后才运行kill进程,或者它是否开始尝试停止服务并立即运行IF Statement。
如果以后我需要在它们之间添加一个timeout.exe行,让NET STOP有足够的时间来做它的事情。
感谢您的帮助。
答案 0 :(得分:3)
NET STOP
是同步的。这意味着脚本将等待它完成。此外,您甚至无需使用SC
检查服务。 NET STOP
具有以下返回码:
因此,您只需检查返回代码是否为0(%ERRORLEVEL%==0
- 表示服务已停止),否则将其终止。