我正在使用“DllSurrogate”方法来允许 64 位 C# exe 与 32 位 C# dll 对话。 该方法在进程外 COM 服务器演示中进行了描述。
当应用程序运行一个名为“dllhost.exe *32”的额外进程时,会自动显示在任务管理器中,并带有描述“COM Surrogate”。 这是应用程序和 32 位 dll 之间的链接。
我遇到的问题是,当应用程序退出时,这个进程没有被杀死。 有人可以建议处理这个问题的推荐方法吗?
我可以找到该进程并在我的应用程序关闭时杀死它,但我需要确保:
我的应用程序和此流程之间是否有更直接的链接可供我检查?
COM 代理拒绝终止,通常表示对尚未释放的
CoClass
或资源的未完成引用。您可以通过使用 ReleaseComObject
或 FinalReleaseComObject
来强制释放。但是,使用此方法时,您应该了解相关风险,如此处所述。
如果除了手动终止 COM 代理之外您仍然没有其他方法,则需要枚举计算机上的所有
dllhost.exe
进程。提取每个候选者的命令行并查找 /ProcessId
参数。如果它与您的 GUID
的 CoClass
匹配,那么您就找到了匹配项。