por off lotes lenguaje informatica ejemplos crear como comandos batch bat avanzados archivos archivo batch-file servicecontroller

batch file - off - ¿Detener el archivo por lotes hasta que se complete la parada del servicio?



echo off bat (6)

Estoy usando un archivo por lotes para detener un servicio de Windows. Estoy usando el comando sc , pero estoy abierto a otras ideas, dada la siguiente pregunta. El problema es que el archivo por lotes continúa mientras el servicio se detiene (el argumento stop para sc parece solo solicitar la parada, no espera la parada).

¿Cómo puedo modificar el archivo por lotes para que no proceda hasta que se complete la detención?


Creo que net stop [Service] debería esperar hasta que el servicio se haya detenido por completo antes de continuar. sc stop [Service] simplemente envía un mensaje de "detención" al servicio.


Esto es un poco crudo, pero funcionó para mí para asegurarme de poder programar un archivo de lote diario para REINICIAR un servicio esencialmente.

NET STOP [Servicio]

:Inténtalo de nuevo

TIMEOUT / T 10 / NOBREAK

NET START [Servicio]

IF% ERRORLEVEL% NEQ 0 GOTO TryAgain

Me doy cuenta con este fragmento de código que esto podría dar como resultado un ciclo sin fin si el servicio no se inicia correctamente. Simplemente quería mostrar básicamente cómo solucionar el problema utilizando TIMEOUT, donde un servicio puede demorar más de lo que permite el comando NET STOP.


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


Usa el símbolo && entre los comandos. El símbolo && espera a terminar el comando anterior antes de continuar con el siguiente comando.

Todos los comandos deben estar en la misma fila de comando. Puede usar todos los comandos que quiera en una fila.

Puede usar también el comando de pause . Con esto, pide presionar cualquier tecla, antes de proceder al siguiente procedimiento.

Por ejemplo:

sc qdescription "MyServiceName" && echo. && sc stop "MyServiceName" && echo. && echo [ "MyServiceName" service stopped ] && echo. && pause


Como se mencionó anteriormente, NET STOP enviará un comando de detención al servicio, pero, si el servicio tarda más de un cierto tiempo (20 segundos más o menos es mi observación), NET STOP NO esperará a que el servicio se detenga antes de regresar.

Para pausar realmente el archivo por lotes hasta que se detenga el servicio, debe usar un enfoque como los que se describen en estos hilos:

¿Cómo verificar si un servicio se está ejecutando a través de un archivo por lotes e iniciarlo, si no se está ejecutando?

Detener / iniciar un servicio remoto de Windows y esperar que se abra / se cierre


El uso puede usar NET stop , que es sincrónico, es decir, esperará hasta que el servicio se detenga.

Ver - NET parada