2012-02-18 9 views
6

¿Cómo puedo iniciar mi programa automáticamente si se bloquea en el servidor de Windows 2003? A veces, mi programa simplemente se bloquea, ¿hay alguna manera en las ventanas o configuraciones que puedo configurar?¿Cómo reiniciar el programa automáticamente si falla en Windows?

+1

¿Qué tipo de programa? ¿Un servicio de Windows o una aplicación regular? –

+0

Hmm, "a veces mi programa simplemente falla". Parece que un mejor enfoque sería descubrir por qué el programa falla y arreglarlo. Las curitas son geniales porque el cuerpo se autocuración. No es así con tus programas. –

+0

Por supuesto que desea hacer que su programa se bloquee gratis. Ese es un gran ideal para luchar. Pero incluso los programas más robustos pueden bloquearse ocasionalmente. Si se encuentra en un entorno de servidor, puede tener mucho sentido reiniciarse cuando se produce un bloqueo. Todavía puede registrar los bloqueos y tratar de eliminarlos, pero sus usuarios serán mucho más felices sin un tiempo de inactividad prolongado por cada bloqueo. – aggieNick02

Respuesta

7

El enfoque habitual es ejecutar lo que se conoce como guardian proceso. Este es un proceso separado, a menudo un servicio, que supervisa el estado del proceso principal. Cuando el guardián detecta que el servicio principal ha muerto, lo vuelve a generar.

Según mi leal saber y entender, no existe una funcionalidad de Windows para hacer esto por usted.

+2

Característica incorporada para servicios, pestaña Recuperación. –

+2

Prefiero imaginar que el uso de la palabra "programa" implica que la pregunta se refiere a un programa de escritorio. –

+0

Nah, un servicio es un verdadero ejecutor blooded. Solo un par de convenciones para mantener al usuario bajo control. –

1

Desafortunadamente no hay configuraciones en Windows para reiniciar automáticamente un programa normal cuando se bloquea.

¿Necesita interactuar activamente con la GUI de su aplicación? Algunos de los Service Wrappers (diseñados para ejecutar cualquier aplicación como un Servicio de Windows) supervisarán su aplicación y la reiniciarán cuando falle, pero asegúrese de investigar Session 0 Isolation para asegurarse de que no se interponga en el camino.

1

Puede usar alguna aplicación especial como BDV SystemEvents o cualquier otra. Le permite especificar la aplicación que se iniciará si se cierra alguna otra aplicación. Especifique la misma aplicación como una condición y como una acción y obtendrá los resultados esperados.

3

Aviso: ejecutar los archivos de murciélago auto-looping puede ser útil, pero a menos que sepa lo que está haciendo, pueden causar todo tipo de estragos. Esto funciona especialmente si los ejecuta al inicio. Usted ha sido advertido.

De todos modos. Acabo de recordar algo de mis 286 días, cuando jugué mucho con archivos BAT. Si se escribe el archivo

yourprogram.exe 
some other event 

el archivo BAT se ejecutará yourprogram, y luego hacer una pausa y esperar en el fondo hasta que el programa termine. Después de eso, ejecutará "algún otro evento". Esto solía ser un poco molesto si querías ejecutar varias cosas a la vez, pero aquí en realidad es útil. Al usar esto, es posible hacer que ejecute un ciclo que reinicie el programa (y vuelva a ejecutar el archivo bat) tan pronto como se cierre. Combine esto con https://superuser.com/questions/62525/run-a-completly-hidden-batch-file, y nunca lo verá suceder.

El archivo BAT final ("Restart.bat" en este ejemplo) quedará del siguiente modo:

c:\[location]\yourprogram.exe 
wscript "C:\[location]\invisible.vbs" "C:\[location]\restart.bat" 

Eso es todo. Inicie el programa (en el inicio a través de una tarea o incluso solo en la carpeta de inicio) con la línea 2, y esto debería resolver su problema :)

Ah, si quiere detener el ciclo, simplemente cambie el nombre del archivo de bat o ponga "//"delante de las dos líneas, guárdelo y salga del programa.

Si el programa que está ejecutando requiere derechos de administrador, la solución que encontré fue usar psexec (http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx) para ejecutar tanto el programa como el bate con privilegios elevados. En ese caso, la MTD se verá así:

c:\[location]\psexec -h c:\[location]\yourprogram.exe 
c:\[location]\psexec -h wscript "C:\[location]\invisible.vbs" "C:\[location]\restart.bat" 

entonces se corre el bate como administrador, o ejecutar la segunda línea (sin la parte psexec) del programador de tareas con privilegios elevados.TEN CUIDADO: ejecutarlo como un usuario normal y hacer clic en "no" en el indicador UAC me dio un BSOD, probablemente porque "no se puede ejecutar el programa debido a la falta de privilegios" un par de mil millones de veces o algo :)

+1

Concepto agradable. Incluso podría evitar un archivo por lotes e invisible.vbs, y hacerlo en un VBScript, por ejemplo: 'Mantenga la calculadora abierta Establezca objShell = WScript.CreateObject ("WScript.Shell") ObjShell.run "calc.exe", 1, verdadero ObjShell.run (Wscript.ScriptFullName) – Jimadine

1

Estaba buscando algo similar. Hay dos opciones para manejar esto: puede escribir un pequeño script usted mismo o usar algo que ya existe.

Después de buscar en Google me encontré con este agradable list. El blogger compiló unas 8 herramientas para reiniciar automáticamente una aplicación bloqueada o cerrada.

1

Puede utilizar RegisterApplicationRestart.

"Si se registra para el reinicio y la aplicación se encuentra con un excepción no controlada o no responde, se ofrece al usuario la oportunidad de reiniciar la aplicación, la aplicación no es se reinicia automáticamente sin el consentimiento del usuario. "

Para el reinicio automático sin intervención del usuario, también existe RestartOnCrash. Funciona con todas las versiones de Windows.

Cuestiones relacionadas