基于注册表搜索的对话序列

时间:2017-01-20 01:03:16

标签: wix windows-installer

我尝试做的是,如果在计算机上找不到某个注册表值,系统会向他们显示一个自定义对话框,他们可以选择要添加的值。问题是当他们选择该值并单击“下一步”,然后单击“返回”,因为与该注册表相关的属性已经填充,除非他们重新运行安装程序,否则将不再显示自定义对话框。我希望我已经足够清楚了,这里是代码的片段。

<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>

1 个答案:

答案 0 :(得分:1)

您需要将注册表搜索的结果保存到两个属性中,并将其中一个绑定到UI以供用户编辑,另一个用作互斥控件事件的条件。这样,如果从两个空开始,则会显示对话框,然后当用户将数据输入一个时,另一个仍然为空,并且仍然会显示对话框。

BTW我喜欢抛弃不需要的CDATA并使用PROPERTY和Not PROPERTY。我觉得它更容易阅读。

相关问题