wixtoolset:合并c ++运行时msm破坏目录结构

时间:2018-07-23 07:32:28

标签: windows-installer wix3.5

我将crt合并了(来自<产品>):

<DirectoryRef Id="TARGETDIR" >
      <Merge Id = "Microsoft_VC100_CRT_x64.msm" FileCompression = "yes" Language = "1033" SourceFile = "..\\..\\..\\..\\..\\..\\..\\external\\tools\\systemsetups\\merge_modules\\Microsoft_VC100_MFC_x64.msm" DiskId = "1" />
      <Merge Id = "Microsoft_VC110_CRT_x64.msm" FileCompression = "yes" Language = "1033" SourceFile = "..\\..\\..\\..\\..\\..\\..\\external\\tools\\systemsetups\\merge_modules\\Microsoft_VC110_MFC_x64.msm" DiskId = "1" />
      <Merge Id = "Microsoft_VC120_CRT_x64.msm" FileCompression = "yes" Language = "1033" SourceFile = "..\\..\\..\\..\\..\\..\\..\\external\\tools\\systemsetups\\merge_modules\\Microsoft_VC120_CRT_x64.msm" DiskId = "1" />
      <Merge Id = "Microsoft_VC140_CRT_x64.msm" FileCompression = "yes" Language = "1033" SourceFile = "..\\..\\..\\..\\..\\..\\..\\external\\tools\\systemsetups\\merge_modules\\Microsoft_VC140_MFC_x64.msm" DiskId = "1" />
    </DirectoryRef >
    <Feature Id="Merge" Title="Merge" Absent="allow" Level="1">
      <MergeRef Id="Microsoft_VC100_CRT_x64.msm"/>
      <MergeRef Id="Microsoft_VC110_CRT_x64.msm"/>
      <MergeRef Id="Microsoft_VC120_CRT_x64.msm"/>
      <MergeRef Id="Microsoft_VC140_CRT_x64.msm"/>
    </Feature>

但是光因奇怪的错误而失败:

: error LGHT0204 : ICE30: The target file marked.js is installed in [CommonAppDataFolder] by two different components on an LFN system:

尝试将所有文​​件安装到根(CommonAppDataFolder)文件夹中,忽略文件夹结构。但是,如果我删除合并代码,则安装程序将编译而没有错误。所有安装到权限目录中的文件。看起来像“合并”元素打破了文件夹结构。任何想法如何解决? 以及如何查找用于crt更新的msm文件,例如crt 2015 update 3的msm?

1 个答案:

答案 0 :(得分:0)

vcredist_x64.exe As stated before我建议您在此运行时使用可执行文件,而不是合并模块,但我认为您不允许这样做出于某种原因。

原因 :我想您应该调查确切的实际问题是什么,但是来自合并模块的ICE错误和警告是一种非常普遍的现象,通常您可以不能修复它们(合并模块之间的一致性错误,而不是您自己的设置组件和合并模块之间的一致性错误-后者是您可以修复的问题)。许多人最终压制了错误消息,以允许其生成过程“正确”运行。至少,您应该在编译的MSI中搜索marked.js,看看有多少次发生以及它们的安装位置。

可重定向目标合并模块 :某些merge modules中具有可重定向目标目录。如果可以帮助的话,我永远不会使用这样的合并模块,因此我无法完全掌握细节。 Merge Element。还有a rough idea from Github.com。如果需要它们,请确保已设置它们。不幸的是,我不知道它们是否是。

抑制错误 :我只是将您发送给另一个答案,而不是尝试写很多关于ICE抑制的文章,而我没有太多的实践经验: How do I suppress ICE errors from merge modules。请检查该链接中的所有答案。 Arnson是WiX开发人员-不确定他的答案是否需要更新-也许他描述的功能现在存在?该屏幕快照将向您展示如何从Visual Studio中执行此抑制。仅抑制单个ICE错误和警告,请勿全部禁用。

Light.exe :如果您不使用Visual Studio,那么我相信command line switch for light.exe is: -sice:<ICE>在通过命令行进行编译时会达到相同的效果。 Rough idea from github.com


某些链接