2009-07-15 15 views
9

私は、主要なアプリケーションを表示する厄介なエラーから保護するために、外部プロセスで制御できない不安定なサードパーティコードをホストしているアプリケーションを持っています。私の親プロセスは、他のプロセスを監視し、失敗したら "正しいこと(tm)"を実行しています。私のプロセスのWindowsエラー報告(ワトソン博士)を無効にする

ワトソン博士は依然として孤立したプロセスでクラッシュを検出しており、クラッシュダンプを取得するために途中でプロセスにアタッチしているという問題があります。これには次の2つの問題があります。 1.クラッシュダンプが実行されている間にプロセスが動作しているため、障害を検出するのにかかる時間が大幅に減ります。 2.エラーレポートをMicrosoftに提出するかどうかを尋ねる迷惑なポップアップをユーザーに表示します。

明らかに私は子プロセスのバグを修正することをお勧めしますが、オプションではないので、そのプロセスのDr. Watson(およびVista +のWindowsエラー報告)を選択的に無効にしたいと考えています。

信頼できないビットに渡す前に、自分のコードをいくつか実行しています。そのため、現在のプロセスに影響を与えるAPIがあれば問題ありません。

私にはわかっています:http://support.microsoft.com/default.aspx/kb/188296ワトソン博士はマシン全体を無効にします。私はそれがマシン全体の設定をゴミ箱にする悪い市民になるので、それをしたくないです。

私はVista +のWerSetFlagsオプションも認識していますが、現在のプロセスのWindowsエラー報告を無効にしているようですが、以前のOSバージョンでDr.Watsonを無効にするものが必要です。

答えて

2

良い医師が呼び出されます。したがって、一般的な方法はすべての例外を自分で処理することです。あなたの場合、クラッシュするプロセスコードを所有していないので、はるかに難しいです。次に、実行時に他のプロセスにコードを注入し、クラッシュの原因となった例外を取り込む例外ハンドラをインストールします。キャッチされたら、正常にプロセスをシャットダウンします。

ここには、コードを別のプロセスに注入することについての話があります。クラッシュハンドラについては、set an unhandled exception filterまたはadd a vectored exception handlerのいずれかを指定できます。後者の場合、実際には他のプロセス内で処理されている合法的な例外、つまりクラッシュする例外を認識し、それが唯一のものであることを確認する方法を見つけ出さないよう注意しなければならないことに注意してください。

関連する問題