如何在C#中检测DLL的进程退出

时间:2013-05-27 09:25:53

标签: c# dll process exit

我有一个WPF应用程序,它调用本机DLL中的函数(用c ++编写)。 .DLL中的这个函数有时会执行一个杀死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的源代码。 任何人都知道从.NET代码中捕获DLL退出的方法吗?

提前致谢,

2 个答案:

答案 0 :(得分:3)

AppDomain.ProcessExitOk,使用AppDomain的问题是它们只适用于.NET程序集:(所以我必须创建一个程序集,通过P / Invoke加载我的本机DLL。一旦我有了,我可以加载程序集不同的AppDomin并调用本机.dll抛出托管.dll的函数。我从AppDomain捕获AppDomain.ProcessExit事件,我可以捕获退出;)。

感谢aiampogi的想法;)

答案 1 :(得分:1)

最重要的是,我唯一能想到的是将DLL加载到进程/应用程序域(更多地在appdomain上),然后调用该方法并注册ProcessExit事件以正确处理它。

我可能会在稍后尝试执行此操作,但我不确定您是否可以在appdomain上调用静态方法或在appdomain上调用非序列化类方法。