Wix 基于注册表搜索的对话框序列
我试图做的是,如果在计算机上找不到某个注册表值,则会向他们显示一个自定义对话框,他们可以在其中选择要添加的值。问题是,当他们选择该值并单击“下一步”,然后单击“上一步”时,由于与该注册表相关的属性已填充,除非重新运行安装程序,否则将不再显示自定义对话框。我希望我足够清楚,下面是代码片段Wix 基于注册表搜索的对话框序列,wix,windows-installer,Wix,Windows Installer,我试图做的是,如果在计算机上找不到某个注册表值,则会向他们显示一个自定义对话框,他们可以在其中选择要添加的值。问题是,当他们选择该值并单击“下一步”,然后单击“上一步”时,由于与该注册表相关的属性已填充,除非重新运行安装程序,否则将不再显示自定义对话框。我希望我足够清楚,下面是代码片段 <Property Id="REG_VAL" Value="NoValueFound"> <RegistrySearch ... /> </Property> <C
<Property Id="REG_VAL" Value="NoValueFound">
<RegistrySearch ... />
</Property>
<Component ...>
<RegistryValue Value="[REG_VAL]".../>
</Component>
<UI...>
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="ChooseValueDlg">
<![CDATA[(REG_VAL="NoValueFound")]]>
</Publish>
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">
<![CDATA[(REG_VAL<>"NoValueFound")]]>
</Publish>
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="ChooseValueDlg">
<![CDATA[(REG_VAL="NoValueFound")]]>
</Publish>
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">
<![CDATA[(REG_VAL<>"NoValueFound")]]>
</Publish>
</UI>
<UI>
<Dialog Id="ChooseValueDlg" ...>
<Control Id="rdoBtnGrp" Type="RadioButtonGroup" Property="REG_VAL" ...>
<RadioButtonGroup Property="REG_VAL">
<RadioButton Value="NoValueFound" .../>
<RadioButton Value="Value1" .../>
<RadioButton Value="Value2" .../>
</RadioButtonGroup>
</Control>
</Dialog>
</UI>
“NoValueFound”)]]>
“NoValueFound”)]]>
您需要将注册表搜索的结果保存到两个属性中,并将其中一个绑定到UI以供用户编辑,另一个用作互斥控制事件的条件。这样,如果一开始两个都为null,则会显示对话框,然后当用户向其中一个输入数据时,另一个仍然为null,并且对话框仍会显示
顺便说一句,我喜欢抛弃不必要的CDATA,使用属性而不是属性。我认为它更容易阅读