Для перехвата необработанных исключений требуется вызов SetUnhandledExceptionFilter () в процессе. Это будет трудно сделать, если у вас нет исходного кода, хотя технически это возможно, если ввести DLL в процесс. Однако это невозможно сделать с помощью управляемого кода, вы не можете правильно инициализировать CLR.
Обработчик необработанных исключений по умолчанию, устанавливаемый Windows, всегда будет запускать WerFault.exe, средство сообщения об ошибках Windows. Это можно отключить, но это системная настройка. Ожидать, что это сделает пользователь или администратор, нереально. Только после запуска WER отладчик JIT получит на него шанс.
Я рекомендую более простой подход, который также намного более избирателен. Используйте класс Process, чтобы запустить интересующую вас программу. Когда происходит событие Exited, используйте свойство ExitCode, чтобы узнать, как оно завершилось. Любое отрицательное значение является верным признаком того, что процесс умер при необработанном исключении, код завершения соответствует коду исключения. Вы можете использовать класс EventLog, чтобы прочитать сообщение о событии, которое WER записывает в журнал событий Windows. И вы можете перезапустить его так же, как вы его начали.