如何在WiX中创建条件属性? (几乎像If-Then)

时间:2009-01-26 15:54:46

标签: installer wix

我有一个安装了一些EXE文件的WiX项目。一个是'Main'可执行文件,其他是支持帮助诊断问题的程序。

主要可执行文件是可选的,支持程序将自行运行。通常,最终用户将安装第三方程序而不是我的主要可执行文件。

在WiX安装程序结束时,我希望有一个“启动程序”复选框,一旦安装程序关闭,它就会运行程序。

我可以根据INSTALLLEVEL属性隐藏复选框,但这只会根据用户是选择“典型”还是“完成”安装而更改。我想根据是否安装了主要的可执行文件功能来隐藏它。

这样的事情是理想的:

<Feature Id='MainProgram' Title='MainExe'
         Description='This application stores and displays information from our hardware.'
         ConfigurableDirectory='INSTALLDIR' Level='4'
         AllowAdvertise='no'>
    <ComponentRef Id='MainExecutable' />
    <ComponentRef Id='SQLLibrary' />
    <ComponentRef Id='ProgramIcon' />
    <ComponentRef Id='RemovePluginsFolder'/>
    <Property Id='ShowFinalCheckbox'>1</Property> #<--This won't work, but I'd like it to.
</Feature>

3 个答案:

答案 0 :(得分:10)

SetProperty元素可用于在操作之前或之后更改Property的值。要根据可执行文件的安装状态设置值,我将使用Conditional Statement Syntax in MSI SDK中记录的组件状态的组合。你将不得不玩这个例子,但我认为这会让你接近。

<SetProperty Id="ShowFinalCheckBox" Value="1" After="CostFinalize">?MainExecutableComponent&gt;2 OR $MainExecutableComponent&gt;2</SetProperty>

上面的MSI SDK链接中解释了所有的魔术。

答案 1 :(得分:1)

对于WiX 2,您可以使用&amp; Feature查看是否安装了该功能:

<Dialog Id="ExitDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
    <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17"
             Default="yes" Cancel="yes" Text="Finish">
      <Publish Event="EndDialog" Value="Return">1</Publish>
      <Publish Event="DoAction" Value="LaunchFile">(NOT Installed) AND (LAUNCHPRODUCT = 1) AND (&amp;MainExecutable = 3)</Publish>
    </Control>
    <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="Cancel" />
    <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
    <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="Back" />
    <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
      <Text>Click the Finish button to exit the Wizard.</Text>
    </Control>
    <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
    <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
      <Text>{\VerdanaBold13}Completing the [ProductName] Wizard</Text>
    </Control>
    <Control Id="Launch" Type="CheckBox" X="135" Y="120" Width="150" Height="17"
             Property="LAUNCHPRODUCT" CheckBoxValue="1">
      <Text>Launch [ProductName]</Text>
      <Condition Action="hide">
        NOT (&amp;MainProgramFeature = 3)
      </Condition>
    </Control>
  </Dialog>

这样,您可以隐藏对话框并使用相同的条件来启动程序(无论复选框的初始状态如何)。

答案 2 :(得分:0)

手册中已有详细记录, How To: Run the Installed Application After Setup