returns example c# error-handling unhandled-exception launching-application

c# - example - atrapar otro proceso de excepción no manejada



params comments c# (5)

Al resolver el problema de invocación de destino anterior, finalmente termino con el siguiente método.

Algunas de sus aplicaciones tendrían dependencias en el directorio actual, lo que lleva a una excepción cada vez que se ejecuta en otro directorio, ya que las dependencias no coinciden.

Assembly assembly = Assembly.LoadFrom(file); Directory.SetCurrentDirectory(Path.GetDirectoryName(file)); Type[] types = assembly.GetTypes(); foreach (Type t in types) { MethodInfo method = t.GetMethod("Main", BindingFlags.Static | BindingFlags.NonPublic); if (method != null) { try { method.Invoke(null, null); }

Directory.SetCurrentDirectory (Path.GetDirectoryName (archivo)); // haciendo referencia a la excepción de invocación de destino del directorio actual se resolvería.

Deseo saber si puedo detectar las excepciones no controladas generadas por otro proceso que comencé a usar Process.Start (...)

Sé que puedo detectar el error estándar mediante este link , pero lo que quiero es detectar el error que normalmente detecta el depurador Just In Time del entorno de.net, la ventana con las siguientes palabras: "Se ha producido una excepción no controlada. en su aplicación. Si continúa, la aplicación ignorará este error e intentará continuar. Si hace clic en Salir, la aplicación se cerrará de inmediato ... "A continuación aparece el mensaje de excepción y un mensaje" Continuar "y Botón "Salir".


En lugar de hacer todo el recorrido por el ensamblaje para tratar de encontrar el método Principal como en la respuesta de jmservera, simplemente puede ejecutar el ensamblaje en un nuevo dominio. Ver este artículo msdn


No. Si la aplicación controlada utiliza códigos de error y error estándar, es posible que se le notifique la ocurrencia de un error o excepción, pero no puede interceptarlo de ninguna manera.


Puedes intentar algo así para evitar que aparezca la pregunta del depurador, no obtendrás la excepción, solo el código de salida:

class Program { static void Main(string[] args) { try { ProcessStartInfo info = new ProcessStartInfo("ErroneusApp.exe"); info.ErrorDialog = false; info.RedirectStandardError = true; info.RedirectStandardOutput = true; info.CreateNoWindow = true; info.UseShellExecute = false; System.Diagnostics.Process p = System.Diagnostics.Process.Start(info); p.EnableRaisingEvents = true; p.Exited += p_Exited; } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.ReadLine(); } static void p_Exited(object sender, EventArgs e) { Process p = sender as Process; if (p != null) { Console.WriteLine("Exited with code:{0} ", p.ExitCode); } else Console.WriteLine("exited"); } }

En esta pregunta proporcionaron otra solución alternativa para eso, pero cambiando algunos valores del registro.


Si llama a un ensamblado ejecutable .Net, puede cargarlo y (bajo su propio riesgo: D) llamar al método principal de la clase del programa en una declaración try_catch:

Assembly assembly = Assembly.LoadFrom("ErroneusApp.exe"); Type[] types= assembly.GetTypes(); foreach (Type t in types) { MethodInfo method = t.GetMethod("Main", BindingFlags.Static | BindingFlags.NonPublic); if (method != null) { try { method.Invoke(null, null); } catch (Exception ex) { Console.WriteLine(ex.Message); } break; } }

Pero tenga en cuenta los riesgos de seguridad que está introduciendo al hacer eso.