Frage

Wenn eine Anwendung abstürzt unter Windows und ein Debugger wie Visual Studio werden den folgenden modalen Dialog installiert erscheint:

  

[Titel: Microsoft Windows]

     

X funktioniert nicht mehr

     

Ein Problem verursacht das Programm zu beenden   richtig funktioniert. Fenster wird geschlossen   das Programm und benachrichtigt Sie, wenn ein   Lösung zur Verfügung.

     

[Debug] [Anwendung schließen]

Gibt es eine Möglichkeit um diesen Dialog zu deaktivieren? Das heißt, haben das Programm einfach abstürzen und brennen still?

Mein Szenario ist, dass ich mehrere automatisierte Tests ausführen möchten, von denen einige aufgrund der Anwendung in der Prüfung auf Fehler abstürzt. Ich möchte nicht, diese Dialoge die Automatisierung laufen Abwürgen.

Searching um glaube ich die Lösung gefunden haben für das Deaktivieren dieser unter Windows XP, die diese reg Schlüssel nuking:

  

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

Sie jedoch, dass nicht auf Windows Vista nicht funktioniert.

War es hilfreich?

Lösung

Um Windows-Fehlerberichterstattung (WER) zwingt, ein Crash-Dump zu nehmen und die App zu schließen, anstatt Sie auffordert, das Programm zu debuggen, können Sie diese Registrierungseinträge festlegen:

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

Danach gesetzt ist, wenn Ihre Anwendungen abstürzen, sollten Sie sehen * .hdmp und * .mdmp Dateien in:

%ALLUSERSPROFILE%\Microsoft\Windows\WER\

Andere Tipps

Sehen Sie hier:

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

regedit

DWORD HKLM oder HKCU \ Software \ Microsoft \ Windows \ Windows-Fehlerberichterstattung \ DontShowUI = "1"

wird WER still Bericht machen. Dann können Sie

DWORD HKLM oder HKCU \ Software \ Microsoft \ Windows \ Windows-Fehlerberichterstattung \ Disabled = "1"

verhindern, dass es im Gespräch mit MS.

Ich bin nicht sicher, ob dies bezieht sich auf genau den gleichen Dialog, aber hier ist ein alternativer Ansatz von Raymond Chen :

DWORD dwMode = SetErrorMode(SEM_NOGPFAULTERRORBOX);
SetErrorMode(dwMode | SEM_NOGPFAULTERRORBOX);

Ich hatte das auf Windows 64-Bit für Firefox für die Freigabe Automatisierung der Arbeit abzuschalten und ich habe die folgenden:

  • gpedit.msc
  • Computerkonfiguration -> Administrative Vorlagen
  • Windows-Komponenten -> Windows-Fehlerberichterstattung
  • Set „Prevent Anzeige der Benutzeroberfläche für kritische Fehler“ auf Aktiviert

Es ist ähnlich wie in geführt wurde für Customer Experience Berichterstattung: http: / /www.blogsdna.com/2137/fix-windows-installer-explorer-update-has-stopped-working-in-windows-7.htm

In meinem Zusammenhang mag ich nur das Popup für meine Unit-Tests zu unterdrücken und nicht für das gesamte System. Ich habe festgestellt, dass eine Kombination von Funktionen notwendig ist, um diese Fehler, wie fängt nicht behandelte Ausnahmen zu unterdrücken, Laufzeit überprüft unterdrückt (wie die Gültigkeit des Stapelzeigers) und die Fehlermodus-Flags. Dies ist, was ich mit einigem Erfolg verwendet habe:

#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;
}

In WPF-Anwendung

[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 );
}

Sie haben eine nicht behandelte Ausnahme Filter zu implementieren, die einfach Ihre Anwendung beendet wird, dann setzen diese Filterfunktion mit SetUnhandledExceptionFilter () .

Wenn Sie die sichere CRT verwenden, müssen Sie auch Ihren eigenen ungültiger Parameter Handler liefern und setzen Sie diese mit _ set_invalid_parameter_handler ().

Dieser Blog-Eintrag hat einige Informationen zu: http://blog.kalmbachnet.de/?postid=75

Während des Tests können Sie laufen mit einem 'Debugger' wie ADPlus angebracht , die in vielen nützlichen Möglichkeiten konfiguriert werden können Daten (minidumps) auf Fehler zu sammeln und zu verhindern, doch die modalen Dialog Probleme, die Sie oben angeben.

Wenn Sie einige nützliche Informationen zu erhalten, wenn Ihre Anwendung abstürzt in der Produktion können Sie konfigurieren,

Dies ist keine direkte Antwort auf die Frage, da dies ein Problem umgehen, und die Frage ist, wie diese Funktion zu deaktivieren, aber in meinem Fall, ich bin ein Benutzer auf einem Server mit eingeschränkten Berechtigungen und kann die Funktion nicht deaktivieren mithilfe der anderen Antworten. Also brauchte ich eine Abhilfe. Dies wird zumindest für einige andere wahrscheinlich arbeiten, die auf diese Frage am Ende.

Ich benutzen autohotkey portable und erstellt ein Makro, das einmal pro Minute überprüft, ob das Popup-Feld vorhanden ist, und wenn ja, klickt auf die Taste, um das Programm zu schließen. In meinem Fall ist das ausreichend, und verlässt die Funktion auf für andere Benutzer. Es erfordert, dass ich das Skript starten, wenn ich das at-Risk-Programm ausführen, aber es funktioniert für meine Bedürfnisse.

Das Skript ist wie folgt:

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
}

Bearbeiten Eine schnelle Flagge. Wenn andere Dinge sind, scheint dies zu versuchen, die Kontrollen im Vordergrund Fenster aktivieren - es sollte es auf das Programm im Hintergrund senden. Wenn ich eine Fix finden, werde ich diese Antwort bearbeiten zu reflektieren, aber jetzt vorsichtig sein, diese verwenden und versuchen, andere Arbeiten an einer Maschine zur gleichen Zeit zu tun.

alles andere im Internet Nach dem Versuch, loszuwerden, gerade rechtzeitig Debugger zu bekommen, fand ich eine einfache Art und Weise, die tatsächlich gearbeitet, und ich hoffe, dass jemand anderes helfen.

Gehen Sie zu Systemsteuerung Gehen Sie auf Verwaltung Zum Dienstleistungen Schauen Sie durch die Liste für Debug-Manager Rechtsklick darauf und klicken Sie auf Eigenschaften Unter der Registerkarte Allgemein, suchen Sie nach Start Up Typ Klicken Sie auf Deaktivieren. Klicken Sie auf Übernehmen und OK.

Ich habe nicht die Debugger Nachricht gesehen, da, und mein Computer läuft perfekt.

Statt Werte in der Registrierung zu ändern können Sie komplett die Fehlerberichterstattung auf Windows Server 2008 R2, Windows Server 2012 und Windows 8 mit deaktivieren: serverWerOptin /disable

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top