desactivar - ¿Cómo desactivo el diálogo ''Depurar/Cerrar aplicación'' en Windows Vista?
windows problem reporting windows 10 (11)
Cuando una aplicación falla en Windows y se instala un depurador como Visual Studio, aparece el siguiente cuadro de diálogo modal:
[Título: Microsoft Windows]
X ha dejado de funcionar
Un problema causó que el programa no funcionara correctamente. Windows cerrará el programa y le notificará si hay una solución disponible.
[Depurar] [Cerrar aplicación]
¿Hay alguna forma de desactivar este diálogo? Es decir, ¿el programa simplemente se bloquea y se quema silenciosamente?
Mi caso es que me gustaría ejecutar varias pruebas automáticas, algunas de las cuales fallarán debido a errores en la aplicación bajo prueba. No quiero que estos diálogos detengan la ejecución de la automatización.
Buscando Creo que he localizado la solución para deshabilitar esto en Windows XP, que está activando esta clave reg:
HKLM / Software / Microsoft / Windows NT / CurrentVersion / AeDebug / Debugger
Sin embargo, eso no funcionó en Windows Vista.
Después de probar todo lo demás en Internet para deshacerme del depurador justo a tiempo, encontré una manera simple que realmente funcionó y espero que ayude a otra persona.
Vaya a Panel de control Vaya a Herramientas administrativas Vaya a Servicios Mire la lista de Administrador de depuración de máquina Haga clic con el botón derecho en él y haga clic en Propiedades en la ficha General, busque Tipo de inicio Haga clic en Deshabilitar. Haga clic en Aplicar y Aceptar.
No he visto el mensaje del depurador desde entonces, y mi computadora funciona perfectamente.
Durante la prueba puede ejecutar con un ''depurador'' como ADPlus adjunto que se puede configurar de muchas maneras útiles para recopilar datos (minivolcados) sobre errores y, sin embargo, evitar los problemas de diálogo modal que indica más arriba.
Si desea obtener información útil cuando su aplicación falla durante la producción, puede configurar el informe de errores de Microsoft para obtener algo similar a los datos de ADPlus.
En la aplicación 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 );
}
En lugar de cambiar valores en el registro, puede deshabilitar por completo el informe de errores en Windows Server 2008 R2, Windows Server 2012 y Windows 8 con: serverWerOptin /disable
https://technet.microsoft.com/en-us/library/hh875648(v=ws.11).aspx
En mi contexto, solo quiero suprimir la ventana emergente para mis pruebas unitarias y no para todo el sistema. Descubrí que se necesita una combinación de funciones para suprimir estos errores, como capturar excepciones no controladas, suprimir verificaciones de tiempo de ejecución (como la validez del puntero de la pila) y los indicadores del modo de error. Esto es lo que he usado con cierto éxito:
#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;
}
Esta no es una respuesta directa a la pregunta, ya que esta es una solución y la pregunta es cómo desactivar esa característica, pero en mi caso, soy un usuario en un servidor con permisos limitados y no puedo deshabilitar la función usando una de las otras respuestas. Entonces, necesitaba una solución. Es probable que esto funcione para al menos otros que terminan con esta pregunta.
Utilicé autohotkey portable y creé una macro que una vez por minuto verifica si el cuadro emergente existe, y si lo hace, hace clic en el botón para cerrar el programa. En mi caso, eso es suficiente y deja la función para otros usuarios. Requiere que inicie el script cuando ejecuto el programa en riesgo, pero funciona para mis necesidades.
El script es el siguiente:
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
}
editar: una bandera rápida. Cuando otras cosas pasan, esto parece intentar activar los controles en la ventana de primer plano; se supone que debe enviarlo al programa en segundo plano. Si encuentro una solución, editaré esta respuesta para reflejarla, pero por ahora, tenga cuidado al usar esto e intentar hacer otro trabajo en una máquina al mismo tiempo.
Mira aquí:
http://msdn.microsoft.com/en-us/library/bb513638.aspx
regedit
DWORD HKLM o HKCU / Software / Microsoft / Windows / Windows Informes de errores / DontShowUI = "1"
hará que WER informe silenciosamente. Entonces puedes establecer
DWORD HKLM o HKCU / Software / Microsoft / Windows / Windows Informes de errores / Disabled = "1"
para evitar que hable con MS.
No estoy seguro de si esto se refiere exactamente al mismo diálogo, pero aquí hay un enfoque alternativo de Raymond Chen :
DWORD dwMode = SetErrorMode(SEM_NOGPFAULTERRORBOX);
SetErrorMode(dwMode | SEM_NOGPFAULTERRORBOX);
Para forzar a Windows Error Reporting (WER) a tomar un volcado de emergencia y cerrar la aplicación, en lugar de solicitarle que depure el programa, puede establecer estas entradas de registro:
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
Una vez configurado esto, cuando se bloqueen las aplicaciones, debería ver los archivos * .hdmp y * .mdmp en:
%ALLUSERSPROFILE%/Microsoft/Windows/WER/
Tuve que desactivar esto para el trabajo de automatización de versiones en Windows 64 bits para Firefox e hice lo siguiente:
- gpedit.msc
- Configuración de la computadora -> Plantillas administrativas
- Componentes de Windows -> Informes de errores de Windows
- Establezca "Prevenir la visualización de la interfaz de usuario para errores críticos" en Habilitado
Es similar a lo que se logró con los informes de Experiencia del cliente en: http://www.blogsdna.com/2137/fix-windows-installer-explorer-update-has-stopped-working-in-windows-7.htm
SetUnhandledExceptionFilter() implementar un filtro de excepciones no controladas que simplemente cierre su aplicación, luego configure esa función de filtro con SetUnhandledExceptionFilter() .
Si está utilizando CRT seguro, también debe proporcionar su propio manejador de parámetros no válido y configurarlo con _set_invalid_parameter_handler ().
Esta publicación del blog también contiene información: http://blog.kalmbachnet.de/?postid=75