1

我想将合并模块文件解析到两个不同的位置。可能吗?

    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="MergeRedirectFolder">

        <Component Id="LoggerClient" Guid="*">
          <File Id="log4net" Name="log4net.dll" Source="..\..\_Release\log4net.dll" KeyPath='yes' />
          <File Id="LoggerLibrary" Name="LoggerLibrary.dll" Source="..\..\_$(var.Configuration)\LoggerLibrary.dll" />
          <File Id="app.config" Name="app.config.xml" Source="..\..\_Release\app.config.xml" />
          <File Id="msvcr110.dll" Name="msvcr110.dll" Source="c:\windows\sysWoW64\msvcr110.dll" />
        </Component>

  </Directory>
    </Directory>
</Module>



<Merge Id ="MergeModule.msm" Language ="!(loc.Lang)" SourceFile ="_$(var.Configuration)\MergeModule.msm" DiskId ="1" />

我希望将第二个文件复制到与其他文件不同的文件夹中。

4

4 回答 4

1

有一个概念,它被称为可重定向的合并模块。我避免使用它——这个概念对我来说似乎不合适。我没有尝试用 Wix 制作一个。

我认为您可以将 Wix 包含文件(简单示例)与新的自动生成的组件 guid结合起来,通过在适当的地方添加 Include 语句来可靠地部署此类重复文件。在这种情况下,您不能对 guid 进行硬编码,而是让它们由 Wix 编译器和链接器自动生成。

还可以阅读WixLibs(Wix 库文件):http ://robmensching.com/blog/posts/2008/10/10/what-are-.wixlibs-and-why-would-you-use-them/

蜡文件;http://wixtoolset.org/documentation/manual/v3/overview/files.html

于 2015-05-05T09:51:37.543 回答
0

合并模块用于安装通用运行时真正共享的文件。通常是 C 和 C++ 运行时以及其他类似的库,这些库应该在所有应用程序的最新版本中都可用。

您的文件看起来像是您的应用程序文件夹的一部分,msvcr110.dll除外,您应该将其删除并允许从系统文件夹中加载

如果其余文件没有按机器注册(例如 COM 或 COM Interop),您可以将它们复制到多个文件夹中而不会受到干扰,是的,但是为什么不从您自己的应用程序文件夹结构内的共享位置加载它们呢?

  • %ProgramFiles%\我的公司\我的共享运行时
  • %ProgramFiles%\我的公司\我的应用\我的应用 1\
  • %ProgramFiles%\我的公司\我的应用\我的应用 2\

您“拥有”这些示例文件夹,您可以在此处部署任何您喜欢的东西。共享的系统文件夹并非如此。您可以为应用程序之间的共享组件创建自己的合并模块到“我的共享运行时”中,并使您的应用程序知道共享位置“....\MySharedRuntimes\”

于 2015-05-05T08:23:31.197 回答
0

这取决于您所说的不同位置的含义。您可以构建一个包含 4 个文件的合并模块,每个文件都在自己的组件和目录中。可以去 CommonFilesFolder;另一个到 SystemFolder;另一个……你明白了。因此,如果您在自己的目录中使每个文件成为自己的组件,这可能很容易。但是,您将它们全部放在 TARGETDIR 下,因此您走错了方向。您只需定义其他目录以及其他组件和文件,您可能就完成了,除非问题比表面上看到的要多。

于 2015-05-05T18:49:40.400 回答
-1

我建议私下与我联系,就 MSI、组件规则、合并模块和文件集理论进行 30-60 分钟的对话。写得太多了。简而言之,我会建议更多的合并模块。

于 2015-05-05T15:20:13.530 回答