【发布时间】:2010-10-25 10:24:30
【问题描述】:
我们目前正在将构建脚本从 3.0 升级到 3.5,并在此过程中修复了一堆旧的 ICE 错误。我已经阅读了许多文章,但对于使用伴随文件的最佳方法通常是什么感到有些困惑。
现在,假设文件 A.manifest 是 A.exe 的伴随文件...
最初:我们的旧版本将 2 个文件分解为 2 个组件:
<Component Guid="*" Id="A.exe" SharedDllRefCount="yes">
<File Id="..." KeyPath="yes" Source="A.exe"/>
</Component>
<Component Guid="*" Id="A.exe.manifest" SharedDllRefCount="yes">
<File CompanionFile="A.exe" Id="..." Source="A.exe.manifest"/>
</Component>
触发ICE54:警告组件'A.exe.manifest'使用文件'A.exe.manifest'作为其KeyPath,但文件的版本由文件'A.exe'提供 ,所以我想这显然是错误的。
第一种方法:所以我尝试将 KeyPath=yes 添加到同伴的目录中:
<Component .../>
<Component Guid="*" Id="A.exe.manifest" SharedDllRefCount="yes" KeyPath="yes">
<File CompanionFile="A.exe" Id="..." Source="A.exe.manifest"/>
</Component>
这会抑制警告,但在 Orca 中组件的 KeyPath 列显示为空白,所以我怀疑它是否正确?
第二种方法:接下来我尝试组合组件:
<Component Guid="*" Id="A.exe" SharedDllRefCount="yes"> <!-- GUID is wrong! -->
<File Id="..." KeyPath="yes" Source="A.exe"/>
<File CompanionFile="A.exe" Id="..." Source="A.exe.manifest"/>
</Component>
但似乎允许 WiX 在此处自动生成 GUID 是行不通的。但是,如果我手动生成 GUID,每次我们构建它都会在升级时破坏组件规则!我们实际上部署了很多伴随文件,因此生成每个组件的哈希并永久存储它也可能不可行。对每个伴随文件使用虚拟注册表项也是如此。
TLDR:这两种方法中哪一种实际上是 WiX 中更好的做法?
【问题讨论】:
标签: wix windows-installer wix3