Windowsアプリエラー終了時の動作を制御する

Windowsではアプリケーションが落ちるときに妙なダイアログを出します。この情報は開発者にとって有益でも、一般人にとっては邪魔なだけです。そもそも、アプリケーションのスタックダンプなんてMSのサーバに送ってしまったら、情報漏洩にもつながりかねません。

そこで制御しようとした所、出るダイアログの種類が意外と多いことに気づきました。そこで制御方法について纏めておきます。


デフォルトと違う動作を期待するとして、考えられるのはこの3つでしょうか。

  • ダイアログを一切出さずに終了
  • デバッカ起動の選択肢は不要
  • 好きなデバッカを素早く選んで起動したい

どの方式を採用するにしても、弄る箇所は以下のレジストリです。

  • HKLMSOFTWAREMicrosoftPCHealthErrorReporting
  • HKLMSOFTWAREMicrosoftWindows NTCurrentVersionAeDebug

設定を説明していきます。

まず、1番目のダイアログを出さずに終了する方法は

  1. ErrorReportingDoReport を 0 に設定
  2. ErrorReportingShowUI を 0 に設定
  3. drwtsn32.exe -i を実行(ファイル名を指定して実行)
  4. AeDebugAuto を 1 に設定

これで設定したアプリケーションが、勝手にエラーログを収集して終了します。これが、一般人に最も望まれる動作だと思います。生成されたログをソフトウェアの作者に渡せば喜ばれるかもしれません。

次に2番目のデバッカの起動をなくし、ログだけを参照する方法は

  1. ErrorReportingDoReport を 0 に設定
  2. ErrorReportingShowUI を 0 に設定
  3. AeDebugAeDebug_bak などに改名(削除は戻すのが面倒になる)

これでずいぶんスッキリしたダイアログになり、高速にアプリを終了できます。欠点としては、タスクマネージャからプロセス名を右クリックしてデバックすることが出来なくなります。VC++上などからプロセスにアタッチは出来るため、普通は問題ないと思います。

最後のデバッカを選ぶ方法ですが、これはソフトウェアに頼るのが楽でしょう。

困ったときのBugslayer。ちなみにRohn Robbinsの書籍に最新版が収録されています。

以上が私が考える実用的な3択です。

Leave a Reply

Be the First to Comment!

Notify of
avatar
wpDiscuz