当应用程序退出时杀死进程外 dll ('dllhost.exe' 'COM Surrogate') 的最佳方法?

Ant*_*ers 5 c# com com+ process

我正在使用“DllSurrogate”方法来允许 64 位 C# exe 与 32 位 C# dll 对话。将.NET DLL 作为进程外 COM 服务器 (EXE) 托管中描述了该方法。

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

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

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

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

我的应用程序和此流程之间是否有更直接的链接可供我检查?

Aur*_*ora 5

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

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