最近,我们的客户遇到意外的崩溃。我们已经在他们的本地机器上记录错误。有没有一种机制可以让他们在应用程序崩溃或意外行为发生时以某种方式“发送错误日志”?通过.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