Cómo programar una tarea para que se ejecute al cerrar Windows

86

¿Cómo se programa una tarea en Windows XP para que se ejecute cuando apaga Windows? De modo que quiero ejecutar un programa de línea de comando simple que escribí en c # cada vez que apago Windows. No parece haber una opción en las tareas programadas para realizar esta tarea cuando mi computadora se apaga.

Crippeoblade
fuente

Respuestas:

92

Ejecute gpedit.msc (políticas locales)

Configuración de la computadora -> Configuración de Windows -> Scripts -> Apagar -> Propiedades -> Agregar

Dan Williams
fuente
28
Si desea que se ejecute un script por lotes al cerrar sesión, descubrí que hacer referencia al archivo .bat directamente no funcionaba. Sin embargo, si lo utilicé C:\Windows\System32\cmd.execomo Nombre del script y /C C:\path\to\batch\script.batcomo Parámetros del script , lo hizo.
Dan Stevens
6
ADVERTENCIA: Los scipts de inicio y apagado de la política de grupo no se ejecutan cuando se usa fastboot (habilitado de forma predeterminada en Windows 8 y versiones posteriores). En este caso, solo el reinicio o el apagado forzado (desde el símbolo del sistema) apagan realmente la computadora. En todos los demás casos (apagado del menú de inicio), el kernel de la computadora hiberna y se revierte en el inicio, y los scipts de inicio y apagado de GPO se ignoran.
voji
@voji: ¿Es esto cierto también para Windows Server?
sampathsris
¿Qué tal reiniciar?
dangalg
estos no parecen ejecutarse en absoluto en Server Core 1909
gordy
40

Además de la respuesta de Dan Williams, si desea agregar un script de inicio / apagado , debe buscar la configuración de Windows en Configuración de la computadora . Si desea agregar una secuencia de comandos de inicio / cierre de sesión , debe buscar Configuración de Windows en Configuración de usuario .

Entonces, para reiterar lo que dijo Dan con esta información incluida,

Para inicio / apagado:

  1. Ejecute gpedit.msc (Políticas locales)
  2. Configuración de la computadora -> Configuración de Windows -> Scripts -> Inicio o apagado -> Propiedades -> Agregar

Para iniciar sesión / cerrar sesión:

  1. Ejecute gpedit.msc (Políticas locales)
  2. Configuración de usuario -> Configuración de Windows -> Scripts -> Inicio de sesión o cierre de sesión -> Propiedades -> Agregar

Fuente: http://technet.microsoft.com/en-us/library/cc739591(WS.10).aspx

Brett Pennings
fuente
2
Esta es la mejor respuesta. Cuando abre GPEditor, muestra dos nodos como lo describe. Dado que ambos nodos tienen una opción de Configuración de Windows, la respuesta aceptada es menos clara que su respuesta. Gracias por el consejo. Muy útil.
Seth Spearman
34

Para aquellos que prefieren usar el Programador de tareas, es posible programar una tarea para que se ejecute después de que se haya iniciado un reinicio / apagado configurando la tarea para que se ejecute después de que se haya registrado el evento 1074 en el registro del sistema en el Visor de eventos. Sin embargo, solo es bueno para tareas muy cortas, que se ejecutarán siempre que el sistema se reinicie / apague, lo que generalmente es de solo unos segundos.

  • Desde el Programador de tareas:

    Comience la tarea: En un
    registro de eventos :
    Origen del sistema : USER32
    EventID: 1074

  • Desde el símbolo del sistema:

    schtasks / create / tn "nombre de tarea" / tr "archivo de tarea" / sc onevent / ec system / mo * [system / eventid = 1074]

Comentario: la opción / ec está disponible en Windows Vista y versiones posteriores. (gracias @ t2d)

Tenga en cuenta que el estado de la tarea puede ser:

La operación solicitada no se realizó porque el usuario no ha iniciado sesión en la red. El servicio especificado no existe. (0x800704DD)

Sin embargo, no significa que no se haya ejecutado.

Oz Edri
fuente
¡Gracias por el consejo! @Oz, ¿se ejecutará tanto al reiniciar como al apagar? El caso que estoy tratando de cubrir es que Windows Update fuerza un reinicio ...
Erik Eidt
Sí, lo es, ya que este evento se registra al reiniciar / apagar.
Oz Edri
Tenga en cuenta que el argumento /ec systemno existe, pero se llama /ru system. consulte support.microsoft.com/en-us/kb/814596#bookmark-4
t2d
@ t2d, mientras que / ec existe en versiones más recientes, / ru se refiere a algo completamente diferente. EC le permite especificar un canal de eventos, mientras que ru le permite ejecutarlo como otro usuario. No obstante, gracias por tu comentario. Editaré mi publicación en consecuencia.
Oz Edri
1
Hay un error tipográfico en el modificador de su ejemplo. Debería ser ... /mo *[system/eventid=1074], no.../mo *[system/evendid=1074]
testworks
4

Una solución podría ser escribir un archivo por lotes simple para ejecutar el programa y luego apagar la computadora.

Puede cerrar desde la línea de comandos, por lo que su secuencia de comandos podría ser bastante simple:

c:\directory\myProgram.exe
C:\WINDOWS\system32\shutdown.exe -s -f -t 0
Neil Neyman
fuente
4

Si ejecuta GPEdit.MSC, puede ir a Configuración del equipo -> Configuración de Windows -> Scripts y agregar scripts de inicio / apagado. Estos pueden ser archivos por lotes simples o incluso EXE completos. También puede ajustar las configuraciones de usuario para los scripts de inicio y cierre de sesión en esta misma herramienta. Esta herramienta no está disponible en Windows XP Home.

Kibbee
fuente
1

Lo que puedo sugerir que haga es crear un acceso directo al archivo .bat (por ejemplo, en su escritorio) y cuando desee apagar su computadora (y ejecutar el archivo .bat) haga clic en el acceso directo que creó. Después de hacer esto, edite el archivo .bat y agregue esta línea de código al final o donde sea necesario:

c:\windows\system32\shutdown -s -f -t 00

¿Qué hace esto?

  1. Ejecuta el proceso de apagado.
  2. Muestra una alerta
  3. Obliga a todos los procesos en ejecución a detenerse
  4. Ejecuta inmediatamente
Matthew Smith
fuente
1

En Windows 10 Pro, el archivo por lotes se puede registrar; no es necesaria la solución alternativa de registrar cmd.exe y especificar el archivo bat como parámetro. Acabo de hacer esto, registrando un script de apagado y un script de inicio (arranque), y funcionó.

Wo'O Ideafarm
fuente
0

También tuve que habilitar "Especificar el tiempo máximo de espera para los scripts de políticas de grupo" y "Mostrar instrucciones en los scripts de apagado mientras se ejecutan" para que funcione para mí, como explico aquí .

Roald
fuente