所有
我正在尝试停止我们创建的依赖于其他服务的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
答案 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)