WiX安装程序 - 从ComboBox设置ApplicationFolder

时间:2013-04-25 20:13:14

标签: wix

我正在为一组医疗设备SW产品编写WiX安装程序,这些产品必须安装在C:的根目录下的特定目录中。 IE no" ProgramFolders"对于这些。

它们在专用环境中运行,并已使用这些目录进行验证和验证。

我有一个自定义欢迎对话框,其中包含一个组合框:

    <Control Id="TypeCombo" Type="ComboBox" X="178" Y="162" Width="120" Height="20" Property="InstallChoiceResult" ComboList="yes" Sorted="no">
      <ComboBox Property="InstallChoiceResult">
        <ListItem Text="Base dev 1" Value="1"/>
        <ListItem Text="Base dev 2" Value="2"/>
        <ListItem Text="Base dev 3" Value="3"/>
        <ListItem Text="Base Simulator" Value="4"/>
      </ComboBox>
    </Control>

FSE的选择设置属性&#34; InstallChoiceResult&#34;。在他们点击下一步后,我需要根据他们的选择设置我的应用程序文件夹。 IE如果他们选择&#34; Base dev 1&#34;然后我需要将APPLICATIONFOLDER设置为C:\ BASEDEV1。如果他们选择Base dev 2,那么我们转到C:\ BASEDEV2

成为WiX的新手,我对这个序列感到不满。从Orca检查我的MSI看来,在成本计算发生之后,InstallUISequence就出现了。当我尝试使用一组自定义操作设置APPLICATION文件夹时,它会抱怨,因为它是一个目录,所以必须在CostFinalize之前设置它。

我确定我错过了一些简单的东西但是如果我的UI似乎在运行之后我怎么能设置我需要的目录呢?我的自定义操作目前看起来像:

<CustomAction Id="SetDev1" Property="APPLICATIONFOLDER" Value="C:\BaseDev1" Execute="immediate" />
<CustomAction Id="SetDev2" Property="APPLICATIONFOLDER" Value="C:\BaseDev2" Execute="immediate" />
<CustomAction Id="SetDev3" Property="APPLICATIONFOLDER" Value="C:\BaseDev3" Execute="immediate" />
<CustomAction Id="SetDevS" Property="APPLICATIONFOLDER" Value="C:\BaseDevS" Execute="immediate" />

<InstallUISequence>
  <Custom Action="SetDev1" Before="InstallDlg2">InstallChoiceResult=1</Custom>
  <Custom Action="SetDev2" Before="InstallDlg2">InstallChoiceResult=2</Custom>
  <Custom Action="SetDev3" Before="InstallDlg2">InstallChoiceResult=3</Custom>
  <Custom Action="SetDevS" Before="InstallDlg2">InstallChoiceResult=4</Custom>
</InstallUISequence>

我需要做的总体笑话基本上是这样的:

显示对话框(FSE选择1,2,3或模拟器) 按下next后,根据ComboBox中的属性设置ApplicationFolder 安装到设置ApplicationFolder

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用 SetDirectory 元素将目录值设置为APPLICATIONFOLDER。无需使用自定义操作并将目录值直接绑定到List项。使组合框属性为public(所有字母均为大写)。

<Control Id="TypeCombo" Type="ComboBox" X="142" Y="158" Width="120" Height="16" Property="INSTALLCHOICERESULT" ComboList="yes" Sorted="no">
    <ComboBox Property="INSTALLCHOICERESULT">
        <ListItem Text="Base dev 1" Value="C:\BaseDev1" />
        <ListItem Text="Base dev 2" Value="C:\BaseDev2" />
        <ListItem Text="Base dev 3" Value="C:\BaseDev3" />
        <ListItem Text="Base Simulator" Value="C:\BaseDevS" />
     </ComboBox>
</Control>

<SetDirectory Id="APPLICATIONFOLDER" Value="[INSTALLCHOICERESULT]" Sequence="execute" />