Как определить выход процесса из DLL в С#

У меня есть приложение WPF, которое вызывает функции внутри родной DLL (написано на С++). Это функция в .DLL иногда делает Process Exit, который убивает приложение WPF.

Пример:

WPF App:
.....
[DllImport("native.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
private static extern void NativeMethod();
.....
void CallFunction()
{
 //Call the native function
 NativeMethod();
}
....

Внутри NativeMethod есть выход, и я не могу изменить исходный код .dll. Кто-нибудь знает способ захвата этого выхода в DLL из .NET-кода?

Спасибо заранее,

2 ответа

AppDomain.ProcessExitOk, проблема с использованием AppDomain заключалась в том, что они работают только с сборками .NET:( Поэтому мне пришлось создать сборку, которая загружает мою собственную DLL через P/Invoke. После этого я мог бы загрузить сборку в другой AppDomin и вызывать функции встроенного DLL файла .dll. Я захватываю событие AppDomain.ProcessExit из AppDomain, и я мог бы захватить выход;).

Спасибо aiampogi за идею;)


В верхней части моей головы, единственное, что я могу придумать, это загрузить DLL в домен процесса/приложения (больше на appdomain), затем вызвать этот метод и зарегистрировать событие ProcessExit, чтобы обработать его должным образом.

Я могу попытаться сделать это позже, но я просто не уверен, что вы можете вызывать статические методы в appdomain или вызывать метод несериализованного класса в appdomain.

licensed under cc by-sa 3.0 with attribution.