Programador de tareas de Windows, ejecutar tarea si la tarea no se está ejecutando?

4

¿Cómo me aseguro de que una tarea se esté ejecutando todo el tiempo?

Utilizo speedfan para controlar mis ventiladores y, en ocasiones, se bloquea o debe reiniciarse. Si salgo manualmente de speedfan porque no funciona correctamente, no se vuelve a abrir automáticamente.

¿Cómo puedo usar el Programador de tareas para asegurar que siempre se ejecute, incluso si no se está ejecutando?

Actualmente está configurado para ejecutarse cada vez que inicio sesión y está configurado para reiniciarse si la tarea falla pero aún no se está volviendo a abrir.

Gracias

George Othen
fuente

Respuestas:

5

Programador de tareas: ejecute la tarea si no se está ejecutando

Puede usar un script por lotes similar al siguiente y usar Tasklist y FindStr para verificar si el nombre EXE de SpeedFan se está ejecutando o no en la memoria. Con la lógica a continuación, iniciará el EXE si no se encuentra ejecutándose en la memoria.


Ejemplo de secuencia de comandos por lotes

Asegúrese de reemplazar el SpeedFan.exevalor con el nombre real del archivo EXE que se ejecuta cuando inicia la aplicación y funciona correctamente si es algo diferente en el SET EXEName=SpeedFan.exe.

Deberá asegurarse de que la ruta explícita completa al EXE también esté en la lógica a continuación de lo que realmente es, así que simplemente reemplace eso (en el SET EXEFullPath=C:\Program Files\SpeedFan\SpeedFan.exe) con la ruta real de la aplicación EXE; después del =letrero es donde cambiarás eso.

Solo programé esto para que se ejecute con el Programador de tareas cada 1 minuto, 30 segundos, o con la frecuencia con la que desea que este proceso verifique si se está ejecutando o no y, si no, para iniciarlo.

@ECHO OFF

SET EXEName=SpeedFan.exe
SET EXEFullPath=C:\Program Files\SpeedFan\SpeedFan.exe

TASKLIST | FINDSTR /I "%EXEName%"
IF ERRORLEVEL 1 GOTO :StartSpeedFan
GOTO :EOF

:StartSpeedFan
START "" "%EXEFullPath%"
GOTO :EOF
Pimp Juice IT
fuente
0

Sí, pero primero debe instalar Sysmon para monitorear este tipo de eventos, ya que no todos los programas hacen esto. hasta donde yo sé.

Esto le permitirá reiniciar cualquier aplicación que recopile en el ProcessTerminateevento y reiniciar en cualquier momento después de que lo desee. No se limitará a los 30 segundos como si se tratara de usar un script por lotes.

  1. Tome un café y descárguelo del enlace de arriba.
  2. Instalar con Sysmon.exe -ien DOSo PowerShell.
  3. No es necesario reiniciar.

Lo que esto hace completamente, se encuentra aquí .

TL; DR

System Monitor (Sysmon) es un servicio del sistema de Windows y un controlador de dispositivo que, una vez instalado en un sistema, permanece residente en todos los reinicios del sistema para monitorear y registrar la actividad del sistema en el registro de eventos de Windows


Ahora que está instalado, puede encontrarlo ubicado en el Event Viewer.

  • En Vista y superior, los eventos se almacenan enApplications and Services Logs/Microsoft/Windows/Sysmon/Operational

  • En sistemas más antiguos, los eventos se escriben en System event log.


Para este ejemplo, usaré stickies y Windows 10 Pro .

Nota: antes de usar el código en el Programador de tareas, es mejor probar primero Event Viewer.

  1. Abierto Event Viewer
  2. Haga clic derecho en Event Viewer (Local)
  3. Create Custom View...
  4. Haga clic en el XML tab
  5. Marque la casilla Edit query manually
  6. Este es un ejemplo del programa adhesivo . Simplemente modifíquelo C:\Program Files (x86)\Stickies\stickies.exepara satisfacer sus necesidades. Explicaré lo mejor que pueda debajo de lo que hace cada sección Sysmon.

    Ejemplo de consulta:

    <QueryList>
      <Query Id="0" Path="Microsoft-Windows-Sysmon/Operational">
        <Select Path="Microsoft-Windows-Sysmon/Operational">
          *[EventData[Data[@Name='Image'] = 'C:\Program Files (x86)\Stickies\stickies.exe']]
          and
          *[System[(EventID=5)]]
        </Select>
      </Query>
    </QueryList>
    

    (1) [EventData[Data[@Name='Image'] = 'validFullPath.exe']]es la consulta de la ruta. Lo que esto hace es buscar la ubicación de los archivos del programa .exe. Esta debe ser una ruta completa ya que no hay forma de usar comodines como *.

    (2) andes la declaración y para coincidir también ...

    (3) *[System[(EventID=5)es la ID del evento para ProcessTerminate.

    (4) Si se realiza correctamente, debería ver los procesos de ese programa en particular en la GUI principal cuando se terminó por última vez. Si no abre la aplicación y la cierra, debería ver Number of events:... New event availableen la parte superior de la interfaz de usuario de Event Viewers, presionar F5 para actualizar y ahora debería ver una nueva entrada de evento en la parte superior, todo va bien.

    • Se puede encontrar información más detallada en la sección Eventos y Enteries de Filtrado de Eventos de la página Sysmon .
    • Para obtener más información sobre el filtrado de eventos, consulte Wikipedia sobre filtrado con XPath 1.0
    • Si ha cometido un error, recibirá este mensaje de advertencia The Event Log query specified is invalid.
    • No te preocupes, ya que no hará ningún daño. Solo inténtalo de nuevo .

Ahora que tiene la consulta ordenada. Todo lo que tiene que hacer es configurar el Programador de tareas. Vea los pasos a continuación en la imagen adjunta.

Diagrama del cronograma de tareas Pasos 1-8

Programa de tareas Pasos Diagrama 1-8

NOTA FINAL SOBRE EL PASO 4 DEL DIAGRAMA:

  1. Es importante establecer el retraso según sus requisitos, por ejemplo, 2 secondsen mi caso.
  2. Luego se establece Repeat task...en el mínimo permitido en TS, luego la duración es un poco más larga en 2 segundos. (Prueba esto por aplicación) .
  3. No utilice la Stop all running...casilla de verificación, ya que esto provocará un bucle desagradable de detención / inicio.

Me tomó un tiempo resolver esto, ¡pero estoy muy contento de haberlo hecho! Espero que les sea útil.

Stephen Sherry
fuente