Pregunta Cómo atrapar "Excepción Win32 no controlada ocurrida en AppName [procId]".


usando c #, Visual Studio 2013, aplicación Windows Store

Una explicación un poco larga

Cree una aplicación simple de Windows Store que funcione con datos almacenados JSON. Después de aumentar la cantidad de datos, empiezo a recibir un mensaje Unhandled win32 exception occured in AppName [procId]. - ver imagen a continuación:

enter image description here

Intento reducir la cantidad de datos almacenados en el archivo JSON, pero después de un tiempo de inactividad durante la depuración recibí este mensaje nuevamente. Entonces, la situación, si tengo muchos datos, puedo hacer pocas operaciones (pocos significa 5) en la aplicación y obtuve esta excepción, si tengo una cantidad mínima de datos, puedo trabajar con la aplicación un poco más (12-17 diferentes) operación). Operación significa leer de un archivo, guardar, cargar páginas, etc.

yo googleando un poco y encontró pocas causas posibles:

  • Debo configurar DEP en la PC, siguiendo los siguientes pasos:

    1. Haga clic derecho en "Mi computadora". Luego selecciona "Propiedades".
    2. Seleccione la pestaña "Avanzado".
    3. Seleccione "Configuración" para "Rendimiento".
    4. Seleccione la pestaña "Prevención de ejecución de datos".
    5. Seleccione la opción "Activar DEP solo para programas y servicios esenciales de Windows." Si esta opción ya está seleccionada, haga clic en "Aceptar", luego haga clic en "Aceptar".
    6. Reinicia tu computadora.

Prueba - no ayuda

  • Verificar y habilitar la depuración justo a tiempo en mi VISUAL STUDIO 

enter image description here

Prueba - no ayuda

  • Verifique qué tipo de excepción puede ser capturada por VS: elija todas:

enter image description here

Prueba - no ayuda

Encontrado a continuación:

Se produjo una excepción win32 no controlada en. La eliminación de Just-In-Time de esta excepción falló con el siguiente error: El usuario que inició sesión no tuvo acceso para depurar la aplicación bloqueada.   Este mensaje indica que la depuración Just-In-Time falló porque no tiene los permisos de acceso adecuados.

Tan malo no tienes los permisos de acceso adecuados.

Intente iniciar con derechos de administrador mi aplicación:

enter image description here

Prueba - no ayuda

  • Lee también muchas publicaciones de aquí. 

Encontró esta y entonces este MSDN publicar útil Intenta agregar un código a mi aplicación:

    public MainPage()
    {
        this.InitializeComponent();
        this.navigationHelper = new NavigationHelper(this);
        this.navigationHelper.LoadState += navigationHelper_LoadState;
        this.navigationHelper.SaveState += navigationHelper_SaveState;
        TimeBinding();
        Application.Current.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);
    }

    static void MyHandler(object sender, UnhandledExceptionEventArgs args)
    {
        string e = args.Message.ToString();
    }

pero nada atrapado ...

Entonces, intenta - no ayuda

Preguntas: 

  1. Por qué recibí este mensaje y cuáles son las posibles razones que no describo pueden ser causa raíz de una excepción como "Unhandled win32 exception occured in AppName [procId]."?
  2. ¿Tengo razón en entender el uso de UnhandledException? Tal vez estoy equivocado y no puedo detectar la excepción requerida (¿estoy estudiando para .NET)?

17
2018-03-16 21:49


origen


Respuestas:


Hace unos meses, diseñé un Sistema de control de errores para este trabajo en realidad. En este proyecto utilicé estos códigos principales para detectar cualquier excepción de aplicación win32:

System.Windows.Forms.Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

// Catch all handled exceptions in managed code, before the runtime searches the Call Stack 
AppDomain.CurrentDomain.FirstChanceException += FirstChanceException;

// Catch all unhandled exceptions in all threads.
AppDomain.CurrentDomain.UnhandledException += UnhandledException;

// Catch all unobserved task exceptions.
TaskScheduler.UnobservedTaskException += UnobservedTaskException;

// Catch all unhandled exceptions.
System.Windows.Forms.Application.ThreadException += ThreadException;

// Catch all WPF unhandled exceptions.
Dispatcher.CurrentDispatcher.UnhandledException += DispatcherUnhandledException;

Y métodos de escucha:

/// <summary>
/// Used for handling WPF exceptions bound to the UI thread.
/// Handles the <see cref="System.Windows.Threading.DispatcherUnhandledExceptionEventHandler"/> events.
/// </summary>
[HandleProcessCorruptedStateExceptions]
private static DispatcherUnhandledExceptionEventHandler DispatcherUnhandledException
{
    // catch error ...            
}

/// <summary>
/// Used for handling WinForms exceptions bound to the UI thread.
/// Handles the <see cref="System.Threading.ThreadExceptionEventHandler"/> events in <see cref="System.Windows.Forms.Application"/> namespace.
/// </summary>
[HandleProcessCorruptedStateExceptions]
private static ThreadExceptionEventHandler ThreadException
{
    // catch error ...        
}

/// <summary>
/// Used for handling general exceptions bound to the main thread.
/// Handles the <see cref="AppDomain.UnhandledException"/> events in <see cref="System"/> namespace.
/// </summary>
[HandleProcessCorruptedStateExceptions]
private static UnhandledExceptionEventHandler UnhandledException
{
    // catch error ...        
}

/// <summary>
/// Used for handling System.Threading.Tasks bound to a background worker thread.
/// Handles the <see cref="UnobservedTaskException"/> event in <see cref="System.Threading.Tasks"/> namespace.
/// </summary>
[HandleProcessCorruptedStateExceptions]
private static EventHandler<UnobservedTaskExceptionEventArgs> UnobservedTaskException
{
    // catch error ...        
}

/// <summary>
/// This is new to .Net 4 and is extremely useful for ensuring that you ALWAYS log SOMETHING.
/// Whenever any kind of exception is fired in your application, a FirstChangeExcetpion is raised,
/// even if the exception was within a Try/Catch block and safely handled.
/// This is GREAT for logging every wart and boil, but can often result in too much spam, 
/// if your application has a lot of expected/handled exceptions.
/// </summary>
[HandleProcessCorruptedStateExceptions]
private static EventHandler<FirstChanceExceptionEventArgs> FirstChanceException
{
   // catch error ...        
}

Si arrojas una excepción dentro de tus códigos, debes asegurarte de atraparlos con estos eventos, pero cuando ocurrió una excepción antes de ejecutar la aplicación, estos eventos no se muestran para mostrar o hacer ningún tipo de acción.
Por ejemplo, no se han agregado exactamente todos los ensamblados de referencias a su proyecto, esto causa que se genere una excepción en los tiempos de inicio de la aplicación.

Y algunas otras excepciones tal vez tienen innerException porque surgió de una thread o tasks. Entonces debe ser revisado todo exception.innerException.

Espero presentar una solución para tu problema.


1
2017-07-18 17:28