Wix在卸载时删除multiStringregistry项中的单个值

我的安装程序必须将值附加到现有的多stringregistry项(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即。 在LSA下的所有值都被删除,是否有任何方法可以删除我附加的值(仅p1)并保留现有值?

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

createAndRemoveOnUninstall

如果缺少密钥,则在安装父组件时创建密钥,然后在卸载父组件时删除密钥及其所有值和子密钥。 请注意,只有当您的程序在此项下创建附加值或子项并且您想要卸载才能将其删除时,此值才有用。 MSI已经删除了它创建的所有值和子项,所以这个选项只是增加了额外的卸载开销

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

因此,使用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>