我們知道在vs的打包工程中添加系統必備組件是一件很容易的事情,那麼在wix中如何檢測系統必備組件並在安裝過程中安裝這些組件。這裏以.Net Framework組件作爲必備組件爲例:
7.1 檢測.Net Framework 版本
步驟1:爲安裝項目添加WiX .NET extensions庫的引用
如果是命令行方式使用wix,那麼需要在candle和light的時候添加如下參數:
-ext WiXNetFxExtension
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
<PropertyRef Id="NETFRAMEWORK20"/>“NETFRAMEWORK20”就是.NET Framework extensions 中預定義的.Net Framework 2.0的屬性;如果需要檢測中文語言包,那麼還必須添加”NETFRAMEWORK20_ZH_CN_LANGPACK” 屬性;查看所有現有版本的.NET Framework的Properties,可以翻閱wix 幫助文檔。
我們可以在安裝程序的啓動條件中使用預定義的屬性,從而判斷系統是否安裝指定的.NET Framework組件,如:
<Condition Message="This application requires .NET Framework 2.0. Please install the .NET Framework then run this installer again."> <![CDATA[Installed OR NETFRAMEWORK20]]> </Condition>
移除Product.wxs,將Sample示例源文件拷貝到wix Project所在的目錄,並添加到wix項目中;添加wix命名空間中的wix Extension組件的引用,如圖:
使用candle命令編譯時,我們使用了變量參數-dVersion=1.0.0,這裏同樣需要設置,右鍵項目名稱——》屬性——》Build選項卡——》設置Build參數:
最後編譯生成Sample項目,生成的安裝文件在../bin/Debug/zh-cn下,我們也可以在上面的Build參數中指定安裝語言,也可以同時生成多種語言版本的安裝程序。
需要注意的是:在使用vs製作中文安裝包時,如果引用了WixSqlExtension組件,那麼就必須把SqlExtension的中文資源文件(點擊下載)包括在項目中,否則會編譯錯誤。而在命令行模式下製作中文安裝包時,可以不使用SqlExtension中文資源文件,默認會使用自帶的英文資源文件。
步驟2: 用編輯器打開.wixproj文件
首先,在vs中打開示例中的Sample項目,然後在解決方案管理器(Solution Explorer)中右鍵Sample項目,選擇卸載項目(Unload Project),繼續在解決方案管理器(Solution Explorer)中右鍵Sample項目,選擇編輯Sample.wixproj。
步驟3: 添加必備組件的條目
在Sample.wixproj文件的下添加如下代碼:
<ItemGroup> <BootstrapperFile Include="Microsoft.Net.Framework.2.0"> <ProductName>.NET Framework 2.0</ProductName> </BootstrapperFile> </ItemGroup>
Include 特性用於表示應安裝的必備組件的名稱。ProductName 項元數據是可選的,它作爲備用項供生成引擎在找不到包時用作用戶友好名稱。除非未指定 ApplicationFile,否則這些項不是必選 MSBuild 輸入參數。對於必須爲應用程序安裝的每個必備組件,都應包含一個相應的項。
如果 BootstrapperItems 和 ApplicationFile 參數均未指定,則會導致生成錯誤。
步驟4:添加生成引導程序的任務
在Sample.wixproj文件中添加如下代碼:
<Target Name="AfterBuild"> <GenerateBootstrapper ApplicationFile="zh-cn/$(TargetFileName)" ApplicationName="Foobar 1.0" BootstrapperItems="@(BootstrapperFile)" ComponentsLocation="Relative" CopyComponents="True" OutputPath="$(OutputPath)" Path="E:/Program Files/Microsoft Visual Studio 8/SDK/v2.0/BootStrapper/" /> </Target>ApplicationFile指定引導程序在所有必備組件安裝完以後開始安裝應用程序時使用的文件的路徑;$(TargetFileName)是安裝程序的名稱,如果是製作中文安裝包,wix安裝工程默認生成的安裝文件在輸出目錄下的zh-cn目錄下,這裏根據實際生成目錄的結構填寫不同的路徑
-
HomeSite:指示必備組件由組件供應商託管。
-
Relative:指示必備組件與應用程序在同一個位置。
-
Absolute:指示所有組件都將在一個集中的 URL 下找到。該值應當與 ComponentsUrl 輸入參數結合使用,ComponentsUrl 指定包含安裝必備組件的 URL。
如果未指定 ComponentsLocation,將默認使用 HomeSite。
在General選項卡中輸入生成安裝文件的名稱Name,選擇要安裝的文件Installer。
8、接着點擊Package選項卡,選擇.net Framework 2.0 和USBKey Driver
9、點擊Build按鈕,選擇生成目錄,確定後生成MSBuild項目,在輸出目錄下生成安裝文件和引導程序如下:
10、運行setup.exe安裝引導程序,會出現安裝USBKey Driver組件的界面,如下:
這裏製作的USBKey Driver必備程序並沒有設置啓動條件和檢查,也就是說不管機器上有沒裝這個驅動,都會執行驅動安裝程序,要設置啓動條件和檢查,可以在第5步中設置相關的屬性,具體可參考bmg幫助文檔