Отключить диалоговое окно сбоя в C - PullRequest
2 голосов
/ 17 сентября 2011

Я хотел бы отключить (в программе 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 Ответ

5 голосов
/ 17 сентября 2011

Лучший способ отключить окно сбоя - удалить любой код, вызывающий сбой вашей программы. Это поле никогда не появится для правильной программы.

Редактировать: Что касается того, что на самом деле не так с вашим звонком на SetErrorMode, оно должно быть:

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

или аналогичный. Я думаю, что вы неправильно прочитали статью в блоге, которую вы цитировали в комментариях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...