我正在维护一个旧应用程序,其中用户配置存储在注册表中。卸载时留下。我现在正在用 WiX 重写安装程序。
如果注册表中没有默认值,安装程序应在注册表中添加一个默认值,否则应保留现有值。
我正在考虑如何在 WiX 中做到这一点。而我想出的解决方案有些繁琐:
<Property Id="MY_PROPERTY">
<RegistrySearch Root="HKLM" Key="SOFTWARE\MyProduct" Name="MyProperty" Type="raw" />
</Property>
<CustomAction Id="ca.SetDefaultValue" Property="MY_PROPERTY" Value="DefaultValue" />
<InstallExecuteSequence>
<Custom After="RegistrySearch" Action="ca.SetDefaultValue">Not MY_PROPERTY</Custom>
</InstallExecuteSequence>
<Component Id="c.Registry">
<RegistryValue Root="HKLM" Key="SOFTWARE\MyProduct" Name="MyProperty" Type="string" Value="[MY_PROPERTY]" />
</Component>
因此,请进行注册表搜索以查找旧值。如果未设置,则使用计划的自定义操作设置为默认值。然后“像往常一样”创建值。
谁能想出一个更顺畅的方法来做到这一点?
请注意,我不能使用方便的变量,Installed
因为值可能在那里,被以前的、现在已卸载的版本留下。