85 votes

Comment désactiver la boîte de dialogue 'Debug / Close Application' sur Windows Vista?

Lorsqu'une application se bloque sur Windows et un débogueur Visual Studio est installé le suivant de la boîte de dialogue modale s'affiche:

[Titre: Microsoft Windows]

X a cessé de fonctionner

Un problème a provoqué l'arrêt du programme travail correctement. Windows va fermer le programme et vous informer si un la solution est disponible.

[Debug][Fermer L'Application]

Est-il un moyen de désactiver cette boîte de dialogue? Pour que le programme crash and burn en silence?

Mon scénario, c'est que je voudrais exécuter plusieurs tests automatisés, de plantage dû à des bugs dans l'application sous test. Je ne veux pas de ces boîtes de dialogue décrochage de l'automatisation de la course.

La recherche autour de moi, je crois que j'ai trouve la solution pour la désactivation de ce sur Windows XP, qui est la destruction de cette clé de registre:

HKLM\Software\Microsoft\Windows NT\CurrentVersion\AeDebug\Débogueur

Toutefois, cela ne fonctionne pas sur Windows Vista.

54voto

NicJ Points 1018

Pour forcer Windows Error Reporting (WER) à effectuer un vidage sur incident et à fermer l'application, au lieu de vous inviter à déboguer le programme, vous pouvez définir les entrées de registre suivantes:

 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
 

Une fois ceci défini, lorsque vos applications se bloquent, vous devriez voir les fichiers * .hdmp et * .mdmp dans:

 %ALLUSERSPROFILE%\Microsoft\Windows\WER\
 

35voto

Luke Quinane Points 8257

Je ne suis pas sûr que cela se réfère exactement au même dialogue, mais voici une approche alternative de Raymond Chen :

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

30voto

armenzg Points 161

J'ai dû désactiver cette option pour libérer le travail d'automatisation sur Windows 64 bits de Firefox et je n'ai suivantes:

  • gpedit.msc
  • Configuration de l'ordinateur -> Modèles d'Administration
  • Composants Windows -> Rapport D'Erreurs Windows
  • Set "Empêcher l'affichage de l'interface utilisateur pour les erreurs critiques" pour Activé

Il est similaire à ce qui a été accompli à l'Expérience Client dans les rapports: http://www.blogsdna.com/2137/fix-windows-installer-explorer-update-has-stopped-working-in-windows-7.htm

12voto

Gearoid Murphy Points 4181

Dans mon contexte, je souhaite uniquement supprimer la fenêtre contextuelle pour mes tests unitaires et non pour l'ensemble du système. J'ai constaté qu'une combinaison de fonctions est nécessaire pour supprimer ces erreurs, telles que la capture des exceptions non gérées, la suppression des contrôles de l'exécution (tels que la validité du pointeur de pile) et des indicateurs de mode d'erreur. C'est ce que j'ai utilisé avec un certain succès:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X