Как убрать диалог Unhandled Exception, созданный сторонним приложением

Я работаю с сторонним исполняемым файлом, который не могу перекомпилировать (поставщик больше не доступен). Первоначально он был написан под.Net 1.1, но, похоже, хорошо работает и в более поздних версиях. Я запускаю его с помощью Process.Start из моего собственного приложения (я пробовал также запускать / вызывать CreateProcess с теми же результатами, что не имеет значения)

К сожалению, это стороннее приложение теперь выдает необработанное исключение при выходе. Диалоговое окно Microsoft имеет заголовок, такой как "Исключение, генерируемое из v2.0... Broadcast Window" с номером версии, относящимся к версии.Net, в которой он запущен (я могу использовать файл.exe.config для нацеливания на разные.Net версии, не помогает).

Диалоговое окно необработанного исключения при выходе не вызывает никаких реальных проблем, но беспокоит моих пользователей, которые вынуждены каждый раз нажимать кнопку ОК, чтобы закрыть его. Есть ли способ (возможно, опция файла конфигурации) отключить отображение этого диалога для приложения, к которому у меня нет исходного кода? Я рассмотрел возможность загрузки его в новый домен приложений, который дал бы мне доступ к событию UnhandledException, но нет никаких признаков того, что я мог бы изменить внешний вид диалога. Может, кто-то знает, что вызывает исключение, и я могу это исправить другим способом?

3 ответа

Вы можете написать приложение-оболочку, которое напрямую вызывает стороннее приложение, и запускать его с помощью Process.Start,

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

Если он не был запутан, вы можете его декомпилировать? Это, конечно, незаконно и т. Д., Но если компания действительно обанкротилась, то никто не может ее преследовать. Разумно поддержать код, если у вас нет другого выбора.

Reflector может дать вам подсказку о том, почему код также падает, возможно, вам нужно что-то сделать или вызвать его с параметром, чтобы не дать ему это сделать?

В следующий раз не пытайтесь использовать что-то без исходного кода:)

Обходной путь должен следовать предложению Криса. Приложение-оболочка может использовать такой код,

http://blog.jtbworld.com/2007/06/windows-live-writer-spell-checking.html

  1. Найти старый исполняемый файл приложения.
  2. Выполните его в объекте AppDomain, созданном в приложении-оболочке.
  3. Привязать обработчик необработанных исключений вашего приложения к событию UnhandledException этого объекта AppDomain.

http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx

Другие вопросы по тегам