2012-02-17 51 views
2

我目前正在學習有關爲我們工作的軟件應用程序設置MSI軟件包的WiX工具。Wix - 基於單選按鈕的功能的有條件安裝

作爲安裝的一部分,我想要做的事情之一是提供要安裝的特定文件的選擇,並且我將打開一個單選按鈕列表的對話框,允許用戶選擇所需的選項。

這裏是我使用

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

所以WXS文件,存在兩個特點。每個對應於表示文件的單個組件。單選按鈕鏈接到一個RootType屬性,我想控制哪個功能被安裝。

對話框顯示正常,如果我改變RootType的默認值,則在顯示安裝窗體時總是檢查正確的單選按鈕。但是,如果用戶在安裝過程中選擇了不同的單選按鈕,則實際上並沒有區別安裝哪個文件。安裝的文件始終是設置爲RootType屬性的初始值的文件。

在安裝功能之前是否還需要做其他事情才能讓單選按鈕更新屬性?

+0

嘿,你可以添加你的更新代碼,並解釋你是怎麼做到的? – Sakthivel 2014-09-23 14:35:38

回答

3

在顯示對話框時,設置屬性以影響對INSTALLLEVEL的要素條件爲時已晚。相反,您應該將Control Events放置在對話框中的Next(或類似)按鈕上,使用AddLocal或Remove的單選按鈕來控制功能是否已安裝。

+0

嘿,你能解釋一點細節方式嗎?添加控制事件的下一個按鈕點擊示例代碼?我也是wix的新手。你的意思是這個https://www.packtpub.com/books/content/windows-installer-xml-wix-adding-user-interface – Sakthivel 2014-09-23 14:36:28

1

我幾天的問題完全相同。我在網上發現了很多條件聲明的例子,總是以相同的問題結束。在閱讀Michael Urman的回答之後,我決定弄清楚他的意思是「......相反,您應該將Control Events放置在對話框中的Next(或類似)按鈕上,使用AddLocal或Remove的單選按鈕來控制是否該功能被安裝

這裏老話:

不要把功能中的條件語句。擺脫他們。 相反,請檢查按鈕內的控件內的單選按鈕的值!在你的情況下,安裝按鈕。

一個例子:

 <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一起發佈事件。你也需要這個,所以不要刪除它!

所以再次,按下安裝按鈕時,鏈接到單選按鈕的值實際上會被檢查。基本上就是這樣。

這確實會安裝基於用戶選擇的單選按鈕的功能。希望有所幫助!