停止批处理文件直到服务停止完成?
-
03-10-2019 - |
题
我正在使用批处理文件来停止Windows服务。我正在使用 sc
命令,但我对其他想法开放,考虑到以下问题。问题是批处理文件继续 尽管 服务正在停止( stop
争论 sc
似乎只是 要求 停止 - 不是 等待 停止)。
如何将批处理文件修改为 不继续 直到停止为止 完全的?
解决方案
使用可以使用 NET stop
, ,这是同步的,即它将等到服务停止。
看 - 净停止
其他提示
sc stop webdriveservice
:loop
sc query webdriveservice | find "STOPPED"
if errorlevel 1 (
timeout 1
goto loop
)
如上所述,Net Stop将向服务发送停止命令,但是,如果服务需要超过一定的时间(我的观察到20秒钟左右),则Net Stop将不会等待服务在返回之前实际停止。
要实际暂停批处理文件,直到服务停止,您需要使用像这些线程中概述的方法:
我相信 net stop [Service]
应该等到服务完全停止后继续前进。 sc stop [Service]
只需向服务发送“停止”消息。
这有点粗糙,但对我有用,以确保我可以安排每日批处理文件以实质上重新启动服务。
净停止[服务
:再试一次
超时 /t 10 /nobreak
网络启动[服务
如果%errorlevel%neq 0 goto tryagain
我意识到使用此代码段,如果服务不成功启动,这可能会导致无尽的循环。我只是想基本上展示如何使用超时服务时间比Net Stop命令所允许的时间更长的时间来解决问题。
使用 &&
命令之间的符号。这 &&
符号等待完成上一个命令,然后继续进行下一个命令。
所有命令必须在同一命令行。您可以连续使用所需的多个命令。
您也可以使用 pause
命令。这样,要求按任何键,然后继续执行下一个过程。
例如:
sc qdescription "MyServiceName" && echo. && sc stop "MyServiceName" && echo. && echo [ "MyServiceName" service stopped ] && echo. && pause
不隶属于 StackOverflow