La respuesta de Hans Passant sobre SetUnhandledExceptionFilter está en el camino correcto. También señala algunos puntos buenos acerca de no poder hacer demasiado en la devolución de llamada porque varias partes del proceso podrían estar en un estado inestable.
Sin embargo, por la forma en que se describe el problema, no parece que quiera hacer otra cosa que decirle al sistema que no ejecute el diálogo de bloqueo normal. En ese caso, es fácil y debe estar seguro, independientemente de las partes del proceso que hayan afectado al choque.
hacer una función algo como esto:
LONG WINAPI UnhandledExceptionCallback(PEXCEPTION_POINTERS pExceptPtrs)
{
if (IsDebuggerPresent())
// Allow normal crash handling, which means the debugger will take over.
return EXCEPTION_CONTINUE_SEARCH;
else
// Say we've handled it, so that the standard crash dialog is inhibited.
return EXCEPTION_EXECUTE_HANDLER;
}
Y en algún lugar de su programa (probablemente tan pronto como sea posible) establece la devolución de llamada:
SetUnhandledExceptionFilter(UnhandledExceptionCallback);
Eso debería hacer lo que quiera - permitir que cualquier bloqueos de ese programa en particular para morir en silencio.
Sin embargo, hay algo más a tener en cuenta sobre esto: siempre que traiga componentes de terceros (DLL, OCX, etc.) existe el riesgo de que uno de ellos también llame a SetUnhandledExceptionFilter y reemplace su devolución de llamada por la suya . Una vez encontré un control ActiveX que establecería su propia devolución de llamada cuando se crea una instancia. Y lo que es peor, no pudo restaurar la devolución de llamada original cuando se destruyó. Eso parecía ser un error en su código, pero independientemente de que tuviera que tomar medidas adicionales para garantizar que mi devolución de llamada deseada al menos se restableció cuando se suponía que era después de que se cerró su control. Entonces, si encuentra que esto no parece funcionar para usted a veces, incluso cuando sabe que ha establecido la devolución de llamada correctamente, entonces puede encontrar algo similar.
nota adicional, si este accidente está siendo causado por una excepción no controlada estructurada (violación de acceso, desbordamiento de pila, etc.) , es posible que desee examinar el uso de manejadores de excepciones estructurados. Puede usarlos para registrar información y silenciarlos silenciosamente o cualquier otra cosa que quiera hacer. –