2011-11-02 123 views
5

所有依赖于其他服务,停止Windows服务是通过批处理文件

我试图阻止,我们已经创建了一个依赖于其他服务的Windows服务。我只想停止使用批处理文件的服务,例如sc命令,其中服务在远程计算机上运行。

我试着按照依赖性顺序停止服务(最不依赖第一个),但它并没有停止服务。

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

以下线在我创建诺迪批处理文件:

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

回答

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 

上述内容仅适用于您要停止的服务只有一个依赖项。

+0

做了上述工作了,你想让它? – NiklasJ

1

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

似乎在Windows Server 2008 R2上,qc命令显示该服务依赖的服务。在这一点上他们不相关,你可以停止服务而不会导致他们生活中的涟漪。

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

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

6

的“净停止”命令有未注释的参数。此参数是/是,并会自动停止所有相关的服务太

因此停止服务,或不依赖你只需要输入

net stop spooler /yes 
相关问题