通过批处理文件停止依赖于其他服务的Windows服务

时间:2011-11-02 17:29:33

标签: windows file service batch-file

所有

我正在尝试停止我们创建的依赖于其他服务的Windows服务。我只想使用批处理文件,例如sc命令来停止这两项服务,其中服务在远程机器上运行。

我尝试按依赖顺序停止服务(最少依赖第一),但它不会停止服务。

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

以下行位于我创建的noddy批处理文件中:

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

4 个答案:

答案 0 :(得分:10)

" net stop" command有一个没有注释的参数。此参数为/ yes,并将自动停止所有相关服务

因此,要停止包含或不包含依赖项的服务,只需键入

即可
net stop spooler /yes

答案 1 :(得分:2)

您可以通过运行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

只有当您要停止的服务只有一个依赖项时,上述内容才有效。

答案 2 :(得分:1)

Niklas批处理文件对我不起作用。

在Windows Server 2008 R2上,qc命令似乎显示了此服务所依赖的服务。它们在这一点上并不相关,你可以在不引起生命波动的情况下停止服务。

您真正想要的是依赖于被杀死服务的服务。你可以使用EnumDepend命令获取sc.exe。

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

答案 3 :(得分:1)

任何遇到类似问题的人:

记住 SC命令异步 非常重要。以下内容可能有所帮助:

Halt batch file until service stop is complete?