Отправка журналов ошибок через настольное приложение .NET - PullRequest
1 голос
/ 08 апреля 2010

В последнее время наши клиенты испытывают неожиданные сбои. Мы уже регистрируем ошибки на своих локальных машинах. Существует ли механизм, позволяющий им каким-либо образом «отправлять журнал ошибок», когда происходит сбой приложения или происходит непредвиденное поведение?

Другими словами, как мне узнать, что приложение зависло, зависло или зависло, чтобы я мог что-то отправить и переопределить обычное сообщение «не отвечает» Windows?

Ответы [ 2 ]

2 голосов
/ 08 апреля 2010

Я не думаю, что вы многое можете сделать, если он завис, но если он зависнет, вы сможете отследить некоторые из этих аварий с помощью UnhandledExceptionEventHandler .

Вы могли бы справиться с зависаниями, проверив, когда приложение запускается, было ли оно ранее правильно закрыто и записало сообщение «завершение работы» в журнал, и если это не так, вы можете спросить пользователя, хотят ли они отправить журнал вам.

1 голос
/ 08 апреля 2010

В прошлом мне повезло с регистрацией исключений в веб-сервисе (если клиенту разрешено выходить в Интернет) с помощью кода, подобного приведенному ниже.Это для регистрации всего, что вы еще не поймали.Если вы компилируете свое приложение в режиме выпуска, но также включаете файлы pdb, вы получите трассировку стека с номерами строк.

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

public void RegisterHandlers()
{
    Application.ThreadException += new ThreadExceptionEventHandler(ThreadExceptionFunction);
    Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExceptionFunction);
}

private void UnhandledExceptionFunction(object sender, UnhandledExceptionEventArgs args)
{
    Exception e = (Exception)args.ExceptionObject;
    ExceptionLogger(e.StackTrace);
}

private void ThreadExceptionFunction(object sender, ThreadExceptionEventArgs args)
{
    ExceptionLogger(args.Exception.StackTrace);
}

private void ExceptionLogger(string trace)
{
    // log the message to a webservice
}
...