Windows Vista 以降では、Windows では、アプリケーションに変更を加えることなく、既定でクラッシュ、非応答、カーネル エラーの報告が行われます。 必要に応じて、レポートにはミニダンプとヒープダンプの情報が含まれます。 代わりに、アプリケーションは WER API を使用して、アプリケーション固有の問題レポートを Microsoft に送信します。
Windows ではハンドルされない例外が自動的に報告されるため、アプリケーションは致命的な例外を処理しないでください。 エラーまたは応答しないプロセスが対話型の場合、WER はユーザー に問題を通知するユーザー インターフェイスを表示します。 ユーザーがアプリケーションと対話しようとしている間に、アプリケーションが Windows メッセージに 5 秒間応答しない場合、アプリケーションは応答しないと見なされます。
クラッシュ、非応答、カーネル エラーの Windows エラー報告フロー
アプリケーションのクラッシュ、応答以外、またはカーネルエラーに対して発生する手順を次に示します。
- 問題イベントが発生します。
- オペレーティング システムが WER を呼び出します。
- WER はデータを収集し、レポートを作成し、ユーザーに同意を求めます (必要な場合)。
- WER は、ユーザーが同意した場合に Microsoft (Watson Server) にレポートを送信します。
- Watson サーバーが追加データを要求した場合、WER はデータを収集し、ユーザーに同意を求めます (必要な場合)。
- アプリケーションが回復と再起動のために登録されている場合、WER は、データが圧縮され、Microsoft に送信されている間 (ユーザーが同意した場合) に登録済みのコールバック関数を実行します。
- 問題に対する応答が Microsoft から入手できる場合は、ユーザーに通知されます。
アプリケーションでは、次の関数を使用して、Microsoft に送信されるレポートの内容をカスタマイズできます。 登録関数は、作成するエラー レポートに特定のファイルとメモリ ブロックを含むように WER に指示します。
- WerRegisterFile
- WerRegisterMemoryBlock
- WerSetFlags
- WerUnregisterFile
- WerUnregisterMemoryBlock
- WerGetFlags
汎用イベント レポートの Windows エラー報告フロー
次の手順では、致命的でないエラー状態のエラー レポートをアプリケーションで取得する方法を示します。
- 致命的でない問題イベントが発生します。
- アプリケーションはイベントを認識し、次の一連の関数呼び出しを使用してレポートを生成します。
- WerReportCreate 関数を呼び出してレポートを作成します。
- レポート パラメーターを設定するには 、WerReportSetParameter 関数を呼び出します。
- WerReportAddFile 関数を呼び出して、レポートにファイルを追加します。
- WerReportAddDump 関数を呼び出して、ミニダンプをレポートに追加します (必要な場合)。
- レポートを送信するには、 WerReportSubmit 関数を呼び出します。
- WerReportCloseHandle を呼び出してリソースを解放します。
- 手順 2 で関数を呼び出すときに使用される特定のオプションに応じて、WER はエラー報告を完了します。 WER は、ユーザーが設定したポリシーに従ってレポートが行われるようにします。 たとえば、WER はレポートを Microsoft に送信し、レポートをキューに入れ、適切なユーザー インターフェイスをユーザーに表示します。
Windows エラー報告からのアプリケーションの除外
Windows エラー報告からアプリケーションを除外するには、 WerAddExcludedApplication 関数を使用します。 アプリケーションのエラー報告を復元するには、 WerRemoveExcludedApplication 関数を使用します。
データを自動的に回復し、障害が発生したアプリケーションを再起動する
アプリケーションは、アプリケーションの復旧と再起動を使用して、ハンドルされない例外が原因で、またはアプリケーションが応答を停止した場合に、アプリケーションが終了する前にデータと状態情報を保存できます。 要求された場合は、アプリケーションも再起動されます。 詳細については、「 アプリケーションの回復と再起動」を参照してください。
レガシ API
アプリケーションは、 ReportFault 関数を呼び出すことによってエラーを報告できます。 ただし、オペレーティング システムの既定のエラー報告動作を満たすことができないという非常に具体的な要件がない限り、 ReportFault 関数を使用しないでください。
エラー報告が有効になっている場合、アプリケーションで問題が発生し、終了することを示すダイアログ ボックスがユーザーに表示されます。 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug キーにデバッガーが構成されている場合は、デバッガーを起動するオプションがユーザーに付与されます。 ユーザーには、Microsoft にレポートを送信するオプションも表示されます。 ユーザーがレポートを送信すると、レポートに対してユーザーに感謝し、詳細情報へのリンクを提供する別のダイアログ ボックスが表示されます。
エラー報告システムでは、次の操作モードがサポートされています。
操作モード | 説明 |
---|---|
共有メモリ報告書 | アプリケーションのセキュリティ コンテキストがログオン ユーザーのセキュリティ コンテキストと同じ場合、エラー報告システムは通信に共有メモリのブロックを使用します。 このモードは、マニフェスト レポート モードでは使用できません。 |
マニフェスト レポート | アプリケーションのセキュリティ コンテキストがログオン ユーザーのセキュリティ コンテキストと同じでない場合、エラー報告システムは通信にファイルを使用します。 このモードは、応答しないアプリケーションとカーネル エラーを報告するためにも使用されます。 このモードは、共有メモリ レポート モードでは使用できません。 |
インターネット レポート | エラー報告システムは、インターネット経由ですべてのデータを Microsoft に送信します。 これが既定の操作モードです。 企業レポート モードでは使用できません。 このモードは、管理者によって指定された会社のアップロード パスがない場合に使用されます。 |
企業レポート | エラー報告システムは、Microsoft に直接アップロードするのではなく、すべてのデータをファイル共有に送信します。 これにより、企業の IT マネージャーは、Microsoft に送信される前にデータを確認できます。 このモードは、管理者によって指定された企業のアップロード パスがある場合に使用されます。 インターネット レポート モードでは使用できません。 |
ヘッドレス レポート | エラー報告システムでは、ユーザーに対するダイアログ ボックスは表示されません。 これにより、企業の IT マネージャーは、従業員から常にエラー レポートを収集できます。 このモードは、レポートが管理者によって有効になっているが、通知が無効になっている場合に使用されます。 企業レポート モードでのみ使用できます。 |
エラー報告からアプリケーションを除外するには、 AddERExcludedApplication 関数を使用します。