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

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

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

@H_301_2@--------------------------- 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(见上文)将禁止不需要的操作系统通知.

示例代码

@H_301_2@SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBox); _set_abort_behavior(0,_WRITE_ABORT_MSG);
原文链接:https://www.f2er.com/c/119790.html

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