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

8

大家好,

我正在尝试停止一个依赖于另一个服务的Windows服务。我想使用批处理文件来停止这两个服务,例如使用sc命令,在远程计算机上运行这些服务。

我已经尝试按照依赖项的顺序(从最少依赖开始)停止服务,但是它无法停止该服务。

例如,Service1依赖于在Services控制台中配置的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
4个回答

16

"net stop"命令有一个未被注释的参数。这个参数是/yes,将自动停止所有相关服务。

因此,要停止一个带或不带依赖项的服务,只需键入

net stop spooler /yes

啊哈……!这让我想起了一个机器人说的话,"你确定吗?(是/否)-好的老板-错误。"你确定吗?(是/否)-是的-完成:D - gumuruh

2

您可以通过运行sc qc <服务名>来检查一个服务所依赖的组件。

如果要编写脚本并获取这些依赖项,可以将其放在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

如果您想要停止的服务只有一个依赖项,上述方法才会起作用。

1

1
Niklas的批处理文件对我无效。
在Windows Server 2008 R2上,qc命令显示此服务所依赖的服务。但是这些服务在此时并不相关,您可以停止该服务而不会影响它们的运行。
实际上,您需要的是依赖于被关闭的服务的服务。您可以使用sc.exe的EnumDepend命令获得这些服务。
不幸的是,输出语法有很大的差异,因此您需要保留上面显示的逻辑,但替换解析方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接