修改/添加并排装配搜索序列

时间:2017-10-13 15:51:01

标签: c++ side-by-side winsxs

这个问题有点类似于这个,除了一点点扭曲: Can I modify the side-by-side assembly search sequence?

我们有几种不同语言的软件,它们在运行时相互通信。为实现这一目标,我们使用免注册COM激活加载了.NET COM对象。这很好用。我们使用的一些语言无法加载COM,因此我们制作了一个C ++ Wrapper DLL,它使用ACTCTX从其嵌入的清单中激活COM。也运作良好。

但是现在,我们有一个案例,我们的C ++包装器是由一个不是我们的应用程序(让我们称之为运行时)运行的代码加载的,我们的应用程序是位于其他地方。我们宁愿将COM对象部署在与部署应用程序相同的位置,而不是在运行时应用程序旁边。

并不重要,因为概念保持不变,但是跑步者是FourJ的Genero(fgl.exe),调用我们的C ++包装器的代码是.42m文件。跑步者(fgl.exe)与Genero一起安装,默认情况下安装在Program Files \ FourJs中,我们的应用程序位于另一个目录中,其名称为:Program Files \ MyCompany

这类似于您使用Java获得的内容。在一个地方运行,在其他地方申请。

所以在我们的例子中,我们的.42m正确加载C ++ Wrapper,包装器正确地激活COM(与我们的.42m和包装器位于同一目录中)但是一旦我们尝试实例化一个对象,我们得到一个& #34; 80070002"找不到文件错误。

我已经读过了 Assembly Searching Sequence并使用Process Monitor注意到所描述的行为。

所以会发生什么,因为最终它正在运行的fgl.exe,Windows并排加载器会查看:

  1. C:\ Program Files(x86)\ FourJs \ fgl \ gen2.50 \ bin \ MyCom.dll
  2. C:\ Program Files(x86)\ FourJs \ fgl \ gen2.50 \ bin \ MyCom.dll \ MyCom.dll
  3. 虽然我的COM真的在C:\ Program Files(x86)\ MyCompany \ MyApplication \ MyCom.dll

    为了确认行为,我们将COM复制到与fgl.exe相同的目录中,并且正如预期的那样,它可以正常工作。

    所以我希望能够在我的激活上下文中添加搜索目录,以便它在我的部署目录中查找此DLL。 这可能吗 ? 如果我找不到其他解决方案,我们最终会在该目录中部署我们的COM,但这不是正确的。

    由于

0 个答案:

没有答案