我尝试做的是,如果在计算机上找不到某个注册表值,系统会向他们显示一个自定义对话框,他们可以选择要添加的值。问题是当他们选择该值并单击“下一步”,然后单击“返回”,因为与该注册表相关的属性已经填充,除非他们重新运行安装程序,否则将不再显示自定义对话框。我希望我已经足够清楚了,这里是代码的片段。
<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>
答案 0 :(得分:1)
您需要将注册表搜索的结果保存到两个属性中,并将其中一个绑定到UI以供用户编辑,另一个用作互斥控件事件的条件。这样,如果从两个空开始,则会显示对话框,然后当用户将数据输入一个时,另一个仍然为空,并且仍然会显示对话框。
BTW我喜欢抛弃不需要的CDATA并使用PROPERTY和Not PROPERTY。我觉得它更容易阅读。