通过batch file停止依赖于其他服务的Windows服务

所有,

我试图阻止我们创build的依赖于另一个服务Windows服务。 我只想停止使用batch file的服务,例如在远程机器上运行服务的sc命令。

我已经尝试停止服务的依赖顺序(最不依赖的第一),但它并没有停止服务。

例如,Service1依赖于在服务控制台中的服务设置中configuration的Service2。 我在Windows 7 PC上运行脚本,服务器运行Windows Server 2003。

以下行在我创build的noddybatch file中:

sc \\SERVER stop "Service1" sc \\SERVER stop "Service2" 

命令控制台中的输出是:

 D:\Test>sc \\SERVER stop "Service2" [SC] ControlService FAILED 1051: A stop control has been sent to a service that other running services are dependent on. 

服务Service2不会停止。 Service1停止罚款。

有任何想法吗?

谢谢,

Andez

“净停止”命令有一个没有评论的参数。 这个参数是/是,并且会自动停止所有的依赖服务

所以要停止一个有或没有依赖关系的服务,只需键入

 net stop spooler /yes 

您可以通过运行sc qc <service>来检查服务所依赖的依赖关系

为了编写脚本并检索依赖关系,可以将它放在for循环中

例:

 @echo off setlocal enabledelayedexpansion set service=winmgmt set server=server for /f "Tokens=2 Delims=:" %%i in ('sc \\%server% qc %service% ^| find /i "DEPENDENCIES"') do ( set depservice=%%i rem removes spaces set depservice=!depservice: =! sc \\%server% stop "!depservice!" rem extra: accumulate all dependencies to one variable set alldeps=!alldeps!, !depservice! rem remove first ", " in variable set alldeps=!alldeps=~2! ) sc \\%server% stop "%service%" && echo Both %service% and !alldeps! were stopped || echo Something went wrong stopping %service% exit /b 

只有当你想停止的服务只有一个依赖时,上述才会起作用。

对于遇到类似问题的任何人:

请记住, SC命令是异步的 。 以下可能会有所帮助:

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

Niklas批处理文件不适用于我。

看来在Windows server 2008 R2上,qc命令显示了该服务依赖的服务。 在这一点上他们是不相关的,你可以停止服务,而不会造成他们的生活波动。

你真正想要的是依赖于被杀的服务的服务。 你可以用EnumDepend命令将这些命令转换为sc.exe。

不幸的是,输出语法有很大的不同,所以你需要保留上面显示的逻辑,但是替换解析。