2011-07-15 10 views
5

私のアプリケーションは、しばしばクラッシュするサードパーティのファイルをスキャンする必要があります。 これを克服するために、別のプロセスを使用してこれらのファイルをスキャンし、 このプロセスがアプリケーションをクラッシュさせて別のインスタンスをインスタンス化するときはいつでも。どのように私は静かにこのメッセージやクラッシュを防ぐことができ は「AuxScannerは動作を停止しました...」Windowsでクラッシュメッセージを防止する

私の問題は、それぞれのクラッシュの後、私は、Windowsのクラッシュメッセージを取得するということですか?

私はプロセス間通信に名前付きパイプを使用しています。

おかげ

答えて

6

http://blogs.msdn.com/b/oldnewthing/archive/2004/07/27/198410.aspxを参照してください。プログラムのクラッシュダイアログを無効にすることができます(ただし、サブプロセス内部から行う必要があります)。

私はあなたがあなたのサブプロセスでこのような何かしたい、それを読む方法:

#include <windows.h> 

//... 

SetErrorMode(SetErrorMode(0) | SEM_NOGPFAULTERRORBOX); 
//or if you only care about Vista or newer: 
//SetErrorMode(GetErrorMode() | SEM_NOGPFAULTERRORBOX); 

経由で興味深い質問 - これは開発中のソフトウェアのすべての種類に固執する面白いかもしれませんが。あなたの積極的に開発されたコードがクラッシュすると(予想外のことではない)、それからすべてが待って、UIがフォーカスを変更し、(無意識のうちに)クラッシュダンプをマイクロソフトに送信すると、かなり迷惑になります...

1

あなたが取得している場合は、例外を処理しませんでした意味のメッセージ「... HASTは、作業を停止しました」。クラッシュを引き起こす可能性のあるコードのセクションがtry/catchブロックでラップされ、例外を正常に処理することを確認してください。

+0

私はこの答えが好き。それは元の質問に答えるのではなく、Shlomi Tsurが逃した点で、処理しているファイルの内容にかかわらず、最初にプロセスがクラッシュする理由はないということです。 – DataGraham

1

.NET (CLR)の例外です。

C++の例外を処理します。

あなたのSEH exceptionsを処理します。

最終リゾートhttp://blogs.msdn.com/b/kirush/archive/2008/04/24/global-crash-handler-for-c-application.aspx

を参照してください:SetErrorMode(SEM_NOGPFAULTERRORBOX)

+0

ドキュメントによると、 'SetErrorMode(SEM_NOGPFAULTERRORBOX)'は以前のフラグを上書きします。他のフラグはそのままにして、そのフラグを追加するだけです。 –

関連する問題