问题描述
|
我在运行于位置A的.Net客户端中使用激活上下文API,以在WS2008上的位置B(与A完全不同的位置,而不是同一台机器上的同级/后代等)中加载无注册限制的COM组件。通过传入ACTCTX中的位置B,它可以正常工作。
但是,我现在需要对另一个COM dll做同样的事情,而该DLL又依赖于生活在完全不同位置的几个.Net COM程序集。
我已将相关的.Net程序集添加到清单中,并将清单和COM dll放置在位置B中,但是我必须将相关的.Net程序集放置在位置A(客户端运行的位置)中,以使其正常工作。实际上,它们将位于与位置A和位置B完全不同的目录中。
我正在尝试做些什么,即是否可以使用激活上下文api将多个COM组件加载到不同的不相关目录中?
解决方法
.NET像本地COM一样,查看活动和进程激活上下文以发现无注册元数据(
<clrClass>
等)。但是,与本机COM不同,它不使用激活上下文中包含的信息来确定实际文件的位置。在那里,我相信它只会查看GAC,然后仅是客户端EXE旁边的文件位置。您可能可以使用Sysinternals Procmon进行确认。我想您可以尝试Hans建议的解决方法,或将所需的程序集手动预加载到您的过程中,看看是否可行;我没有尝试一下,因为在我的场景中,客户端exe是我无法控制的本机exe。