Приложение Windows заполняет журнал событий Windows с помощью System.ObjectDisposedExceptions - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть рабочее приложение WPF, которое заполняет журнал событий приложений Windows ошибками AppCrash из-за исключения System.ObjectDisposedException. AppCrash специально указывает на мое приложение, SampleApplication.exe. Кроме того, приложение работает в системе, которая не может быть подключена к сети (поэтому нет возможности удаленной отладки), и мне трудно найти проблему.

У меня есть два обработчика событий для захвата и записи всех необработанных исключений. Они работают для всех других исключений. Я не уверен, как эти System.ObjectDisposedExceptions не перехватываются до того, как они попадают в журнал событий, а также почему приложение фактически не падает. Он продолжает работать очень хорошо.

Вот обработчики событий исключений приложения и конструктор App, который их подключает:

public App() : base()
{
    System.Windows.Application.Current.DispatcherUnhandledException += new System.Windows.Threading.DispatcherUnhandledExceptionEventHandler(Current_DispatcherUnhandledException);
    AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
}

void Current_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
    Console.WriteLine(e.Exception.Message);
    Console.WriteLine(e.Exception.StackTrace);
    LogException(e.Exception);
    e.Handled = true;
}

void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs unhandledExceptionEventArgs)
{
    if (unhandledExceptionEventArgs.ExceptionObject is Exception)
    {
        var e = (Exception)unhandledExceptionEventArgs.ExceptionObject;
        Console.WriteLine(e.Message);
        Console.WriteLine(e.StackTrace);
        LogException((Exception)unhandledExceptionEventArgs.ExceptionObject);
    }
}

void LogException(Exception e)
{
    Exception tmp = e;
    while (tmp.InnerException != null)
        tmp = tmp.InnerException;

    string errorMessage = string.Format("An unhandled exception occurred: {0}", tmp.Message);
    System.Windows.MessageBox.Show(errorMessage, "Error", MessageBoxButton.OK, MessageBoxImage.Error);

    EventLogService.AddLog(EventLogSourceTypes.Error, errorMessage, DateTime.UtcNow, e.StackTrace);
}

Я не уверен, что они даже имеют отношение к моему вопросу, а именно:

Как я могу поймать эти исключения и документировать детали вместо того, чтобы заполнять журнал событий приложений Windows? И приложение продолжает нормально работать, поэтому, несмотря на то, что они являются записями AppCrash, приложение фактически не падает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...