在C中禁用崩溃对话框

时间:2011-09-17 12:06:24

标签: c windows visual-studio visual-studio-2010 cygwin

我想禁用(在VS2010 C程序中)发生GPF时弹出屏幕的崩溃对话框窗口(您知道 xxx.exe已停止工作

我试过win2008和win7:

 - SetErrorMode(SetErrorMode(SEM_NOGPFAULTERRORBOX)|SEM_FAILCRITICALERRORS);
 - try/catch (with SEH, but some parts of the code aren't wrapped in)
 - SetUnhandledExceptionFilter()

没有任何作用......仍然在这个该死的窗户上

我忘记了什么吗?

唯一有效的方法是修改寄存器库中的“DontShowUI”键 ( HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ Windows错误报告) 但它只是不干净,我更喜欢“编码”解决方案(我不能将寄存器更改为我的代码!)

你知道吗? (除了修复程序本身以避免GPF当然:)

...谢谢

注意:有趣的是,在Cygwin下没有出现崩溃对话框!

1 个答案:

答案 0 :(得分:5)

禁用崩溃框的最佳方法是删除导致程序崩溃的任何代码。对于正确的程序,此框将永远不会出现。

修改:至于您对SetErrorMode的调用究竟出了什么问题,应该是:

SetErrorMode(SetErrorMode(SEM_NOGPFAULTERRORBOX)
    |SEM_FAILCRITICALERRORS|SEM_NOGPFAULTERRORBOX);

或类似的。我认为你误读了你在评论中引用的博客文章。