viernes, 21 de febrero de 2020

mantener un programa en ejecucion

La idea es asegurarnos de que un programa se mantenga abierto y en caso de cerrarse, iniciarlo nuevamente.

Esto surge de la necesidad del sistema de escaneo y emisión de factura de tener una utilidad java siempre corriendo en una ventana de MS-DOS.
Esto en un equipo que esta a la mano de todo el mundo no siempre ocurre ya que esa ventana negra parece que llama la atención y alguien la cierra o esto ocurre por algún otro motivo que no se ni me interesa investigar.

La solución  fue la siguiente:

Mediante tasklist me fijo si esta corriendo java.exe y lo filtro con find.
confirmo el ERRORLEVEL y no esta corriendo entonces lo ejecuto en otra ventana usando START porque de otra manera se ejecuta todo en la misma ventana y en caso de cerrarla no hay watchdog...
espero 10 segundos con TIMEOUT /T 10 y repito desde el inicio con un GOTO.

Para que tampoco exista la posibilidad de cerrar la ventana en que corre este script lo voy a iniciar de manera oculta desde un VBS que se ejecuta al INICIO del sistema.

inicio.vbs
set objshell = createobject("wscript.shell") 
objshell.run "persiste.bat",vbhide 



persiste.bat
@ECHO OFF
:inicio
tasklist /fi "IMAGENAME eq java.exe" | find "java.exe"
If %ERRORLEVEL% NEQ 0 START cmd.exe java.exe
timeout /t 10
goto inicio

guardo los dos archivos en la carpeta donde esta el ejecutable y pongo un acceso directo a inicio.vbs en inicio




No hay comentarios:

Publicar un comentario