Pregunta

Tengo una aplicación C # que invoca una aplicación C ++ no administrada a través de Process.Start ()

En algunas máquinas, si esta aplicación C ++ se cancela, me queda el cuadro de diálogo de error Just-In-Time que muestra

¿Hay alguna forma de C # para detectar que la aplicación C ++ ha fallado y simplemente reiniciarla?

(No tengo la fuente y, por lo tanto, no puedo modificar la aplicación C ++)

¿Fue útil?

Solución

El cuadro de diálogo del depurador JIT se muestra porque la aplicación C ++ se bloqueó de alguna manera. Mientras el diálogo está abierto, el proceso todavía está presente (pero suspendido), lo que significa que la clase Process no considerará que tiene & Quot; salido de & Quot; hasta que se descarte el diálogo JIT o un depurador adjunto finalice el proceso.

Puede deshabilitar la depuración JIT en las máquinas que experimentan el problema ( creo que deshabilitar el servicio Machine Debug Manager puede deshabilitar la depuración JIT), permitiendo que la aplicación se bloquee y muera (y, por lo tanto, informe como " salido de "), o (y no tengo idea de cómo haría esto), vea si puede hacer que su aplicación host C # se adjunte como un depurador para la aplicación C ++ y recibir notificación de la falla de la aplicación C ++, finalizarla y luego actuar sobre la información que ha finalizado.

Otros consejos

Si C ++ es una consola basada, puede verificar dos cosas,

  1. El código de salida, comúnmente 0 significa cerrado normalmente, de lo contrario es un problema (pero creo que esto depende de la convención utilizada para desarrollar estas aplicaciones)

  2. Verifique el error estándar si está vacío, para que todo esté bien

    utilizando (Proceso p = nuevo Proceso ())    {

     p.StartInfo.UseShellExecute = false;
     p.StartInfo.RedirectStandardError = true;
     p.StartInfo.FileName = "any.exe";
     p.Start();
     string error = p.StandardError.ReadToEnd();
     p.WaitForExit()
     if(error.Length == 0 && p.ExitCode == 0)
     {
     }
    }
    
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top