卸载时,Wix会删除multiString注册表项中的单个值

时间:2011-09-04 07:35:26

标签: windows installer wix

我的安装程序必须将值附加到现有的多字符串注册表项(HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ LSA \ Notification Packages):

<RegistryKey Id='RegistryEntry' Root='HKLM' Key='SYSTEM\CurrentControlSet\Control\Lsa' Action="createAndRemoveOnUninstall">
    <RegistryValue Type='multiString' Name='Notification Packages' Value='p1' Action='append'/>
</RegistryKey>

问题是,在卸载时,它正在删除整个键:HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ LSA ie。 LSA下的所有值都被删除了,有什么方法可以删除我附加的值(只有p1)并保留现有值?

1 个答案:

答案 0 :(得分:2)

WiX的<RegistryKey>元素的文档说(强调我的):

  

createAndRemoveOnUninstall

     

安装父组件时,如果不存在,则创建密钥   然后在父项时删除包含其所有值和子项的键   组件已卸载。请注意,此值仅在您的时候有用   程序会在此键下创建其他值或子键   想要卸载以删除它们。 MSI已删除所有值和   它创建的子键,因此该选项只会增加额外的开销   卸载

Additional evidence表明上述行为适用于多字符串值:安装程序引擎将自动删除卸载时附加的值,并保留安装前存在的值。

因此,使用create代替createAndRemoveOnUninstall可以做您想做的事情:

<RegistryKey Id="RegistryEntry" Root="HKLM"
             Key="SYSTEM\CurrentControlSet\Control\Lsa"
             Action="create">
    <RegistryValue Type="multiString" Name="Notification Packages"
                   Value="p1" Action="append" />
</RegistryKey>
相关问题