4

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

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

在 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>
4

3 回答 3

10

SetProperty 元素可用于在操作之前或之后更改属性的值。要根据可执行文件的安装状态设置值,我将使用MSI SDK 中条件语句语法中记录的组件状态组合。您将不得不使用这个示例,但我认为这会让您接近。

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

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

于 2009-01-26T16:48:41.130 回答
1

对于 WiX 2,您可以使用 &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>

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

于 2009-01-26T18:06:49.147 回答
0

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

于 2009-06-23T11:27:55.020 回答