Wix - 基于单选按钮的有条件的功能安装

时间:2012-02-17 12:56:43

标签: wix

我目前正在学习WiX工具,为我工作的软件应用程序设置MSI软件包。

作为安装的一部分,我想要做的事情之一是提供一个特定文件的选择,我将要有一个带有单选按钮列表的对话框,允许用户选择必要的选项。

这是我正在使用的WXS文件

<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi' xmlns:iis='http://schemas.microsoft.com/wix/IIsExtension'>
  <Product Id='E22E3B45-CFA6-4F4E-9D37-AA95A3684522' Name='Test Install' Language='1033'
           Version='1.0.0.0' Manufacturer='Microsoft Corporation' UpgradeCode='E22E3B45-CFA6-4F4E-9D37-AA95A3684522'>
    <Package Description='Test Installer Package'
              Comments='Install Test'
              Manufacturer='Microsoft Corporation' InstallerVersion='200' Compressed='yes' />

    <Media Id='1' Cabinet='testinstall.cab' EmbedCab='yes' />

    <Directory Id='TARGETDIR' Name='SourceDir'>
      <Directory Id='dir_temp' Name='Temp'>
        <Component Id='component_dir_root1' Guid='A51094B8-552F-49C4-9E5C-36815D471913'>
          <File Id='file_readme.txt' Name='readme.txt' DiskId='1' Source='root/readme.txt' />
        </Component>
        <Component Id='component_dir_root2' Guid='A51094B8-552F-49C4-9E5C-36815D471914'>
          <File Id='file_readme2.txt' Name='readme2.txt' DiskId='1' Source='root/readme2.txt' />
        </Component>
      </Directory>
    </Directory>

    <Feature Id='feature_test' Title='Test Features' Level='1'>
      <Feature Id='feature_dir_root1' Level='1'>
        <ComponentRef Id='component_dir_root1' />
        <Condition Level="0"><![CDATA[RootType <> "1"]]></Condition>
      </Feature>
      <Feature Id='feature_dir_root2' Level='1'>
        <ComponentRef Id='component_dir_root2' />
        <Condition Level="0"><![CDATA[RootType <> "2"]]></Condition>
      </Feature>
    </Feature>

    <UI>
      <Property Id="DefaultUIFont">DlgFont8</Property>

      <Dialog Id="InstallDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
    <Control Id="Buttons" Type="RadioButtonGroup" X="20" Y="187" Width="330" Height="40" Property="RootType" />

        <Control Id="Install" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Text="Install">
          <Publish Event="EndDialog" Value="Return" />
        </Control>
      </Dialog>

      <RadioButtonGroup Property="RootType">
        <RadioButton Text="{\DlgFont8}Root 1"
          Value="1" X="5" Y="0" Width="250" Height="15" />
        <RadioButton Text="{\DlgFont8}Root2"
          Value="2" X="5" Y="20" Width="250" Height="15" />
      </RadioButtonGroup>

      <TextStyle Id="DlgFont8" FaceName="Tahoma" Size="8" />

      <InstallUISequence>
        <Show Dialog="InstallDlg" After="CostFinalize" />
      </InstallUISequence>
    </UI>

    <Property Id="RootType">2</Property>
  </Product>
</Wix>

因此,存在两个特征。每个对应于表示文件的单个组件。单选按钮链接到 RootType 属性,我想控制哪个功能安装。

对话框显示正常,如果我改变 RootType 的默认值,则在显示安装表单时始终会检查正确的单选按钮。但是,如果用户在安装期间选择了不同的单选按钮,则实际上与安装的文件没有任何不同。安装的文件始终是设置为 RootType 属性的初始值的文件。

在安装这些功能之前,还有其他事情要让单选按钮更新属性吗?

2 个答案:

答案 0 :(得分:3)

在显示对话框时,设置属性以影响INSTALLLEVEL的特征条件为时已晚。相反,您应该将Control Events放在对话框的Next(或类似)按钮上,使用AddLocal或Remove来控制是否安装了该功能。

答案 1 :(得分:2)

我几天都有完全相同的问题。我在网上发现了许多条件陈述的例子,总是遇到同样的问题。在阅读了迈克尔·乌尔曼的回答之后,我决定弄清楚他的意思是什么&#34; ...相反,你应该把控制事件放在对话框上的下一个(或类似的)按钮上使用AddLocal或Remove来控制是否安装该功能的按钮。&#34;

这里是:

不要将条件陈述放在要素中。摆脱它们。 而是检查按钮的控制中的单选按钮的值!在您的情况下,安装按钮。

一个例子:

      <Control Id="Install" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Text="Install">
        <!--Check button values here:-->
        <Publish Event="AddLocal" Value="ALL">1</Publish>
        <Publish Event="Remove" Value="feature_dir_root1">RootType = 1</Publish>
        <Publish Event="Remove" Value="feature_dir_root2">RootType = 2</Publish>
        <Publish Event="EndDialog" Value="Return" />
      </Control>

我找到了一个article,它解释了所有这些以及AddLocal发布事件。你也需要它,所以不要删除它!

再次,当按下Install按钮时,实际上会检查链接到单选按钮的值。基本上就是这样。

这确实会根据用户选择的单选按钮安装功能。希望有所帮助!