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

And*_*dez 6 windows service file batch-file

所有,

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

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

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

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

sc \\SERVER stop "Service1"
sc \\SERVER stop "Service2"
Run Code Online (Sandbox Code Playgroud)

命令控制台中的输出是:

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.
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

谢谢,

Andez

小智 10

"net stop"命令有一个未注释的参数.此参数为/ yes,也将自动停止所有相关服务

因此,要停止包含或不包含依赖关系的服务,只需键入即可

net stop spooler /yes
Run Code Online (Sandbox Code Playgroud)


Nik*_*all 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
Run Code Online (Sandbox Code Playgroud)

仅当您要停止的服务仅具有一个依赖项时,上述方法才有效。