Windowsinstaller中的Autogen guid(*)会导致ICE08错误

时间:2013-04-23 13:51:08

标签: windows build installer wix windows-installer

我的wxs文件中的两个组件标签如下

<Component Id="Comp.Comp1" Guid="*" >
<Condition><![CDATA[VersionNT < 602]]></Condition>
<File Id="File1" Source="$(Dir1)\TestFile.dll" />
 </Component>

<Component Id="Comp.Comp2" Guid="*" >
<Condition><![CDATA[VersionNT >= 602]]></Condition>
<File Id="File2" Source="$(Dir2)\TestFile.dll" />
 </Component>

但是我收到如下错误

ICE08: Component: Comp.Comp2 has a duplicate GUID: {2963D8E7-CBEC-50C8-AF4B-65E895FE3283}   

如果我给出了一个autogen guid值“*”

,我是如何得到这个错误的

谢谢,

2 个答案:

答案 0 :(得分:8)

Component元素的star-GUID根据文件的目标位置计算稳定的GUID。 GUID的稳定性对于将来的更新(尤其是修补)至关重要。它在许多情况下都很好用,但将文件放在完全相同的位置的互斥组件不是一个。在这种情况下,您需要至少明确设置一个Component/@Guid s。

在上述情况下,您可以执行以下操作:

<Component Id="Comp.Comp1" Guid="*" >
    <Condition><![CDATA[VersionNT < 602]]></Condition>

    <File Id="File1" Source="$(Dir1)\TestFile.dll" />
</Component>

<Component Id="Comp.Comp2" Guid="PUT-GUID-HERE">
    <Condition><![CDATA[VersionNT >= 602]]></Condition>

    <File Id="File2" Source="$(Dir2)\TestFile.dll" />
</Component>

从技术上讲,你可以在这种情况下抑制ICE08错误,因为组件是互斥的,但我个人会在抑制ICE之前执行上述操作。恕我直言,最好不同的文件最终都有不同的GUID。

答案 1 :(得分:1)

您没有显示此代码段(目录元素)的上下文,但对我来说,似乎您要将同一文件名安装到同一目录两次。这是违反组件规则的行为。 “来源”不同但条件相同:!VersionNT&gt; = 602。