10

メイン アプリケーションを厄介なエラーから保護するために、外部プロセスで制御できない不安定なサードパーティ コードをホストしているアプリケーションがあります。私の親プロセスは他のプロセスを監視しており、失敗したときに「正しいこと (tm)」を実行しています。

私が抱えている問題は、ワトソン博士がまだ分離されたプロセスでクラッシュを検出し、途中でプロセスにアタッチしてクラッシュ ダンプを取得していることです。これには次の 2 つの問題があります。 1. クラッシュ ダンプが取得されている間もプロセスが存続するため、障害を検出するのにかかる時間が劇的に遅くなります。2. Microsoft にエラー レポートを送信するかどうかを尋ねる迷惑なポップアップをユーザーに表示します。

明らかに、子プロセスのバグを修正したいと思いますが、それがオプションではないことを考えると、そのプロセスのワトソン博士 (および Vista 以降の Windows エラー報告) を選択的に無効にできるようにしたいと考えています。

信頼できないビットに引き渡す前に、プロセスで独自のコードの一部を実行しているため、現在のプロセスに影響を与える呼び出し可能な API があれば問題ありません。

私は知っています: http://support.microsoft.com/default.aspx/kb/188296これにより、マシン全体でワトソン博士が無効になります。マシン全体の設定を台無しにするのは悪い市民になるので、私はそれをしたくありません。

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

4

2 に答える 2

3

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

ここには、別のプロセスにコードを挿入することについて話している質問がかなりあります。クラッシュ ハンドラーに関しては、未処理の例外フィルターを設定するか、ベクトル化された例外ハンドラーを追加できます。後者の場合、実際には他のプロセス内で処理される正当な例外を飲み込まないように注意する必要があります。つまり、クラッシュする例外を認識し、それが唯一の処理であることを確認する方法を見つけます。

于 2009-07-16T05:17:26.887 に答える
2

GPF ポップアップを無効にしたい: http://blogs.msdn.com/oldnewthing/archive/2004/07/27/198410.aspx

于 2009-07-15T22:05:00.423 に答える