2015-08-24 56 views
0

我在RTM下面的“Reg2015”组分,其中我忘了分配的keyPath:PYRO0243同时建立补丁

<DirectoryRef Id="INSTALLLOCATION"> 
<Component Id="Reg2015" Guid="{xxx}" Win64="no" > 
    <RegistryKey Root="HKLM" Key="SOFTWARE\Mine" > 
    <RegistryValue Name="RefCount" Value="1" Type="integer" /> 
    <RegistryValue Name="Name" Value="Mine" Type="string" Action="write" /> 
    </RegistryKey> 
</Component> 
... 
</DirectoryRef> 

为了制备贴片,我改变“引用计数”为“2”,并加入到修补WXS。

现在PYRO.EXE抱怨这样的:

error PYRO0243: Component 'Reg2015' has a changed keypath in the transform 'C:\Patch\Patch.Wixmst'. Patches cannot change the keypath of a component. 
error PYRO0260: Product '{xxx}': Table 'CreateFolder' has a new row 'INSTALLLOCATION/Reg2015' added. This makes the patch not uninstallable. 

我理解,因为没有“的keyPath”,它的keyPath默认为INSTALLLOCATION,但不知道该组件的ID被认为是一个目录。

(1)有人可以解释为什么吗?

(2)有什么办法可以传递PYRO错误吗?

(3)对于我的下一个主要版本,如果我添加“的keyPath”任何“RegistryValue”元素,如

<RegistryValue Name="RefCount" Value="1" Type="integer" KeyPath="yes" /> 

我应该能够在未来的补丁修改“引用次数”为2 ?

谢谢。

回答

0

我想WiX选择Refcount作为组件的关键路径 - 这就是文档所说的。 “如果组件或子注册表值或文件的KeyPath未设置为”是“,则WiX将按顺序查看Component下的子元素,并尝试自动选择其中一个作为关键路径。允许WiX自动选择关键路径可能是危险的,因为在组件下添加或删除子元素可能会不经意间导致关键路径发生更改,这可能会导致安装问题。“您可以通过查看MSO文件以查看内容组件表就是这样说的。

因此,更改keypath值可能导致该问题。将组件中的另一个注册表项(或创建一个新项)设置为关键路径会更好。