Gdy aplikacja ulegnie awarii w systemie Windows i zostanie zainstalowany debugger, taki jak Visual Studio, pojawi się następujące modalne okno dialogowe:
[Tytuł: Microsoft Windows]
X przestał działać
Problem spowodował, że program przestał działać poprawnie. System Windows zamknie program i powiadomi Cię, jeśli dostępne będzie rozwiązanie.
[Debuguj] [Zamknij aplikację]
Czy istnieje sposób na wyłączenie tego okna dialogowego? To znaczy, czy program po prostu się zawiesił i cicho nagrywał?
Mój scenariusz jest taki, że chciałbym uruchomić kilka testów automatycznych, z których część ulegnie awarii z powodu błędów w testowanej aplikacji. Nie chcę, aby te okna dialogowe opóźniały działanie automatyzacji.
Przeszukując okolice, wydaje mi się, że znalazłem rozwiązanie umożliwiające wyłączenie tego w systemie Windows XP, czyli nukowanie tego klucza reg:
HKLM \ Software \ Microsoft \ Windows NT \ CurrentVersion \ AeDebug \ Debugger
Jednak to nie zadziałało w systemie Windows Vista.
Odpowiedzi:
Aby zmusić raportowanie błędów systemu Windows (WER) do wykonania zrzutu awaryjnego i zamknięcia aplikacji, zamiast wyświetlać monit o debugowanie programu, możesz ustawić następujące wpisy rejestru:
Po ustawieniu tego ustawienia, gdy aplikacje ulegną awarii, pliki * .hdmp i * .mdmp powinny być widoczne w:
źródło
Spójrz tutaj:
http://msdn.microsoft.com/en-us/library/bb513638.aspx
regedit
DWORD HKLM lub HKCU \ Software \ Microsoft \ Windows \ Windows Error Reporting \ DontShowUI = „1”
sprawi, że WER po cichu poinformuje. Następnie możesz ustawić
DWORD HKLM lub HKCU \ Software \ Microsoft \ Windows \ Windows Error Reporting \ Disabled = „1”
powstrzymać go od rozmowy z SM.
źródło
Nie jestem pewien, czy dotyczy to dokładnie tego samego okna dialogowego, ale tutaj jest alternatywne podejście Raymonda Chena :
źródło
Musiałem to wyłączyć, aby automatyzacja wydań działała w 64-bitowym systemie Windows dla przeglądarki Firefox i wykonałem następujące czynności:
Podobnie jest w przypadku raportowania Customer Experience w: http://www.blogsdna.com/2137/fix-windows-installer-explorer-update-has-stopped-working-in-windows-7.htm
źródło
W moim kontekście chcę tylko pominąć wyskakujące okienko dla moich testów jednostkowych, a nie dla całego systemu. Odkryłem, że w celu wyeliminowania tych błędów potrzebna jest kombinacja funkcji, takich jak przechwytywanie nieobsłużonych wyjątków, blokowanie kontroli czasu wykonywania (takich jak poprawność wskaźnika stosu) i flagi trybu błędu. Oto, czego użyłem z pewnym sukcesem:
źródło
W aplikacji WPF
źródło
Musisz zaimplementować nieobsługiwany filtr wyjątków, który po prostu zamyka aplikację, a następnie ustawić tę funkcję filtrującą za pomocą SetUnhandledExceptionFilter () .
Jeśli używasz bezpiecznego CRT, musisz również podać własną procedurę obsługi nieprawidłowych parametrów i ustawić ją za pomocą _set_invalid_parameter_handler ().
Ten post na blogu również zawiera informacje: http://blog.kalmbachnet.de/?postid=75
źródło
Podczas testu można uruchomić z dołączonym „debugerem”, takim jak ADPlus, który można skonfigurować na wiele użytecznych sposobów, aby zbierać dane (minizrzuty) o błędach, a jednocześnie zapobiegać problemom z modalnym oknem dialogowym, które opisaliście powyżej.
Jeśli chcesz uzyskać przydatne informacje, gdy Twoja aplikacja ulegnie awarii w środowisku produkcyjnym, możesz skonfigurować raportowanie błędów firmy Microsoft, aby uzyskać coś podobnego do danych ADPlus.
źródło
To nie jest bezpośrednia odpowiedź na to pytanie, ponieważ jest to obejście i pytanie dotyczy sposobu wyłączenia tej funkcji, ale w moim przypadku jestem użytkownikiem na serwerze z ograniczonymi uprawnieniami i nie mogę wyłączyć tej funkcji za pomocą jednego z inne odpowiedzi. Więc potrzebowałem obejścia. Prawdopodobnie zadziała to przynajmniej w przypadku niektórych innych, którzy skończą z tym pytaniem.
Kiedyś AutoHotkey przenośny i stworzony makro, które raz na minute sprawdza, czy okno popup istnieje, a jeśli tak, to kliknie przycisk, aby zamknąć program. W moim przypadku to wystarczy i pozostawia tę funkcję włączoną dla innych użytkowników. Wymaga to uruchomienia skryptu, gdy uruchamiam zagrożony program, ale działa dla moich potrzeb.
Skrypt wygląda następująco:
edycja: szybka flaga. Kiedy inne rzeczy są aktywne, wydaje się, że próbuje to aktywować kontrolki w oknie pierwszego planu - ma wysłać to do programu w tle. Jeśli znajdę poprawkę, edytuję tę odpowiedź, aby ją odzwierciedlić, ale na razie zachowaj ostrożność przy używaniu tego i próbowaniu wykonywania innych prac na komputerze w tym samym czasie.
źródło
Po wypróbowaniu wszystkiego innego w Internecie, aby pozbyć się debuggera just in time, znalazłem prosty sposób, który faktycznie zadziałał i mam nadzieję, że pomoże komuś innemu.
Idź do Panelu sterowania Idź do Narzędzia administracyjne Idź do Usługi Spójrz w dół na listę Machine Debug Manager Kliknij prawym przyciskiem myszy i kliknij Właściwości W zakładce Ogólne poszukaj Typ uruchomienia Kliknij Wyłącz. Kliknij Zastosuj i OK.
Od tego czasu nie widziałem komunikatu debugera, a mój komputer działa idealnie.
źródło
Zamiast zmieniać wartości w rejestrze, możesz całkowicie wyłączyć raportowanie błędów w systemach Windows Server 2008 R2, Windows Server 2012 i Windows 8 za pomocą:
serverWerOptin /disable
https://technet.microsoft.com/en-us/library/hh875648(v=ws.11).aspx
źródło