Windows에서 응용 프로그램이 충돌하고 Visual Studio와 같은 디버거가 설치되면 다음 모달 대화 상자가 나타납니다.
[제목 : Microsoft Windows]
X가 작동을 멈췄습니다.
문제로 인해 프로그램이 올바르게 작동하지 않습니다. Windows는 프로그램을 닫고 솔루션을 사용할 수 있는지 알려줍니다.
[디버그] [응용 프로그램 닫기]
이 대화 상자를 비활성화하는 방법이 있습니까? 즉, 프로그램이 충돌하고 조용히 구워 졌습니까?
내 시나리오는 몇 가지 자동화 된 테스트를 실행하고 싶은데, 그중 일부는 테스트중인 애플리케이션의 버그로 인해 충돌이 발생합니다. 이 대화 상자가 자동화 실행을 지연시키는 것을 원하지 않습니다.
주변을 검색하면 Windows XP에서 이것을 비활성화하는 솔루션을 찾았다 고 생각합니다.
HKLM \ Software \ Microsoft \ Windows NT \ CurrentVersion \ AeDebug \ Debugger
그러나 Windows Vista에서는 작동하지 않았습니다.
답변
WER (Windows 오류보고)에서 프로그램을 디버그하라는 메시지를 표시하는 대신 크래시 덤프를 수행하고 앱을 닫도록 강제하려면 다음 레지스트리 항목을 설정할 수 있습니다.
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\
답변
여길 봐:
http://msdn.microsoft.com/en-us/library/bb513638.aspx
regedit
DWORD HKLM 또는 HKCU \ Software \ Microsoft \ Windows \ Windows 오류보고 \ DontShowUI = “1”
WER가 조용히보고합니다. 그런 다음 설정할 수 있습니다.
DWORD HKLM 또는 HKCU \ Software \ Microsoft \ Windows \ Windows 오류보고 \ Disabled = “1”
MS와의 대화를 중지합니다.
답변
이것이 정확히 동일한 대화를 참조하는지 확실하지 않지만 여기에 Raymond Chen 의 다른 접근 방식이 있습니다 .
DWORD dwMode = SetErrorMode(SEM_NOGPFAULTERRORBOX);
SetErrorMode(dwMode | SEM_NOGPFAULTERRORBOX);
답변
Firefox 용 Windows 64 비트에서 릴리스 자동화 작업을 위해이 기능을 비활성화해야했고 다음을 수행했습니다.
- gpedit.msc
- 컴퓨터 구성-> 관리 템플릿
- Windows 구성 요소-> Windows 오류보고
- “심각한 오류에 대한 사용자 인터페이스 표시 방지”를 사용으로 설정합니다.
http://www.blogsdna.com/2137/fix-windows-installer-explorer-update-has-stopped-working-in-windows-7.htm 에서 고객 경험보고에 대해 수행 한 것과 유사합니다
.
답변
내 맥락에서 전체 시스템이 아닌 단위 테스트에 대한 팝업 만 억제하고 싶습니다. 처리되지 않은 예외 포착, 런타임 검사 억제 (예 : 스택 포인터의 유효성) 및 오류 모드 플래그와 같은 이러한 오류를 억제하려면 함수 조합이 필요하다는 것을 발견했습니다. 이것이 내가 성공으로 사용한 것입니다.
#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;
}
답변
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 );
}
답변
단순히 응용 프로그램을 종료하는 처리되지 않은 예외 필터를 구현 한 다음 SetUnhandledExceptionFilter ()로 해당 필터 함수를 설정해야합니다 .
보안 CRT를 사용하는 경우 자체 잘못된 매개 변수 처리기를 제공하고 _set_invalid_parameter_handler ()를 사용 하여 이를 설정해야 합니다.
이 블로그 게시물에도 몇 가지 정보가 있습니다.
http://blog.kalmbachnet.de/?postid=75