How can I supress all error dialogs when a process crashes (I only want it to crash silently)

前端 未结 2 1273
长情又很酷
长情又很酷 2021-01-05 02:13

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

相关标签:
2条回答
  • 2021-01-05 02:53

    You're dealing with three kinds of abnormal termination:

    1. Uncaught C++ exception
    2. C++ library exiting
    3. Win32 uncaught excecption.

    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.

    0 讨论(0)
  • 2021-01-05 03:04

    You want to suppress two things:

    1. OS modal dialog notifying user on crash
    2. Your own dialogs popped up by runtime

    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);
    
    0 讨论(0)
提交回复
热议问题