2013-04-25 170 views
2

我正在为一组医疗设备SW产品编写WiX安装程序,该产品必须安装在C:的根目录下的特定目录中。 IE没有“ProgramFolders”这些。WiX安装程序 - 从ComboBox设置ApplicationFolder

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

我有了一个组合框自定义欢迎对话框:

<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浏览器如果他们选择“基本设备1”,那么我需要将APPLICATIONFOLDER设置为C:\ BASEDEV1。如果他们选择Base dev 2,那么我们去C:\ BASEDEV2

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

我敢肯定我错过了简单的东西,但如果我的用户界面似乎正在运行后,我该如何设置我需要的目录?我的自定义操作目前的样子:

<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或模拟器) 之后下一个被按下时,根据组合框中的属性设置ApplicationFolder 安装到设置的应用程序文件夹中

任何帮助将非常感谢。

回答

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