2

Я запускаю процесс из приложения для его мониторинга. Это может привести к сбою или зависанию.Отключить разбитое диалоговое окно приложения для вызванного процесса

Приложение для мониторинга подготовлено для этого и может справиться с этим.

Но в окне сбоя отображается диалоговое окно сбоя приложения. В этот момент разбитый процесс все еще находится в списке процессов. Но диалог не исчезает, если процесс будет прекращен приложением мониторинга (после таймаута с TerminateProcess).

Я попытался отключить отчет об ошибках Windows для этого приложения, используя WerAddExcludedApplication и WerRemoveExcludedApplication, но это устраняет возможность поиска в Интернете только для решения.

Я также не хочу полностью отключать WER.

Есть ли другой способ программно отключить этот диалог для данного исполняемого файла (он не всегда будет таким же)?

+0

[WerRegisterRuntimeExceptionModule] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd408167.aspx). – IInspectable

+1

'SetErrorMode' наследуется, поэтому установите родительский режим ошибки на' SEM_NOGPFAULTERRORBOX' перед запуском ребенка. –

+0

изменение параметра ErrorMode ничего не меняет. –

ответ

0

Я думаю, что вы ищете раздел реестра DontShowUI. Это приведет к отключению отчетов об ошибках Windows (WER) и просто не будет всплывать на непосвященном исключении.

DontShowUI (REG_DWORD) Возможные значения:

0 - пользовательский интерфейс (по умолчанию)

1 - Нет UI (Включение или отключение интерфейса WER)

Ссылка на параметры реестра ВВЭР: https://msdn.microsoft.com/en-us/library/windows/desktop/bb513638(v=vs.85).aspx

Вы можете установить это в реестре здесь (или же в HKEY_CURRENT_USER):

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting] 
"DontShowUI"=dword:00000001 

Если вы установили этот ключ и по-прежнему видите диалоговое окно в необработанном исключении, я бы рекомендовал выполнить поиск в реестре для любого значения Value = DontShowUI, поскольку иногда я обнаружил, что они установлены в нечетных местах (и удостоены Windows).

+1

Это глобальное решение локальной проблемы. –

+0

Ям с Раймондом Ченом на этом. Я действительно не хочу менять поведение глобальной системы. Я также сказал об этом в своем вопросе. –

+0

Понял. В таком случае я не могу придумать отличное решение. Вы можете установить и отключить этот раздел реестра в определенные моменты времени во время выполнения, но это обходное решение, а не очень хорошее. – PerryC