Pregunta

I creado una aplicación WinForm (control) utilizando VS 2005 (C #), y ahora, tengo un problema cuando esta aplicación se bloquea por alguna razón, tengo que estar seguro de que se reiniciará automáticamente.

¿Cómo puedo resolver esto? (Tal vez mediante el uso de aplicaciones de servicios de Windows?)

Gracias

¿Fue útil?

Solución 6

Gracias a todos, la solución que elijo es: en el programa principal añado un evento de excepción (UnhandledExceptionEventHandler y ThreadExceptionEventHandler véase más arriba) en estos eventos que reiniciar el programa (también ponen de registro y de correo electrónico a los errores de rastreo). Y para el problema de reinicio agrego clave de registro en [HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run] con mi ruta de la aplicación para asegurarse de que mi aplicación se reiniciará después del reinicio de Windows;)

Otros consejos

Sí, un la creación de servicios de Windows funcionaría como usted puede configurarlo para que se reinicie automáticamente si se bloquea, sino una forma mejor sería evitar que estrellarse en el primer lugar! ¿Hay alguna razón específica de que se estrelle?

Con buen manejo de errores y presentación de informes se puede escribir de modo que simplemente informa de los errores que se producen y lleva a cabo, que en mi humilde opinión sería la mejor ruta para ir

Considere esto:

http://msdn.microsoft.com/en-us/library/ cc303699.aspx

[DllImport("kernel32.dll")]
public static extern int RegisterApplicationRestart(
    [MarshalAs(UnmanagedType.BStr)] string commandLineArgs,
    int flags);
apoyada

Mínimo servidor

Windows Server 2008

http://msdn.microsoft.com/en -US / library / aa373347 (VS.85) .aspx

La creación de un servicio de Windows es una muy buena idea para cualquier proceso en segundo plano de larga duración por muchas razones, Sin embargo re-iniciar un estrelló aplicación no es uno de ellos!

Se debe entender por qué la aplicación se bloquea y evitar que suceda.

Por supuesto, también convertir su aplicación a un servicio de Windows -. Verá muchos beneficios, sin embargo, la forma correcta de resolver su problema es fijar el bloqueo de la aplicación, en primer lugar

Para * texto fuerte * una aplicación de observador. Debe crear un temporizador en el servicio de Windows y el código de algo como esto en el caso de pulsos del temporizador:

        Process[] procs = Process.GetProcessesByName("you app name");
        if (procs.Length == 0)
            Process.Start("your app filename");

si realmente no puede hacer nada sobre el problema de bloqueo, lo recomendaría un try-catch en lugar de un observador. (No se olvide de volver a tiro manejado importantes excepciones)

    [STAThread]
    static void Main()
    {
        try
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
        catch(Exception ex)
        {
            //log the exception here
            Application.Restart();
        }
    }

Desde que usted dice que utiliza una aplicación de Windows Forms no se puede utilizar un servicio de Windows para que, como un servicio de Windows no se le permite tener una interfaz gráfica de usuario.

Lo que haría que crearía una aplicación invisible "perro guardián", que supervisa el proceso y reinicia automáticamente cuando se bloquea.

Se puede poner un bloque intento de captura en todo el código que es más probable que la causa del accidente. A continuación, escribir el mensaje de excepción a un archivo de registro. También puede establecer un punto de depuración en el bloque catch para ver otros detalles como la pila de llamadas, etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top