Отключить приложение перестало работать окно

У нас есть служба .NET WCF, которая в идеале должна обеспечивать 100% бесперебойную работу. Но иногда у нас возникают проблемы с утечкой памяти в нашем приложении, вызванные компонентом подключения сторонней БД. Мы настроили nnCron для отслеживания существования процесса, и когда процесс этой службы завершается, он должен запустить его снова.

Но когда приложение вылетает из строя, в окнах появляется шумное окно, информирующее о том, что приложение разбилось.

Вот:

введите описание изображения здесь

И только когда мы нажимаем на немую кнопку «Закрыть программу», процесс действительно исчезает из системы. И только после этого перезапустите службу nnCron. Мы не хотим следить за появлением этого окна, просто хотим избавиться от него для успешной работы nnCron.

Итак, как мы можем отключить такие окна?

Операционная система - Windows server 2008 r2 Standard.


person kseen    schedule 22.01.2013    source источник
comment
Почему бы не сделать вашу службу службой Windows?   -  person John Saunders    schedule 22.01.2013
comment
@JohnSaunders Это потому, что нам нужен вывод консоли службы WCF, который мы иногда ищем, чтобы получить некоторую внутреннюю информацию.   -  person kseen    schedule 22.01.2013
comment
Итак, сделайте это службой Windows. Реализуйте дополнительный контракт для IGetInternalInformation. Пусть ваша консоль вызовет методы этого контракта.   -  person John Saunders    schedule 22.01.2013
comment
@JohnSaunders Спасибо, Джон, за ваш ответ. Ваше решение идеальное и каким оно должно быть на самом деле. Но в нашей компании у нас ежедневные крысиные бега, и никто в нашей управленческой группе не заботится о качестве, а заботится только о новых проектах.   -  person kseen    schedule 22.01.2013
comment
Обычно вы получаете этот диалог, когда исключение не обнаружено. Мне нравится добавлять в свой основной метод уловку, чтобы исправить это. Трудно сказать, сможете ли вы его поймать, возможно, включите трассировку стека и ошибку   -  person Iain    schedule 22.01.2013
comment
Может быть, вы не обнаруживаете исключение потока? ссылка   -  person Muaddib    schedule 08.03.2013


Ответы (1)


Я знаю, что это старый вопрос, но у меня была та же проблема, и я нашел решение.

В начале заявки назовите следующее:

SetErrorMode( SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX );

Я пробовал это с очень простым тестовым приложением, которое пытается разыменовать нулевой указатель. Без строки выше мое тестовое приложение показало бы «... перестало работать диалог». Со строкой выше приложение просто тихо умирает.

Использованная литература:

РЕДАКТИРОВАТЬ: вот возможность отключить этот диалог в масштабе всей системы без изменения кода. Создайте следующий параметр реестра как REG_DWORD и установите значение 1:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\DontShowUI

Ссылка: Настройки WER

person NickS    schedule 19.09.2013