WER の使用

Windows Vista 以降では、Windows では、アプリケーションに変更を加えることなく、既定でクラッシュ、非応答、カーネルエラーの報告が行われます。 レポートには、必要に応じてミニダンプとヒープ ダンプの情報が含まれます。 代わりに、アプリケーションは WER API を使用して、アプリケーション固有の問題レポートを Microsoft に送信します。

Windows ではハンドルされない例外が自動的に報告されるため、アプリケーションは致命的な例外を処理しないでください。 エラーまたは応答しないプロセスが対話型の場合、WER はユーザー に問題を通知するユーザー インターフェイスを表示します。 アプリケーションは、ユーザーがアプリケーションと対話しようとしている間に 5 秒間 Windows メッセージに応答しない場合、応答しないと見なされます。

クラッシュ、非応答、カーネル エラーのWindows エラー報告 フロー

次に、アプリケーションのクラッシュ、非応答、またはカーネル エラーに対して発生する手順を示します。

  1. 問題イベントが発生します。
  2. オペレーティング システムは WER を呼び出します。
  3. WER はデータを収集し、レポートを作成し、ユーザーに同意を求めます (必要な場合)。
  4. WER は、ユーザーが同意した場合に Microsoft (Watson Server) にレポートを送信します。
  5. Watson サーバーが追加のデータを要求した場合、WER はデータを収集し、ユーザーに同意を求めます (必要な場合)。
  6. アプリケーションが回復と再起動のために登録されている場合、WER は、データが圧縮され、Microsoft に送信されている間に登録されたコールバック関数を実行します (ユーザーが同意した場合)。
  7. 問題に対する応答が Microsoft から入手できる場合は、ユーザーに通知されます。

アプリケーションでは、次の関数を使用して、Microsoft に送信されるレポートの内容をカスタマイズできます。 登録関数は、作成するエラー レポートに特定のファイルとメモリ ブロックを含むように WER に指示します。

汎用イベント レポートのWindows エラー報告 フロー

次の手順では、致命的でないエラー状態のエラー レポートをアプリケーションで取得する方法を示します。

  1. 致命的でない問題イベントが発生します。
  2. アプリケーションはイベントを認識し、次の一連の関数呼び出しを使用してレポートを生成します。
    1. WerReportCreate 関数を呼び出してレポートを作成します。
    2. レポート パラメーターを設定するには 、WerReportSetParameter 関数を呼び出します。
    3. WerReportAddFile 関数を呼び出して、レポートにファイルを追加します。
    4. WerReportAddDump 関数を呼び出して、ミニダンプをレポートに追加します (必要な場合)。
    5. レポートを送信するには、 WerReportSubmit 関数を呼び出します。
    6. WerReportCloseHandle を呼び出してリソースを解放します。
  3. 手順 2 で関数を呼び出すときに使用される特定のオプションに応じて、WER によってエラー報告が完了します。 WER は、ユーザーが設定したポリシーに従ってレポートが実行されるようにします。 たとえば、WER はレポートを Microsoft に送信し、レポートをキューに入れ、適切なユーザー インターフェイスをユーザーに表示します。

アプリケーションをWindows エラー報告から除外する

Windows エラー報告からアプリケーションを除外するには、 WerAddExcludedApplication 関数を使用します。 アプリケーションのエラー報告を復元するには、 WerRemoveExcludedApplication 関数を使用します。

データを自動的に回復し、障害が発生したアプリケーションを再起動する

アプリケーションは、アプリケーションの回復と再起動を使用して、ハンドルされない例外やアプリケーションの応答が停止したために、アプリケーションが終了する前にデータと状態情報を保存できます。 要求された場合は、アプリケーションも再起動されます。 詳細については、「 Application Recovery and Restart」を参照してください。

レガシ API

アプリケーションは、 ReportFault 関数を呼び出すことによってエラーを報告できます。 ただし、オペレーティング システムの既定のエラー報告動作を満たすことができないという非常に具体的な要件がない限り、 ReportFault 関数を使用しないでください。

エラー報告が有効になっている場合、アプリケーションで問題が発生し、終了することを示すダイアログ ボックスがユーザーに表示されます。 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug キーにデバッガーが構成されている場合、デバッガーを起動するオプションがユーザーに付与されます。 ユーザーには、Microsoft にレポートを送信するオプションも表示されます。 ユーザーがレポートを送信すると、レポートに対するユーザーへの感謝と詳細情報へのリンクを提供する別のダイアログ ボックスが表示されます。

エラー報告システムでは、次の操作モードがサポートされています。

操作モード 説明
共有メモリ レポート アプリケーションのセキュリティ コンテキストがログオン ユーザーのセキュリティ コンテキストと同じ場合、エラー報告システムは、通信に共有メモリのブロックを使用します。 このモードは、マニフェスト レポート モードでは使用できません。
マニフェスト レポート アプリケーションのセキュリティ コンテキストがログオン ユーザーのセキュリティ コンテキストと同じでない場合、エラー報告システムは通信にファイルを使用します。 このモードは、応答しないアプリケーションとカーネル エラーを報告するためにも使用されます。 このモードは、共有メモリ レポート モードでは使用できません。
インターネット レポート エラー報告システムは、インターネット経由ですべてのデータを Microsoft に送信します。 これは既定の操作モードです。 企業レポート モードでは使用できません。 このモードは、管理者によって指定された企業のアップロード パスがない場合に使用されます。
企業レポート エラー報告システムは、Microsoft に直接アップロードするのではなく、すべてのデータをファイル共有に送信します。 これにより、企業の IT マネージャーは、Microsoft に送信される前にデータを確認できます。 このモードは、管理者によって指定された会社のアップロード パスがある場合に使用されます。 インターネット レポート モードでは使用できません。
ヘッドレス レポート エラー報告システムでは、ユーザーに対するダイアログ ボックスは表示されません。 これにより、企業の IT マネージャーは常に従業員からエラー レポートを収集できます。 このモードは、レポートが管理者によって有効になっているが、通知が無効になっている場合に使用されます。 これは、企業レポート モードでのみ使用できます。

アプリケーションをエラー報告から除外するには、 AddERExcludedApplication 関数を使用します。