Hans Passants Antwort über SetUnhandledExceptionFilter ist auf dem richtigen Weg. Er macht auch einige gute Punkte, wenn es darum geht, im Callback nicht zu viel zu tun, da sich verschiedene Teile des Prozesses in einem instabilen Zustand befinden könnten.
Von der Art und Weise, wie das Problem beschrieben wird, klingt es jedoch nicht so, als ob Sie etwas tun möchten, außer dass das System den normalen Crash-Dialog nicht aufruft. In diesem Fall ist es einfach und sollte sicher sein, unabhängig davon, welche Teile des Prozesses vom Absturz betroffen sein könnten.
eine Funktion so etwas wie dieses Fabrikat:
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;
}
Und irgendwo in Ihrem Programm (wahrscheinlich so früh wie möglich) den Rückruf:
SetUnhandledExceptionFilter(UnhandledExceptionCallback);
das tun sollten, was Sie wollen - erlauben eine beliebige Abstürze dieses bestimmten Programms, um still zu sterben.
Es gibt jedoch noch etwas zu beachten: Jedes Mal, wenn Sie Komponenten von Drittanbietern (DLLs, OCXs, etc.) einbringen, besteht die Gefahr, dass einer von ihnen auch SetUnhandledExceptionFilter aufruft und somit Ihren Callback durch ihren eigenen ersetzt . Ich bin einmal auf ein ActiveX-Steuerelement gestoßen, das bei der Instanziierung einen eigenen Rückruf festlegen würde. Und noch schlimmer, es ist nicht gelungen, den ursprünglichen Rückruf wiederherzustellen, als er zerstört wurde. Das schien ein Fehler in ihrem Code zu sein, aber ich musste trotzdem zusätzliche Schritte unternehmen, um sicherzustellen, dass mein gewünschter Callback zumindest wiederhergestellt wurde, nachdem er heruntergefahren wurde. Wenn Sie also feststellen, dass dies manchmal nicht für Sie funktioniert, selbst wenn Sie wissen, dass Sie den Rückruf richtig eingestellt haben, können Sie auf etwas Ähnliches stoßen.
Zusätzlicher Hinweis, wenn dieser Absturz durch eine nicht behandelte strukturierte Ausnahme (Zugriffsverletzung, Stapelüberlauf, etc.) verursacht wird Vielleicht möchten Sie sich mit strukturierten Ausnahmehandlern beschäftigen. Sie könnten sie verwenden, um einige Informationen zu protokollieren und im stillen Absturz oder was auch immer Sie sonst tun möchten. –