#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 только для входа в систему, а затем аварийно завершить работу — не пытайтесь восстановиться и продолжить выполнение.