最近,我們的客戶遇到意外的崩潰。我們已經在他們的本地機器上記錄錯誤。有沒有一種機制可以讓他們在應用程序崩潰或意外行爲發生時以某種方式「發送錯誤日誌」?通過.NET桌面應用程序發送錯誤日誌
換句話說,我怎麼知道應用程序凍結或掛起或崩潰,所以我可以發送一些東西,並覆蓋正常的「沒有響應」的Windows消息?
最近,我們的客戶遇到意外的崩潰。我們已經在他們的本地機器上記錄錯誤。有沒有一種機制可以讓他們在應用程序崩潰或意外行爲發生時以某種方式「發送錯誤日誌」?通過.NET桌面應用程序發送錯誤日誌
換句話說,我怎麼知道應用程序凍結或掛起或崩潰,所以我可以發送一些東西,並覆蓋正常的「沒有響應」的Windows消息?
在過去,我已經運用webservice(只要允許客戶端登錄到互聯網)的日誌記錄異常,並使用下面的代碼。這是爲了記錄你尚未捕捉到的任何東西。如果您在發佈模式下編譯您的應用程序,但也包含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
}
我不認爲如果它被掛起,你可以做的事情不多,但是如果它崩潰了,你可能會用UnhandledExceptionEventHandler來捕捉一些崩潰。
您可以通過檢查應用程序何時啓動,如果它以前正確關閉並向日志中寫入「關閉」消息來處理掛起,如果沒有,您可以詢問用戶是否想要發送日誌給你。
+1:同意,記錄用戶活動以及例外 - 重新啓動時檢查。 – 2010-04-08 09:39:33