Cómo detectar una aplicación no administrada ha abortado
-
20-08-2019 - |
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 ++)
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,
-
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)
-
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) { } }