Наше приложение вылетает при запуске — без исключения, только «Отправить отчет»

#wpf #exception #crash

#wpf #исключение #сбой

Вопрос:

Наше приложение вылетает при загрузке, вероятно, только на некоторых машинах, я не получаю никаких исключений, только диалоговое окно Windows «Отправить отчет».

Есть ли какой-нибудь способ получить больше информации о том, что вызывает сбой приложения? В диалоговом окне «Отправить отчет» есть только:

AppName: evox.wpfclient.exe
Версия приложения: 1.0.0.0
ModName: kernel32.dll Модвер: 5.1.2600.5781
Смещение: 00012afb

Комментарии:

1. Я видел похожие сбои, когда не установлена требуемая версия .NET.

Ответ №1:

Обработайте AppDomain.CurrentDomain.Событие необработанного исключения в вашем классе, которое запускает ваше приложение. Обычно program.cs.

Добавить

 AppDomain.CurrentDomain.UnhandledException  = new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
  

затем за пределами основного класса

 static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            if (e.ExceptionObject is Exception)
                _logger.FatalException("Unhandled exception", (Exception)e.ExceptionObject);
            else
                _logger.Fatal("Unhandled exception: {0}", e.ExceptionObject);

            if (_program != null)
                _program.Exit();
        }
  

в файл запуска и посмотрите, перехватит ли он ваше исключение. конечно, измените метод в соответствии с вашими целями.

Комментарии:

1. Я возвращаюсь к этому вопросу спустя долгое время. В конце концов, я решил проблему, была какая-то проблема, связанная с компиляцией, разрядностью (я не могу вспомнить детали). Что я хочу отметить, так это то, что мы использовали обработчик для события UnhandledException, но в данном конкретном случае он не был вызван. Сбой был настолько серьезным, что дескриптор не смог с ним справиться :).

Ответ №2:

Первое, что вы делаете при запуске вашего приложения, попробуйте подписаться на событие System.AppDomain.CurrentDomain.UnhandledException . В обработчике событий вы можете зарегистрировать исключение до фактического сбоя приложения.

Если ваше приложение по-прежнему вылетает без регистрации, это, вероятно, проблема с .NET framework. В этом случае вы должны увидеть событие в средстве просмотра событий Windows Administration Tools.

Примечание: вы должны использовать событие UnhandledException только для входа в систему, а затем аварийно завершить работу — не пытайтесь восстановиться и продолжить выполнение.