문제

응용 프로그램이 Windows에서 충돌하고 Visual Studio와 같은 디버거가 설치되면 다음 모달 대화 상자가 나타납니다.

제목 : Microsoft Windows

X는 작동을 중단했습니다

문제로 인해 프로그램이 올바르게 작동을 중단했습니다. Windows는 프로그램을 닫고 솔루션을 사용할 수 있는지 알려줍니다.

디버그] [닫기 응용 프로그램

이 대화 상자를 비활성화하는 방법이 있습니까? 즉, 프로그램이 충돌하고 조용히 태워 졌습니까?

내 시나리오는 여러 자동 테스트를 실행하고 싶다는 것입니다. 그 중 일부는 테스트중인 응용 프로그램의 버그로 인해 충돌됩니다. 이 대화 상자가 자동화 실행을 실속하는 것을 원하지 않습니다.

검색하는 것은 Windows XP에서 이것을 비활성화하기위한 솔루션을 찾았습니다.

HKLM Software Microsoft Windows NT CurrentVersion AEDEBUG DEBUGGER

그러나 Windows Vista에서는 작동하지 않았습니다.

도움이 되었습니까?

해결책

WER (Windows Error Reporting)을 강제로 충돌 덤프를 가져 와서 앱을 닫으려면 프로그램을 디버깅하라는 메시지를 표시하는 대신 이러한 레지스트리 항목을 설정할 수 있습니다.

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

레지 디트

dword hklm 또는 hkcu software microsoft Windows Windows Windows 오류보고 dontshowui = "1"

조용히보고 할 것입니다. 그런 다음 설정할 수 있습니다

dword hklm 또는 hkcu software microsoft Windows Windows Windows 오류보고 disabled = "1"

MS와 대화하는 것을 막기 위해.

이것이 정확히 동일한 대화 상자를 지칭하는지 확실하지 않지만 여기에 대체 접근 방식이 있습니다. 레이몬드 첸:

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-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 ().

Secure CRT를 사용하는 경우 자신의 유효하지 않은 매개 변수 핸들러를 제공하고이를 설정해야합니다. _set_invalid_parameter_handler().

이 블로그 게시물에는 몇 가지 정보가 있습니다.http://blog.kalmbachnet.de/?postid=75

테스트 중에 a로 실행할 수 있습니다 Adplus 첨부와 같은 '디버거' 오류에 대한 데이터 (Minidumps)를 수집하는 많은 유용한 방법으로 구성 할 수 있지만 위에서 언급 한 모달 대화 문제를 방지 할 수 있습니다.

앱이 생산에 충돌 할 때 유용한 정보를 얻으려면 구성 할 수 있습니다. Microsoft 오류보고 Adplus 데이터와 유사한 것을 얻습니다.

이것은 해결 방법이기 때문에 문제에 대한 직접적인 답변이 아니며 문제는 해당 기능을 비활성화하는 방법에 관한 것이지만, 제 경우에는 제한된 권한이있는 서버의 사용자이며 기능을 사용하여 기능을 비활성화 할 수 없습니다. 다른 대답. 그래서 해결 방법이 필요했습니다. 이것은 적어도이 질문에 참여하는 다른 사람들에게는 효과가있을 것입니다.

나는 사용했다 Autohotkey 휴대용 팝업 상자가 존재하는지 확인하기 위해 분당 한 번 확인하는 매크로를 만들었고, 그렇지 않으면 버튼을 클릭하여 프로그램을 닫습니다. 제 경우에는 충분하고 다른 사용자에게 기능을 남깁니다. 위험에 처한 프로그램을 실행할 때 스크립트를 시작해야하지만 내 필요에 맞게 작동합니다.

스크립트는 다음과 같습니다.

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
}

편집하다: 빠른 깃발. 다른 것들이 올라 오면 전경 창에서 컨트롤을 활성화하려고 시도하는 것 같습니다. 백그라운드에서 프로그램으로 보내야합니다. 수정 사항을 찾으면이 답변을 편집하여 반영하지만 지금은 이것을 사용하고 동시에 기계에서 다른 작업을 수행하려고 노력하십시오.

인터넷에서 다른 모든 것을 시도한 후 시간 디버거를 제거하기 위해 실제로 효과가있는 간단한 방법을 찾았으며 다른 사람을 도울 수 있기를 바랍니다.

제어판으로 이동 관리 도구로 이동 서비스로 이동 서비스 디버그 관리자 목록을 찾아보십시오. 마우스 오른쪽 버튼을 클릭하고 일반 탭에서 속성을 클릭하고 시작 유형을 찾으십시오. 비활성화를 클릭하십시오. 적용 및 확인을 클릭하십시오.

그 이후로 디버거 메시지를 보지 못했고 컴퓨터가 완벽하게 실행 중입니다.

레지스트리에서 값을 변경하는 대신 Windows Server 2008 R2, Windows Server 2012 및 Windows 8에서 오류보고를 완료 할 수 있습니다. serverWerOptin /disable

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top