Когда приложение выходит из строя в Windows и установлен отладчик, например Visual Studio, появляется следующий модальный диалог:
[Название: Microsoft Windows]
X перестал работать
Проблема привела к тому, что программа перестала правильно работать. Windows закроет программу и сообщит вам, если решение доступно.
[Отладка] [Закрыть приложение]
Есть ли способ отключить этот диалог? То есть программа просто вылетает и тихо горит?
Мой сценарий состоит в том, что я хотел бы запустить несколько автоматических тестов, некоторые из которых выйдут из строя из-за ошибок в тестируемом приложении. Я не хочу, чтобы эти диалоги тормозили автоматизацию.
Обыскивая вокруг, я думаю, что нашел решение для отключения этого в Windows XP, которое запускает этот ключ реестра:
HKLM \ Software \ Microsoft \ Windows NT \ CurrentVersion \ AeDebug \ Debugger
Однако в Windows Vista это не сработало.
Ответы:
Чтобы система отчетов об ошибках Windows (WER) создавала аварийный дамп и закрывала приложение, вместо того, чтобы предлагать вам отладить программу, вы можете установить следующие записи реестра:
После того, как это установлено, при сбое ваших приложений вы должны увидеть файлы * .hdmp и * .mdmp в:
источник
Глянь сюда:
http://msdn.microsoft.com/en-us/library/bb513638.aspx
regedit
DWORD HKLM или HKCU \ Software \ Microsoft \ Windows \ Windows Error Reporting \ DontShowUI = "1"
сделает отчет WER молча. Затем вы можете установить
DWORD HKLM или HKCU \ Software \ Microsoft \ Windows \ Windows Error Reporting \ Disabled = "1"
чтобы он не разговаривал с MS.
источник
Я не уверен, относится ли это к точно такому же диалогу, но вот альтернативный подход от Раймонда Чена :
источник
Мне пришлось отключить это для работы по автоматизации выпуска в 64-битной Windows для Firefox, и я сделал следующее:
Это похоже на то, что было сделано для отчета об опыте работы с клиентами в: http://www.blogsdna.com/2137/fix-windows-installer-explorer-update-has-stopped-working-in-windows-7.htm
источник
В моем контексте я хочу подавить всплывающее окно только для своих модульных тестов, а не для всей системы. Я обнаружил, что для подавления этих ошибок необходима комбинация функций, таких как перехват необработанных исключений, подавление проверок времени выполнения (например, правильность указателя стека) и флаги режима ошибки. Вот что я использовал с некоторым успехом:
источник
В приложении WPF
источник
Вы должны реализовать фильтр необработанных исключений, который просто завершает работу вашего приложения, а затем установить эту функцию фильтра с помощью SetUnhandledExceptionFilter () .
Если вы используете безопасный CRT, вам также необходимо предоставить свой собственный обработчик недопустимых параметров и установить его с помощью _set_invalid_parameter_handler ().
В этом сообщении в блоге также есть информация: http://blog.kalmbachnet.de/?postid=75
источник
Во время теста вы можете запустить «отладчик», например ADPlus, который можно настроить многими полезными способами для сбора данных (минидампов) об ошибках и, тем не менее, для предотвращения проблем с модальным диалоговым окном, которые вы указали выше.
Если вы хотите получить полезную информацию при сбое вашего приложения в производственной среде, вы можете настроить отчеты об ошибках Microsoft, чтобы получать что-то похожее на данные ADPlus.
источник
Это не прямой ответ на вопрос, поскольку это обходной путь, и вопрос заключается в том, как отключить эту функцию, но в моем случае я являюсь пользователем сервера с ограниченными разрешениями и не могу отключить эту функцию с помощью одного из другие ответы. Итак, мне нужно было обходное решение. Скорее всего, это сработает, по крайней мере, для некоторых других, кто ответит на этот вопрос.
Я использовал переносной autohotkey и создал макрос, который раз в минуту проверяет, существует ли всплывающее окно, и, если да, нажимает кнопку, чтобы закрыть программу. В моем случае этого достаточно, и я оставляю эту функцию включенной для других пользователей. Это требует, чтобы я запускал сценарий при запуске программы, подверженной риску, но он работает для моих нужд.
Сценарий выглядит следующим образом:
редактировать: быстрый флаг. Когда другие вещи работают, кажется, что это пытается активировать элементы управления в окне переднего плана - он должен отправить его программе в фоновом режиме. Если я найду исправление, я отредактирую этот ответ, чтобы отразить его, но пока будьте осторожны, используя это и одновременно пытаясь выполнять другую работу на машине.
источник
Попробовав все остальное в Интернете, чтобы избавиться от своевременного отладчика, я нашел простой способ, который действительно работал и, надеюсь, поможет кому-то другому.
Перейдите в панель управления. Перейдите в раздел "Администрирование". Перейдите к службам. Посмотрите список Machine Debug Manager. Щелкните правой кнопкой мыши по нему и выберите "Свойства". На вкладке "Общие" найдите "Тип запуска". Нажмите "Отключить". Нажмите Применить и ОК.
С тех пор я не видел сообщения отладчика, и мой компьютер работает отлично.
источник
Вместо изменения значений в реестре вы можете полностью отключить отчеты об ошибках в Windows Server 2008 R2, Windows Server 2012 и Windows 8 с помощью:
serverWerOptin /disable
https://technet.microsoft.com/en-us/library/hh875648(v=ws.11).aspx
источник