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,使用属性而不是属性。我认为它更容易阅读