2

我正在为一组必须安装在 C: 根目录下的特定目录中的医疗设备软件产品编写 WiX 安装程序。IE 没有针对这些的“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 的选择设置属性“InstallChoiceResult”。在他们点击下一步后,我需要根据他们的选择设置我的应用程序文件夹。IE 如果他们选择“Base dev 1”,那么我需要将 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

任何帮助将不胜感激。

4

1 回答 1

0

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

<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" />
于 2013-04-26T12:06:30.027 回答