在前一篇隨筆Wix學習整理(1)——快速入門HelloWorld中,我們制作的安裝包安裝界面太簡單,沒有與用戶進行交互的過程。下面我們修改Wix源文件來給安裝程序添加UI。
1 Wix的預定義UI簡介
Wix toolset提供的WixUIExtension.dll包(在目錄C:\Program Files\WiX Toolset v3.6\bin下)中提供了五種UI對話框集合,分別是WixUI_Advanced、WixUI_FeatureTree、WixUI_InstallDir、WixUI_Minimal和WixUI_Mondo。下面分別對這五種預定義UI對話框集合進行簡單的說明。
WixUI_Advanced對話框集合
WixUI_Advanced提供了與WixUI_Minimal類似的一鍵安裝形式。不過其在協議界面提供了配置高級選項的按鈕。在高級選項中,我們可以選擇該產品是安裝給當前用戶還是給所有用戶的,在Wix文件中需要一個Id為“WixAppFolder”的屬性(Property),指定默認選擇當前用戶(WixPerUserFolder)還是所有用戶(WixPerMachineFolder)。另外,需要一個Id為“ApplicationFolderName”的屬性來指定產品所安裝在的默認文件夾。
<Property Id=”ApplicationFolderName” Value=”HelloWorld” /> <Property Id=”WixAppFolder” Value=”WixPerUserFolder” /> <UIRef Id=”WixUI_Advanced” />
WixUI_FeatureTree對話框集合
WixUI_FeatureTree與WixUI_Mondo的區別是WixUI_FeatureTree省略了安裝類型對話框。協議同意對話框之后就直接到部件(Feature)選擇對話框了。當我們的產品默認是安裝所有部件時,更推薦采用WixUI_Feature而不是WixUI_Mondo。其用法是:
<UIRef Id=”WixUI_FeatureTree” />
WixUI_InstallDir對話框集合
WixUI_InstallDir不支持用戶選擇安裝的部件,但是其增加了讓用戶選擇安裝目錄的對話框。在Wix文件中需要一個Id為“WIXUI_INSTALLDIR”的屬性來產品要安裝的目錄的ID(ID必須是全部大寫,大寫的目的是為了能夠讓用戶在對話框中選擇的自定義目錄能夠回寫到相對應ID的Directory元素)。其在下面的用例中的用法是:
<Property Id=”WIXUI_INSTALLDIR” Value=”INSTALLFOLDER” /> <UIRef Id=”WixUI_InstallDir” />
WixUI_Minimal對話框集合
WixUI_Minimal是最小的預定義對話框集合,其將Welcome對話框和協議同意對話框結合,選擇協議后就直接安裝了。這種對話框集合適用於我們的產品沒有自定義部件以及不支持變更安裝目錄的情況。其用法是:
<UIRef Id=”WixUI_Minimal” />
WixUI_Mondo對話框集合
WixUI_Mondo提供了Welcome、協議同意、安裝類型選擇、部件選擇等自定義安裝的對話框,但其不支持安裝目錄的變更。當我們的產品默認情況下不安裝全部部件時,這樣典型安裝(typical)和完全安裝(complete)之間就有個明顯的區別,此時推薦使用WixUI_Mondo。其用法是:
<UIRef Id=”WixUI_Mondo” />
下面我們的用例就設置WixUI_Mondo對話框集合。
2 制作帶UI界面的HelloWorld.msi
修改Product.wxs文件,內容如下
1 <?xml version="1.0" encoding="UTF-8"?> 2 <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 3 <Product Id="*" Name="HelloMSI" Language="1033" Version="1.0.0.0" Manufacturer="LEH" UpgradeCode="1de12ee7-2e94-42ac-979f-06245a0ade30"> 4 <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> 5 <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" /> 6 7 <Directory Id="TARGETDIR" Name="SourceDir"> 8 <Directory Id="ProgramFilesFolder"> 9 <Directory Id="INSTALLFOLDER" Name="HelloWorld"> 10 <Component Id="ProductComponent" Guid="B5F0C012-49D6-4C63-AFCA-0CE6C24C6D7D"> 11 <File Id="HelloWorld" Source="HelloWorld.exe" /> 12 </Component> 13 </Directory> 14 </Directory> 15 </Directory> 16 17 <Feature Id="ProductFeature" Title="HelloWorld" Level="1"> 18 <ComponentRef Id="ProductComponent" /> 19 </Feature> 20 21 <UIRef Id="WixUI_Mondo" /> 22 </Product> 23 </Wix>
相對比之前的Product.wxs文件,這個文件只是添加了上面標紅的<UIRef Id=”WixUI_Mondo” />一行語句而已。若想使用其他的預定義對話框集合,只需將紅色語句變更為相應對話框集合的用法語句即可。
下面開始編譯和鏈接該文件以生成.msi文件。編譯命令還是不變,
candle Product.wxs
鏈接的命令為
light Product.wixobj –out HelloWorld.msi –ext "C:\Program Files\WiX Toolset v3.6\bin\WixUIExtension.dll"
其中-ext選項指定了特定的擴展包WixUIExtension.dll,其運行結果如下,
編譯和鏈接后,在文件Product.wxs所在目錄即生成了HelloWorld.msi文件。
3 驗收我們的成果
雙擊HelloWorld.msi文件,可以看到如下安裝的交互界面,
選擇Typical,然后Next,
完工!現在HelloWorld.exe文件已成功安裝在目錄C:\Program Files\HelloWorld下。