将激活上下文API与不同位置的许多dll一起使用



我在运行于位置a的.Net客户端中使用Activation Context API,通过在ACTCTX中传入位置B,在WS2008上的位置B(与a完全不同的位置,而不是同一台计算机上的兄弟/子代等)加载COM组件,并且运行正常。

然而,我现在需要对另一个COM dll做同样的事情,它又依赖于位于完全不同位置的几个.Net COM程序集。

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

我试图做的事情可能吗?也就是说,是否可以使用激活上下文api将多个COM组件加载到不同的不相关目录中?

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

最新更新