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

问题描述 投票:0回答:1

我正在使用“DllSurrogate”方法来允许 64 位 C# exe 与 32 位 C# dll 对话。 该方法在进程外 COM 服务器演示中进行了描述。

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

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

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

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

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

c# process com com+
1个回答
5
投票

COM 代理拒绝终止,通常表示对尚未释放的

CoClass
或资源的未完成引用。您可以通过使用
ReleaseComObject
FinalReleaseComObject
来强制释放。但是,使用此方法时,您应该了解相关风险,如此处所述。

如果除了手动终止 COM 代理之外您仍然没有其他方法,则需要枚举计算机上的所有

dllhost.exe
进程。提取每个候选者的命令行并查找
/ProcessId
参数。如果它与您的
GUID
CoClass
匹配,那么您就找到了匹配项。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.