I have a process which I start with CreateProcess, then I wait for it to finish and check its exit code. I do this in batch mode and I don\'t want any message boxes to show
You're dealing with three kinds of abnormal termination:
On Windows, C++ exceptions typically reuse parts of Win32 exception handling. Therefore your method addresses 1 and 3, but misses 2. That's why the message is coming from "Microsoft Visual C++ Runtime Library". You'll need _set_abort_behavior(0, _WRITE_ABORT_MSG) to suppress that.
You want to suppress two things:
The first you do with SetErrorMode requesting SEM_FAILCRITICALERRORS
and SEM_NOGPFAULTERRORBOX
. The second can be suppressed by altering CRT behavior with _set_abort_behavior.
You don't actually need an empty handler with SetUnhandledExceptionFilter
- you are not doing anything important there. Proving no handler would crash the process and SetErrorMode
(see above) will suppress the unwanted OS notification.
Sample code to do it:
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
_set_abort_behavior(0,_WRITE_ABORT_MSG);