当应用程序退出时,杀死进程外dll('dllhost.exe''COM代理')的最佳方法是什么?

时间:2017-05-15 12:26:17

标签: c# process com com+

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

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

我遇到的问题是,当应用程序退出时,此过程不会被终止。 有人可以提出建议的处理方法吗?

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

  • 这是我的'COM Surrogate',而不属于另一个App。
  • 我的应用程序的另一个正在运行的实例没有使用它。

我可以检查我的应用程序与此流程之间是否存在更直接的链接?

1 个答案:

答案 0 :(得分:3)

拒绝终止的COM代理通常表示对CoClass或资源的未完成引用,但尚未发布。您可以通过ReleaseComObjectFinalReleaseComObject强制执行此版本。但是,使用此方法时,您应该了解相关风险,如here所述。

如果您仍然没有看到除手动终止COM代理之外的其他方式,则您需要枚举计算机上的所有dllhost.exe进程。提取每个候选项的命令行并查找/ProcessId参数。如果它与GUID的{​​{1}}匹配,则表示您找到了匹配项。