ИМХО, самый чистый вариант для запуска такого глючного exe-файла - запустить его, предоставив вашему процессу привилегии отладки над ним (вам, вероятно, придется явно вызывать CreateProcess
через P / Invoke с флагом DEBUG_PROCESS
в флагах создания процесса).) и затем обработать поток событий отладки, предоставленных WaitForDebugEvent
;всякий раз, когда вы получаете необработанное исключение последнего шанса, вы можете уведомить основной поток, завершить дочерний процесс (таким образом избегая обработчик исключений Windows по умолчанию) и перезапустить его при необходимости, во всех остальных случаях просто вызовите ContinueDebugEvent
чтобы программа работала нормально.
Обратите внимание, что указатель на "структуру события", предоставляемую WaitForDebugEvent
, может быть сложным для работы в C #.
edit : к счастью, похоже, что кто-то сделал хорошую управляемую оболочку для нативного API отладки, см. здесь .