c – 当进程崩溃时我怎么能压制所有错误对话框(我只希望它以静默方式崩溃)

前端之家收集整理的这篇文章主要介绍了c – 当进程崩溃时我怎么能压制所有错误对话框(我只希望它以静默方式崩溃)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个进程,我从CreateProcess开始,然后我等待它完成并检查其退出代码.我在批处理模式下执行此操作,如果进程崩溃,我不希望显示任何消息框.仅返回非零退出代码即表示失败就足够了.到目前为止,我已经尝试过使用
LONG WINAPI MyUnhandledExceptionFilter(_EXCEPTION_POINTERS *lpTopLevelExceptionFilter)
{
    ExitProcess(-1);
    return EXCEPTION_EXECUTE_HANDLER;
}

BOOL CMyApp::InitInstance()
{
    AfxEnableControlContainer();

    SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);

    throw std::runtime_error("test");
}

但这并不总是保持沉默.有时会显示一个对话框:

---------------------------
Microsoft Visual C++ Runtime Library
---------------------------
Runtime Error!

Program: C:\Workspace\MyApp\Release\MyApp.exe



abnormal program termination


---------------------------
OK   
---------------------------

解决方法

你想抑制两件事:

> OS模式对话框通知用户崩溃
>运行时弹出您自己的对话框

第一次使用SetErrorMode请求SEM_FAILCRITICALERRORS和SEM_NOGPFAULTERRORBox.通过使用_set_abort_behavior改变CRT行为可以抑制第二个.

你实际上并不需要一个带有SetUnhandledExceptionFilter的空处理程序 – 你没有做任何重要的事情.证明没有处理程序会使进程崩溃,SetErrorMode(见上文)将禁止不需要的操作系统通知.

示例代码

SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBox);
_set_abort_behavior(0,_WRITE_ABORT_MSG);

猜你在找的C&C++相关文章