2015-09-10 1 views
3

У меня есть определенный .net приложение, которое иногда происходит сбой с одним из следующих окон ошибок:Как я могу следить за собой сбой приложения от отдельного процесса

[application name] has encountered a problem and needs to close. We are sorry for the inconvenience. или [application name] has stopped working

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

Есть ли способ обнаружить, что другое приложение разбилось?

И могу ли я предотвратить или скрыть диалог ошибок по умолчанию?


Некоторые справочная информация: У меня есть код для приложения грохот, и я могу изменить его в случае необходимости. Однако авария вызвана сторонней неуправляемой сборкой, которая перезаписывает некоторую память и оставляет приложение в состоянии, не подлежащем восстановлению. Простого блока try-catch недостаточно для предотвращения сбоя. Вот почему я хочу отслеживать и обрабатывать ошибку из отдельного процесса.

ответ

0

Если приложение записывает в журнал событий Windows, ваша другая программа может проверить там ошибок

0

Может AppDomain.UnhandledException помочь?

+0

Нет, я попробовал это. Эта конкретная ошибка не уловима и не вызывает это событие. Приложение просто падает. – HugoRune

+0

Затем это https://msdn.microsoft.com/en-us/library/windows/desktop/aa373345(v=vs.85).aspx? – user2527768

+0

Также принят ответ для этого http://stackoverflow.com/questions/78048/best-way-to-detect-an-application-crash-and-restart-it, который предлагает запустить приложение, подверженное ошибкам, из другого приложения и ждать авария. – user2527768

0

Диалоговое окно является функцией отчета об ошибках Windows (WER).

Есть ли способ обнаружить, что другое приложение разбилось?

Есть много вариантов, от службы, которая требует какого-то сердцебиение сообщения от процесса, что позволяет отлов corrupted state exceptions, чтобы позволить корпоративный сервер WER. (ссылка ниже)

[C] a Я предотвращаю или скрываю диалоговое окно ошибки по умолчанию?

WER configuration documentation содержит информацию об исключении процесса из автоматического диалога.

В частности, ключ реестра:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\ 
     Windows Error Reporting\ExcludedApplications\[Application Name] 

(HKCU имеет аналогичный ключ)

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

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

Если поставщик не желает или не может устранить проблему, вы можете скопировать способ, которым Explorer обрабатывает расширения оболочки и размещать компонент в отдельном процессе. Таким образом, когда он выходит из строя, он только уничтожает память другого процесса.Вам нужно написать обертку, чтобы вы могли общаться с ней.