Поймать необработанное исключение, вызванное неуправляемым подпроцессом - PullRequest
1 голос
/ 28 января 2010

Используя объект System.Diagnostics.Process в C #, я запускаю неуправляемый exe-файл, который позже запускает еще один неуправляемый exe-файл.

2-й exe вызывает необработанное исключение, которое я хотел бы игнорировать моим приложением, но, похоже, не могу.

Я использую оператор try / catch при запуске первого процесса, но, похоже, он не улавливает исключение, вызванное 2-м процессом. Когда возникает исключение, отладчик точно вовремя уведомляет меня и останавливает мое приложение, пока я не нажму вручную «да», я хочу отладить или «нет». Затем моя заявка продолжается.

Отладчик JIT не имеет исходного кода для 2ndprocess.exe, который вызывает исключение. Таким образом, это не говорит мне, что является исключением. Меня не волнует, что это за исключение, я просто хочу знать, как его перехватить и игнорировать, чтобы мое приложение не останавливалось. К тому времени, когда возникает исключение, работа все равно выполняется.

Может кто-нибудь предложить какое-то понимание?

Ответы [ 2 ]

1 голос
/ 28 января 2010

Вы должны правильно обработать исключение во втором исполняемом файле. Ваша основная программа не поймает исключение, потому что она не выдает, а выполняет что-то, что есть.

Edit:

Есть ли у вас доступ к источнику второго процесса (который вызывает исключение)? Ваше приложение не должно просто падать. Если исключительный случай будет правильно обработан во втором процессе, у вас не будет этой проблемы в основном приложении.

Edit2:

Поскольку у вас есть доступ к источнику (с открытым исходным кодом), я рекомендую вам исправить ошибку. Это поможет вам двумя способами:

1) Ваша программа наконец заработает.
2) Вы можете сказать, что участвовали в проекте с открытым исходным кодом.

И, в качестве специального бонуса, вы получаете помощь в проекте, которым вы часто пользуетесь. Win / Win

1 голос
/ 28 января 2010

Поскольку вы используете process.start для фактического запуска приложения, приложение создает отдельный домен приложения. Я считаю, что захват исключения из этого приложения невозможен, так как более вероятно, что появится диалоговое окно JIT из-за этого сбойного процесса.

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

...