2011-11-02 13 views
5

Todo,Detener un servicio de Windows que depende de otro servicio a través del archivo por lotes

Estoy tratando de detener un servicio de Windows que hemos creado que depende de otro servicio. Solo quiero detener ambos servicios usando un archivo de proceso por lotes, comando sc por ejemplo, donde los servicios se ejecutan en una máquina remota.

He intentado detener los servicios en el orden de dependencia (menos dependiente primero), pero no detiene el servicio.

Por ejemplo, el Servicio1 depende del Servicio2 que se configura dentro de la configuración del Servicio en la consola de Servicios. Estoy corriendo el script en mi PC con Windows 7 y el servidor ejecuta Windows Server 2003.

Las siguientes líneas se encuentran en el archivo por lotes Noddy creé:

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

La salida de la consola de comandos es:

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. 

El servicio Service2 no se detiene. Service1 se detiene bien.

¿Alguna idea?

Gracias,

Andez

Respuesta

2

Puede comprobar qué dependencias un servicio ha ejecutando sc qc <service>

Y con el fin de script que y recuperar las dependencias se puede poner en un ciclo for

Ejemplo:

@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 

Lo anterior solo funcionará si el servicio que desea detener solo tiene una dependencia.

+0

¿El trabajo anterior como que quería que? – NiklasJ

1

El archivo por lotes Niklas no funciona para mí.

Parece que en Windows Server 2008 R2, el comando qc muestra los servicios de los que depende este servicio. No son relevantes en este punto, puede detener el servicio sin causar una onda en su vida.

Lo que realmente desea son los servicios que dependen del servicio que se está eliminando. Obtiene aquellos con el comando EnumDepend para sc.exe.

Desafortunadamente, la sintaxis de salida es bastante diferente, por lo que deberá conservar la lógica que se muestra arriba pero reemplazar el análisis sintáctico.

6

El comando "net stop" tiene un parámetro que no se comenta.Este parámetro es/sí y se detendrá automáticamente todos los servicios dependientes también

Así que para detener un servicio con o sin dependencias sólo tiene que teclear

net stop spooler /yes 
Cuestiones relacionadas