暂停批处理文件,直到服务停止完成?

lan*_*nce 31 batch-file servicecontroller

我正在使用批处理文件来停止Windows服务.我正在使用该sc命令,但考虑到下面的问题,我对其他想法持开放态度.问题是,该批处理文件收益,而该服务停止(该stop参数sc似乎只要求停止-它不能等待为止损).

我怎样才能修改该批处理文件无法继续,直到停止是完整的

mdm*_*dma 26

使用可以使用NET stop,这是同步的,即它将等待服务停止.

见 - NET停止

  • 这不完全正确.如果服务需要(例如4分钟)实际完全停止并退出,则"net stop"命令将在20-40秒后返回,但服务进程尚未终止.它返回"服务无法停止"......但这是误导性的.服务已经发送了一个停止命令,但是在SCM超时内没有完全退出. (36认同)
  • 但是,如果服务已经停止,`net stop`将抛出一般错误代码2(访问被拒绝). (2认同)
  • 我知道这个线程很旧,但我刚刚在 Windows Server 2012 R2 上测试了这个 - 我有一个服务需要大约三分钟才能停止...运行“net stop”时,命令不会完成,直到服务可执行文件实际完成在 CMD 文件完成之前停止并从任务管理器中消失。它可以在更新的服务器上运行,与一些旧评论所说的相反。 (2认同)

js2*_*010 21

sc stop webdriveservice
:loop
sc query webdriveservice | find "STOPPED"
if errorlevel 1 (
  timeout 1
  goto loop
)
Run Code Online (Sandbox Code Playgroud)


Jon*_*ica 13

如上所述,NET STOP将向服务发送停止命令,但是,如果服务花费的时间超过一定时间(我观察的时间是20秒左右),NET STOP将不会等待服务在返回之前实际停止.

要实际暂停批处理文件直到服务停止,您需要使用这些线程中概述的方法:

如何通过批处理文件检查服务是否正在运行并启动它,如果它没有运行?

停止/启动远程Windows服务并等待其打开/关闭