4

私は商用のWindows 7デスクトップアプリケーションを開発しています。アプリケーションには、WindowsサービスとWPFユーザーインターフェイスの両方のコンポーネントがあります。顧客のサイトでアプリケーションが失敗した場合、プロセスのダンプ・ロケーションへのクラッシュ・ダンプを含むランタイム環境に関する情報を取得できます。これらの情報は、今後の調​​査の依頼があった場合、サポート担当者に連絡することができます。障害の結果として表示される可能性のあるWindowsエラー報告およびSend Microsoftダイアログもオフにする必要があります。Windows 7 - プログラム/デバッグプログラムのダイアログを無効にしても、ダンプをクラッシュダンプしてユーザーに通知する

重要なことは、これがアプリケーションプロセスにのみ影響を与えたいということです。我々は、顧客のデスクトップ上の他のすべてのアプリケーションが致命的なエラーを報告する方法を変えるいくつかのグローバル設定には影響を与えたくありません。

私はシュリンクラップアプリケーションでこのようなことを行うためのいくつかの提案とベストプラクティスを探しています。

+0

これを行うには、未処理の例外をキャッチする必要があります。この時点で、あなたはあなたが望むあらゆる情報をあなたに送ります。これを非常に簡単にするサードパーティライブラリがあります。これらの他のダイアログに関しては、それらは依然として表示されます。あなたはもちろん、その情報を購読することもできます。 –

+0

はい、私はすでにそれをやっています。私は、AppDomain.CurrentDomain.UnhandledExceptionセットアップとDispatcher.UnhandledExceptionを持っています。ただし、処理できない例外がいくつかあります。それらが発生すると、私はマイクロソフトから望ましくない厄介なダイアログを得る。 – KyleLib

+0

既に示されているように、起こりそうなあらゆる例外を処理することはまずありません。また、ユーザーのコンピュータ上のダイアログが表示されないようにすることはできません。 –

答えて

3

これを行う方法を知っている最善の方法は、AppDomain.CurrentDomain.UnhandledExceptionイベントを購読することです。そこで、Win32 API関数MiniDumpWriteDumpを使用して独自のミニダンプファイルを作成することができます。良い例を見るにはthis blog postをチェックしてください。また、ClrDumpライブラリもあります。

UnhandledExceptionハンドラを終了する前に、Environment.Exit()を呼び出すと、Windowsのエラーダイアログは表示されません。

私はこれらのミニダンプライブラリを自分で実際にはまだ使用していませんが、私はまもなく使用します。うまくいけば、この答えは少なくともあなたがGoogleに接続できるいくつかのキーワードを与えるでしょう。

+0

ありがとう、私はそれを越えて走った。私はそれをさらに調べます。私の最大の問題は、厄介なマイクロソフトのダイアログです。私がそれを見つけたとしても、もし私がそう思っていたら、MicrosoftのWindowsエラー報告サービスにサインアップし、自分のウェブサイトからクラッシュアーティファクトを実際に収集することができます。私は私たちの製品の所有者によってそれを実行する必要があります。 – KyleLib

+0

@KyleLib - 最も重要だと思われる特定の例外を処理し、調査のためにミニダンプファイルを送信するという組み合わせで、Windowsエラー報告サービスを購読することもできます。 –

+0

@ KyleLib処理されていない例外ハンドラでEnvironment.Exit()を呼び出すと、理論上、エラー報告サービスダイアログは表示されません。 – Phil

関連する問題