2011-11-02 63 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 
相關問題