Pregunta

Estoy usando un archivo por lotes para detener un servicio de Windows. Estoy usando el comando sc, pero estoy abierto a otras ideas, teniendo en cuenta la siguiente pregunta. El problema es que el archivo por lotes procede mientras el servicio se detiene (el argumento stop a sc parece que sólo solicitud de la parada - no espera para la parada).

¿Cómo puedo modificar el archivo por lotes para No continúe hasta que el tope es completa

¿Fue útil?

Solución

Uso puede utilizar NET stop, que es síncrona, es decir se va a esperar hasta que el servicio se detiene.

Ver - net stop

Otros consejos

sc stop webdriveservice
:loop
sc query webdriveservice | find "STOPPED"
if errorlevel 1 (
  timeout 1
  goto loop
)

Como se mencionó anteriormente, NET STOP se envía una orden de parada al servicio, pero, si el servicio tiene más de un cierto tiempo (20 segundos o menos es mi observación), NET STOP no esperará a que el servicio de realidad parada antes de regresar.

Para realmente hacer una pausa en el archivo por lotes hasta que el servicio se detiene, es necesario utilizar un enfoque como los descritos en estos temas:

¿Cómo comprobar si un servicio se está ejecutando a través del archivo por lotes y ponerlo en marcha, si no se está ejecutando?

Detener / A partir un servicio de Windows remoto y esperar a que se abra / cierre

Creo net stop [Service] debe esperar hasta que el servicio se haya detenido completamente antes de continuar. sc stop [Service] simplemente envía un mensaje de "parada" para el servicio.

Esto es un poco crudo, pero funcionó para mí con el fin de garantizar que podía programar un archivo por lotes diaria a REINICIAR esencialmente un servicio.

NET STOP [Servicio]

: TryAgain

TIMEOUT / T 10 / NOBREAK

NET START [Servicio]

IF% ERRORLEVEL% NEQ 0 GOTO TryAgain

Me di cuenta con este fragmento de código que esto podría dar lugar a un bucle infinito si el servicio era no iniciar correctamente. Sólo quería básicamente mostrar cómo moverse el problema siguiendo TIMEOUT donde un servicio puede tardar más alto que lo que el comando NET STOP permite.

El uso del símbolo && entre los comandos. Las esperas símbolo && para terminar el comando anterior antes de proceder al siguiente comando.

Todos los comandos debe estar en la misma fila de comandos. Puede utilizar tantos comandos que desee en una fila.

Puede utilizar también el comando pause. Con esto, le pide que presione cualquier tecla, antes de proceder al siguiente procedimiento.

Por ejemplo:

sc qdescription "MyServiceName" && echo. && sc stop "MyServiceName" && echo. && echo          [ "MyServiceName" service stopped ] && echo. && pause
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top