2010-04-08 2 views
1

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

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

ответ

1

В прошлом мне повезло с регистрационными исключениями в веб-сервисе (при условии, что клиенту разрешено выходить в Интернет) с кодом, подобным приведенному ниже. Это для регистрации того, что вы еще не поймали. Если вы скомпилируете свое приложение в режиме деблокирования, но также включите файлы 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 
} 
2

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

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

+0

+1: Согласовано, зарегистрируйте активность пользователя, а также исключения - проверьте перезагрузку. –