89

Windows でアプリケーションがクラッシュし、Visual Studio などのデバッガーがインストールされている場合、次のモーダル ダイアログが表示されます。

【タイトル:マイクロソフト・ウィンドウズ】

X が機能しなくなった

問題が発生したため、プログラムが正しく動作しなくなりました。Windows はプログラムを終了し、解決策が利用可能かどうかを通知します。

[デバッグ][アプリケーションを閉じる]

このダイアログを無効にする方法はありますか? つまり、プログラムがクラッシュして静かに焼き付くだけですか?

私のシナリオは、いくつかの自動テストを実行したいと考えています。そのうちのいくつかは、テスト対象のアプリケーションのバグが原因でクラッシュします。これらのダイアログが自動化の実行を停止させたくありません。

周りを検索すると、Windows XP でこれを無効にするための解決策を見つけたと思います。これは、このレジストリ キーを無効にします。

HKLM\Software\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger

ただし、これは Windows Vista では機能しませんでした。

4

11 に答える 11

58

プログラムのデバッグを求めるプロンプトを表示する代わりに、Windows エラー報告 (WER) に強制的にクラッシュ ダンプを取得させてアプリを終了させるには、次のレジストリ エントリを設定します。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting]
"ForceQueue"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\Consent]
"DefaultConsent"=dword:00000001

これが設定された後、アプリがクラッシュすると、*.hdmp および *.mdmp ファイルが次の場所に表示されます。

%ALLUSERSPROFILE%\Microsoft\Windows\WER\
于 2008-12-28T18:47:00.697 に答える
46

ここを参照してください:

http://msdn.microsoft.com/en-us/library/bb513638.aspx

再編集

DWORD HKLM または HKCU\Software\Microsoft\Windows\Windows Error Reporting\DontShowUI = "1"

WERは黙って報告します。次に、設定できます

DWORD HKLM または HKCU\Software\Microsoft\Windows\Windows Error Reporting\Disabled = "1"

MSとの通信を停止します。

于 2009-02-16T21:18:19.237 に答える
36

これがまったく同じダイアログを指しているかどうかはわかりませんが、Raymond Chenによる別のアプローチを次に示します。

DWORD dwMode = SetErrorMode(SEM_NOGPFAULTERRORBOX);
SetErrorMode(dwMode | SEM_NOGPFAULTERRORBOX);
于 2009-01-22T00:34:20.110 に答える
32

Firefox の Windows 64 ビットでのリリース自動化作業のためにこれを無効にする必要があり、次のことを行いました。

  • gpedit.msc
  • コンピューターの構成 -> 管理用テンプレート
  • Windows コンポーネント -> Windows エラー報告
  • 「重大なエラーのユーザー インターフェイスの表示を禁止する」を有効に設定します。

これは、 http ://www.blogsdna.com/2137/fix-windows-installer-explorer-update-has-stopped-working-in-windows-7.htm のカスタマー エクスペリエンス レポートで達成されたことと似てい ます。

于 2011-03-16T18:52:58.573 に答える
13

私のコンテキストでは、システム全体ではなく、単体テストのポップアップのみを抑制したいと考えています。これらのエラーを抑制するには、未処理の例外のキャッチ、実行時チェック (スタック ポインターの有効性など) の抑制、エラー モード フラグなど、関数の組み合わせが必要であることがわかりました。これは私がいくつかの成功を収めて使用したものです:

#include <windows.h>
#include <rtcapi.h>
int exception_handler(LPEXCEPTION_POINTERS p)
{
    printf("Exception detected during the unit tests!\n");
    exit(1);
}
int runtime_check_handler(int errorType, const char *filename, int linenumber, const char *moduleName, const char *format, ...)
{
    printf("Error type %d at %s line %d in %s", errorType, filename, linenumber, moduleName);
    exit(1);
}

int main()
{
    DWORD dwMode = SetErrorMode(SEM_NOGPFAULTERRORBOX);
    SetErrorMode(dwMode | SEM_NOGPFAULTERRORBOX);
    SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)&exception_handler); 
    _RTC_SetErrorFunc(&runtime_check_handler);

    // Run your tests here

    return 0;
}
于 2013-03-27T14:01:36.007 に答える
8

WPF アプリケーションで

