gpt4 book ai didi

c# - 当应用程序退出时终止进程外 dll ('dllhost.exe' 'COM Surrogate' 的最佳方法?

转载 作者:行者123 更新时间:2023-11-30 15:18:23 25 4
gpt4 key购买 nike

我正在使用“DllSurrogate”方法允许 64 位 C# exe 与 32 位 C# dll 对话。Hosting a .NET DLL as an Out-Of-Process COM Server (EXE) 中描述了该方法.

当应用程序运行一个名为“dllhost.exe *32”的额外进程时,任务管理器中会自动显示一个名为“COM Surrogate”的描述。这是应用程序和 32 位 dll 之间的链接。

我遇到的问题是,当应用程序退出时,这个进程没有被杀死。有人可以建议推荐的处理方法吗?

我可以找到进程并在我的应用程序关闭时终止它,但我需要确保:

  • 这是我的“COM 代理”,不属于另一个应用程序。
  • 它没有被我的应用程序的另一个正在运行的实例使用。

我的应用程序和我可以检查的这个过程之间是否有更直接的联系?

最佳答案

拒绝终止的 COM 代理通常表示对尚未释放的 CoClass 或资源的未完成引用。您可以通过求助于 ReleaseComObject 来执行发布。或 FinalReleaseComObject .但是,在使用此方法时,您应该了解相关风险,如所述 here .

如果您除了手动终止 COM 代理之外仍然找不到其他方法,则需要枚举计算机上的所有 dllhost.exe 进程。提取每个候选人的命令行并查找 /ProcessId 参数。如果它与您的 CoClassGUID 相匹配,那么您就找到了匹配项。

关于c# - 当应用程序退出时终止进程外 dll ('dllhost.exe' 'COM Surrogate' 的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43979533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com