最近、お客様は予期しないクラッシュを経験しています。すでにローカルマシンにエラーを記録しています。アプリケーションがクラッシュしたとき、または予期しない動作が発生したときに、何らかの方法で「エラーログを送信」できるようにするメカニズムはありますか?
言い換えると、アプリケーションがフリーズ、ハング、またはクラッシュしたことをどのようにして知ることができるので、何かを送信して、通常の「応答しない」ウィンドウメッセージを上書きできますか?
最近、お客様は予期しないクラッシュを経験しています。すでにローカルマシンにエラーを記録しています。アプリケーションがクラッシュしたとき、または予期しない動作が発生したときに、何らかの方法で「エラーログを送信」できるようにするメカニズムはありますか?
言い換えると、アプリケーションがフリーズ、ハング、またはクラッシュしたことをどのようにして知ることができるので、何かを送信して、通常の「応答しない」ウィンドウメッセージを上書きできますか?
ハングした場合にできることはあまりないと思いますが、クラッシュした場合は、UnhandledExceptionEventHandlerを使用してクラッシュの一部をキャッチできる可能性があります。
アプリケーションが以前に正しくシャットダウンして「シャットダウン」メッセージをログに書き込んだかどうかをアプリケーションがいつ起動するかを確認することで、ハングを処理できる可能性があります。そうでない場合は、ユーザーにログを送信するかどうかを尋ねることができます。君。
これまで、以下のようなコードを使用して、Webサービスへの例外を(クライアントがインターネットへのログアウトを許可されている限り)ログに記録することができました。これは、まだキャッチしていないものをログに記録するためのものです。アプリケーションをリリースモードでコンパイルするだけでなく、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
}