[DllImport("kernel32.dll", SetLastError = true)]
static extern int SetErrorMode(int wMode);

[DllImport("kernel32.dll")]
static extern FilterDelegate SetUnhandledExceptionFilter(FilterDelegate lpTopLevelExceptionFilter);
public delegate bool FilterDelegate(Exception ex);

public static void DisableChashReport()
{
 FilterDelegate fd = delegate(Exception ex)
 {
  return true;
 };
 SetUnhandledExceptionFilter(fd);
 SetErrorMode(SetErrorMode(0) | 0x0002 );
}
于 2013-05-29T09:48:30.993 に答える
4

テスト中は、ADPlusのような「デバッガー」を接続して実行できます。これは、エラーに関するデータ(ミニダンプ)を収集し、上記のモーダルダイアログの問題を防ぐために多くの便利な方法で構成できます。

アプリが本番環境でクラッシュしたときに役立つ情報を取得したい場合は、ADPlusデータに類似したものを取得するようにMicrosoftエラーレポートを構成できます。

于 2008-12-28T17:36:01.713 に答える
4

これは回避策であり、その機能を無効にする方法に関する質問であるため、質問に対する直接の回答ではありませんが、私の場合、私は制限された権限を持つサーバー上のユーザーであり、次のいずれかを使用して機能を無効にすることはできません他の答え。そのため、回避策が必要でした。これは、この質問にたどり着いた少なくとも他の一部の人にとってはうまくいくでしょう。

autohotkey Portableを使用して、ポップアップ ボックスが存在するかどうかを 1 分に 1 回チェックし、存在する場合はボタンをクリックしてプログラムを閉じるマクロを作成しました。私の場合、それで十分であり、他のユーザーのために機能をオンのままにします。リスクのあるプログラムを実行するときにスクリプトを開始する必要がありますが、私のニーズには合っています。

スクリプトは次のとおりです。

sleep_duration = 60000 ; how often to check, in milliseconds.
                       ; 60000 is a full minute

Loop
{
    IfWinExist, ahk_class #32770 ; use autohotkey's window spy to confirm that
                ; ahk_class #32770 is it for you. This seemed to be consistent
                ; across all errors like this on Windows Server 2008
    {
        ControlClick, Button2, ahk_class #32770 ; sends the click.
                ; Button2 is the control name and then the following
                ; is that window name again
    }
    Sleep, sleep_duration ; wait for the time set above
}

編集:クイックフラグ。他のものが起動している場合、これはフォアグラウンド ウィンドウでコントロールをアクティブにしようとしているようです - バックグラウンドでプログラムに送信することになっています。修正が見つかった場合は、この回答を編集して反映させますが、今のところ、これを使用してマシン上で他の作業を同時に行うことには注意してください。

于 2012-08-20T21:41:15.117 に答える
4

アプリケーションを単純に終了する未処理の例外フィルターを実装し、そのフィルター関数をSetUnhandledExceptionFilter()で設定する必要があります。

セキュア CRT を使用している場合は、独自の無効なパラメーター ハンドラーを提供し、これを_set_invalid_parameter_handler () で設定する必要もあります。

このブログ投稿にもいくつかの情報があります: http://blog.kalmbachnet.de/?postid=75

于 2008-12-28T16:56:50.137 に答える
3

ジャストインタイムデバッガーを取り除くためにインターネット上で他のすべてを試した後、実際に機能する簡単な方法を見つけました。他の人の助けになることを願っています.

コントロール パネルに移動します 管理ツールに移動します サービスに移動します Machine Debug Manager のリストを調べます それを右クリックし、[プロパティ] をクリックします [全般] タブで、[スタートアップの種類] を探します [無効にする] をクリックします。[適用] をクリックして [OK] をクリックします。

それ以来、デバッガー メッセージは表示されていませんが、コンピューターは完全に動作しています。

于 2010-07-13T00:39:16.913 に答える
1

レジストリの値を変更する代わりに、Windows Server 2008 R2、Windows Server 2012、および Windows 8 でエラー レポートを完全に無効にすることができます。serverWerOptin /disable

https://technet.microsoft.com/en-us/library/hh875648(v=ws.11).aspx

于 2014-10-27T19:55:57.840 に答える