Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: rigorvzla en 17 Abril 2022, 18:37 pm



Título: Onstartup en DLL Catch de errores
Publicado por: rigorvzla en 17 Abril 2022, 18:37 pm
Hola amigos, hoy les traigo un codigo q me dieron para capturar errores en la aplicacion de manera global.

este codigo se coloca en el archivo App.xaml.cs
dentro de la clase App.

Código:

  string Reporte;
protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);
            DispatcherUnhandledException += App_DispatcherUnhandledException;
        }


        private void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
        {
            Reporte = $@"Excepción: { e.Exception.InnerException.Message.ToString()}

        Source: { e.Exception.InnerException.Source.ToString()}

        StackTrace: { e.Exception.InnerException.StackTrace.ToString()}

        Mensaje: { e.Exception.Message.ToString()}
        ";
            File.WriteAllText("log.txt", Reporte);
            //Mensaje(e.Exception.InnerException.ToString() + Environment.NewLine + e.Exception.ToString());
        }


        private void MyHandler(object sender, UnhandledExceptionEventArgs args)
        {
            MessageBox.Show(Reporte, "Error Capturado", MessageBoxButton.OK, MessageBoxImage.Error);
        }

hasta aqui todo va buenisimo, ya que con unas modificaciones mias, es posible manipular ese error de cualquier manera imaginable.

Error producido:

Citar
System.InvalidOperationException
  HResult=0x80131509
  Mensaje = No se puede crear más de una instancia System.Windows.Application en el mismo AppDomain.
  Origen = PresentationFramework
  Seguimiento de la pila:
   en System.Windows.Application..ctor()
   en Telemetria_RV.Error_APP..ctor()
   en Ventana_Activacion.MainWindow..ctor() en C:\Users\MiniRigor\source\repos\RigorLand\Ventana_Activacion\MainWindow.xaml.cs: línea 9

la cosa es que se complica , y no se como hacer q funcione, creandolo en una DLL, eh creado la DLL , con una clase que hereda Application.

pero al generar la dll y tratar de colocar el codigo en el archivo App.xaml.cs me genera diversos errores, y no encuentro como hacer el codigo desde un archivo externo osea una dll.

Espero puedan ayudarme, de antemano gracias.


Título: Re: Onstartup en DLL Catch de errores
Publicado por: Serapis en 22 Abril 2022, 08:35 am
No entiendo para que quieres 'manipular' el error de una aplicación.
Básicamente cuantas más aplicaciones haya de por medio entre el error y la salida al usuario, más críptico va a ser el mensaje...

De hecho hay (lenguajes con) mensajes de error aborrecibles porque algunos lenguajes en vez de crear su propio compilador recurren a compiladores estándar (Flex, Bison etc...)... pasándole los datos precisos, estos generan un error en base a la etapa y token procesado del código recibido que está bajo examen, pero como es genérico, no pueden responder al detalle como lo haría el lenguaje que nativamente implementara el compilador para el mismo y a la vuelta el programa tampoco puede aportar más detalles, ya que ha delegado en otro para el proceso, no puede ahora enfangarse en tratar de ser más explícito, a los sumo moverse en una especifidad todavía genérica, que tampoco va a ayudar más al usuario...

Pero bueno... es cosa de cada uno interponer etapas intermedias, que compliquen entender el problema real subyacente.


Tal como creo entenderte, tu debes poner el código en el fichero que te han comentado y en tu dll, lo que tendrás que hacer es enviar datos a alguna función para tu hacer el tratamiento del texto y por tanto luego usar la impresora con el formato que pretendas, para informar del error, es decir que donde pones
" File.WriteAllText("log.txt", Reporte);"
es donde deberías invocar a tu dll, pasando el argumento 'e', para desguazarlo e imprimirlo decorado como tengas pensado...

Otra interpretación que se desprende de tu mensaje (de lo que pides), es que la dll, no es realizada para tratar y presentar el error, si no el origen, el código donde se deberá interceptar los errores.... pero entonces me pierdo, porque aseguras que "hasta aqui todo va buenisimo", con lo que interpreto que has probado el código y que te funciona correctamente.

No queda claro como interpretar esto:
Citar
pero al generar la dll y tratar de colocar el codigo en el archivo App.xaml.cs me genera diversos errores, y no encuentro como hacer el codigo desde un archivo externo osea una dll.
...pués no queda claro si es el caso primero que interpreto o el segundo.
Si es el primer caso, es más que probable que la dll deba de ser de tipo servidor (es decir debe existir una sola instancia y previamente instalada en el equipo).


Título: Re: Onstartup en DLL Catch de errores
Publicado por: rigorvzla en 22 Abril 2022, 21:27 pm
Muy bien voy a tratar de explicarme mejor, para despejar las dudas en mi problema.
el codigo es funcional , siempre y lo use en el archivo App.xaml.cs directamente, pero si yo tomo ese codigo y lo creo en una libreria (dll) , al querer implementarlo en el mismo archivo , me genera el error .

Citar
  Mensaje = No se puede crear más de una instancia System.Windows.Application en el mismo AppDomain.