如何使Windows安装程序更新registrystring值(不是多string)中的列表?

我需要做一个安装程序,将不得不改变另一个应用程序(第三方)的registry。 另一个应用程序有一个REG_SZ(普通string,不是多string),用逗号分隔的值列表。 我的价值必须追加到该列表(并在卸载时删除)。

ListToUpdate(REG_SZ)=“val1,val2,val3,myval”

Windows安装程序是否有任何内置的工具来做到这一点? 如果是的话(我其实不相信),如何通过wix来使用它?

如果没有,wix本身是否有任何扩展可以为我们创build一些自定义操作? 还是我必须执行我自己的?

您可以执行注册表读取并获取属性的值。 然后用旧值和新值写入相同的注册表。 这是怎么做到的。

读旧的价值

<Property Id="OLDVALUE"> <RegistrySearch Id="TestReg" Root="HKLM" Key="Software\TestKey\TestKey2" Name="Test" Type="raw" /> </Property> 

写回注册表

 <Component Guid="A7C42303-1D77-4C70-8D5C-0FD0F9158EC4" Id="REGComponent" Directory="TEST"> <RegistryKey Root="HKLM" Key="Software\TestKey\TestKey2"> <RegistryValue Name="Test" Action="write" Value="[OLDVALUE], MyVal" Type="string" KeyPath="yes" /> </RegistryKey> </Component> 

如果您想在卸载时删除您的值,您可以编写一个自定义操作来执行此操作。 另外请确保msi应该以管理员模式运行,否则注册表将不会被修改。