2011-11-02 24 views
5

Tutti,interrompere un servizio di Windows che dipende da un altro servizio tramite file batch

Sto cercando di arrestare un servizio di Windows che abbiamo creato che dipende da un altro servizio. Voglio solo interrompere entrambi i servizi utilizzando un file batch, ad esempio il comando sc, dove i servizi sono in esecuzione su una macchina remota.

Ho cercato arresto dei servizi in ordine di dipendenza (almeno dipende in primo luogo), ma non arrestare il servizio.

Per esempio Servizio1 dipende Servizio2 che è configurato nelle impostazioni di servizio nella console Servizi. Sono in esecuzione lo script sul mio Windows 7 PC e il server esegue Windows Server 2003.

Le seguenti linee sono nel file batch Noddy ho creato:

sc \\SERVER stop "Service1" 
sc \\SERVER stop "Service2" 

L'output nella console di comando è:

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. 

Il servizio Servizio2 non si interrompe. Service1 si ferma bene.

Qualche idea?

Grazie,

Andez

risposta

2

È possibile verificare quali dipendenze di un servizio è eseguendo sc qc <service>

E al fine di script che e recuperare le dipendenze si può mettere in un ciclo for

Esempio:

@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 

Quanto sopra funzionerà solo se il servizio che si desidera interrompere ha solo una dipendenza.

+0

ha fatto il lavoro di cui sopra come si voleva che? – NiklasJ

1

Il file batch Niklas non funziona per me.

Sembra che su Windows Server 2008 R2, il comando QC mostra i servizi che questo servizio dipende. Non sono rilevanti a questo punto, puoi interrompere il servizio senza causare un'increspatura nella loro vita.

Ciò che in realtà si desidera sono i servizi che dipendono dal servizio da eliminare. Si ottengono quelli con il comando EnumDepend a sc.exe.

Purtroppo, la sintassi di uscita è un po 'diverso, quindi è necessario per preservare la logica mostrata sopra, ma sostituire il parsing.

6

Il comando "net stop" ha un parametro che non è commentato.Questo parametro è/sì e si fermerà automaticamente tutti i servizi dipendenti troppo

Quindi, per arrestare un servizio, con o senza le dipendenze basta digitare

net stop spooler /yes 
Problemi correlati