Как изолировать сбой неуправляемого кода в .Net Process - PullRequest
1 голос
/ 18 ноября 2011

. Консольное приложение .Net зависит от COM-объектов, которые могут время от времени падать очень непредсказуемым образом.Приложение просто закрывается без всякой причины: без журналов, без исключений (блок catch вообще не работает), без журналов событий, ничего не происходит об ошибке.

Как изолировать собственные сбои?Спасет ли меня подход AppDomain?

Заранее спасибо!

1 Ответ

1 голос
/ 18 ноября 2011

Вы пробовали RuntimeCompatibilityAttribute.WrapNonExceptionThrows ?

В качестве альтернативы, блок перехвата без типа должен перехватывать не соответствующие CLS исключения , то есть:

try
{
    // Code here.
    // Maybe a COM call here.
}
catch(Exception ex)
{
    // Managed exceptions.
}
catch
{
    // non CLS-compliant exceptions.
}

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

В качестве альтернативы вы можете использовать COM-объекты в отдельном процессе и использовать межпроцессное взаимодействие между ними.Это изолировало бы проблемный код в его собственный процесс, который затем можно будет перезапустить / использовать по мере необходимости, без остановки основного процесса.

...