4

我在位置 A 运行的 .Net 客户端中使用 Activation Context API 在 WS2008 上的位置 B(与 A 完全不同的位置,而不是同一台机器上的兄弟/后代等)加载一个无注册的 COM 组件通过在 ACTCTX 中的位置 B 传递,它工作正常。

但是,我现在需要对另一个 COM dll 执行相同的操作,该 COM dll 又依赖于位于完全不同位置的几个 .Net COM 程序集。

我已将依赖的 .Net 程序集添加到清单中,并将清单和 COM dll 放在位置 B,但我必须将依赖的 .Net 程序集放在位置 A(客户端运行的位置)以使其工作。实际上,他们将生活在与位置 A 和位置 B 完全不同的目录中。

我正在尝试做的事情是否可能,即是否可以使用激活上下文 api 在不同的不相关目录中加载多个 COM 组件?

4

1 回答 1

5

.NET 像本机 COM 一样查看活动和进程激活上下文以发现无注册元数据(<clrClass>等)。然而,与原生 COM 不同的是,它不使用激活上下文中包含的信息来确定实际文件的位置。在那里,我相信它只查看 GAC,然后仅查看客户端 EXE 旁边的文件位置。您可能可以使用 Sysinternals Procmon 确认这一点。我想您可以尝试 Hans 建议的解决方法或手动将所需的程序集预加载到您的流程中,看看是否可行;我没有尝试过,因为在我的场景中,客户端 exe 是我无法控制的本机 exe。

于 2011-06-30T08:29:00.873 回答