2009-01-26 18 views
4

我有一個安裝幾個EXE文件的WiX項目。一個是'Main'可執行文件,另外一個是支持程序來幫助診斷問題。如何在WiX中創建條件屬性? (幾乎像一個If-Then)

主可執行文件是可選的,支持程序將自行運行。通常,最終用戶將安裝第三方程序而不是我的主要可執行文件。

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

回答

10

的setProperty元素可以使用之前或之後的行動來改變屬性的值。要根據可執行文件的安裝狀態設置值,我將使用Conditional Statement Syntax in MSI SDK中記錄的組件狀態的組合。你將不得不玩這個例子,但我認爲這會讓你接近。

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

所有的魔法都在上面的MSI SDK鏈接中解釋。

+0

花了我一會兒才發現SetProperty只在Wix3上。如果官方教程超出第一課,我會開始使用Wix3。可能是切換的好時機。 – Grant 2009-01-26 17:21:12

+0

對不起,WiX v3功能。但它只是碳酸糖。您可以使用CustomAction在WiX v2(或WiX v3)中獲得完全相同的設置以設置屬性,然後進行適當調度。比WiX V3語法更多的工作。 – 2009-01-28 18:04:15

1

對於維克斯2,您可以使用&功能,以瞭解是否安裝或沒有該功能:

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

這樣,您就可以隱藏對話框,並使用相同的條件下,以不啓動程序(無論複選框的初始狀態)。