【问题标题】:How to detect a Process Exit from a DLL in C#如何在 C# 中检测 DLL 中的进程退出
【发布时间】:2013-05-28 20:10:15
【问题描述】:

我有一个 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 中此出口的方法吗?

提前致谢,

【问题讨论】:

  • 除了一件事,您无能为力。扔掉 DLL。
  • 嗨汉斯,有一些解决方案,即使它们并不完美......我可以创建一个简单的控制台应用程序,它具有 .dll 的代理,因此会杀死控制台应用程序进程而不是主进程过程...所以有一些解决方案..

标签: c# dll process exit


【解决方案1】:

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

感谢aiampogi的想法;)

【讨论】:

    【解决方案2】:

    在我的脑海中,我唯一能想到的就是将该 DLL 加载到进程/应用程序域(更多关于应用程序域)然后调用该方法并注册 ProcessExit 事件以正确处理它。

    我以后可能会尝试这样做,但我只是不确定您是否可以在 appdomain 上调用静态方法或在 appdomain 上调用非序列化类方法。

    【讨论】:

    • 嗨aiampogi,感谢您的反馈,您有任何代码可以开始吗?我会继续关注你的想法,因为它看起来更好。谢谢
    • 认为你已经做到了。恭喜!很高兴能帮到你。
    猜你喜欢
    • 2012-11-10
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多