天天看點

Wix打包系列(七) 添加系統必備元件的安裝程式

    我們知道在vs的打包工程中添加系統必備元件是一件很容易的事情,那麼在wix中如何檢測系統必備元件并在安裝過程中安裝這些元件。這裡以.Net Framework元件作為必備元件為例:

    7.1 檢測.Net Framework 版本

    步驟1:為安裝項目添加WiX .NET extensions庫的引用

    如果是指令行方式使用wix,那麼需要在candle和light的時候添加如下參數:

    如果在vs中使用wix,那麼需要添加WixNetFxExtension.dll的引用,在wix安裝目錄下可以找到它。

    步驟2:為安裝項目添加WiX .NET extensions命名空間

    添加了.NET extensions引用之後,還必須為源檔案添加.NET extensions 命名空間,方式是為Sample.wxs源檔案中Wix元素添加如下屬性:

    步驟3:引用适當版本的Property

    在.NET Framework extensions 已經定義了所有現有版本的.NET Framework的Property,包括service pack版本。如果我們需要在安裝項目中使用這些屬性,就必須使用引用它們;比如我們需要檢測.Net Framework 2.0,就必須添加相應的Property引用:

        “NETFRAMEWORK20”就是.NET Framework extensions 中預定義的.Net Framework 2.0的屬性;如果需要檢測中文語言包,那麼還必須添加”NETFRAMEWORK20_ZH_CN_LANGPACK” 屬性;檢視所有現有版本的.NET Framework的Properties,可以翻閱wix 幫助文檔。

    步驟4:在Condition條件中使用預定義的Properties

    我們可以在安裝程式的啟動條件中使用預定義的屬性,進而判斷系統是否安裝指定的.NET Framework元件,如:

  上面代碼意思是:如果沒有安裝.Net Framework 2.0, 将會中斷安裝程式執行,Installed 表示如果在修複或解除安裝安裝時将不會檢測.Net Framework元件。

   步驟5:編譯生成安裝程式

    在一個沒有.Net Framework 2.0的系統環境中運作生成的安裝程式,彈出提示安裝.Net Framework 2.0的錯誤,然後安裝程式被終止。

    現在我們的安裝程式已經可以檢測.Net Framework 2.0是否安裝了,但是一般情況下,我們希望将.Net Framework元件作為安裝程式的一部分,當檢測到系統沒有安裝.Net Framework元件的時候會自動安裝.Net Framework元件。windows installer不能将這些元件打包到我們安裝程式中,但是我們可以跟vs打包一樣,使用引導程式(bootstrapper)來實作,引導程式會先執行.Net Framework元件的安裝,然後再執行我們的安裝程式。下面我們提供2種方法,一種是編寫xml代碼的方式在Visual Studio中生成帶引導程式的安裝檔案,另一種是使用BMG工具。

    7.2 使用Visual Studio制作系統必備引導程式

    wix本身不提供引導程式,但是我們可以使用Visual Studio中ClickOnce deployment部件提供的bootstrapper引導程式;下面我們來看看如何為.Net Framework元件生成ClickOnce 引導程式bootstrapper。

    步驟1:在Visual Studio中建立并編譯wix安裝項目

    要生車ClickOnce bootstrapper引導程式,我們不能再使用指令行模式,必須使用VS編譯環境;在vs2005或以上版本,建立wix項目:

Wix打包系列(七) 添加系統必備元件的安裝程式

   移除Product.wxs,将Sample示例源檔案拷貝到wix Project所在的目錄,并添加到wix項目中;添加wix命名空間中的wix Extension元件的引用,如圖:

Wix打包系列(七) 添加系統必備元件的安裝程式

    使用candle指令編譯時,我們使用了變量參數-dVersion=1.0.0,這裡同樣需要設定,右鍵項目名稱——》屬性——》Build頁籤——》設定Build參數:

Wix打包系列(七) 添加系統必備元件的安裝程式

    最後編譯生成Sample項目,生成的安裝檔案在../bin/Debug/zh-cn下,我們也可以在上面的Build參數中指定安裝語言,也可以同時生成多種語言版本的安裝程式。

    步驟2: 用編輯器打開.wixproj檔案

   首先,在vs中打開示例中的Sample項目,然後在解決方案管理器(Solution Explorer)中右鍵Sample項目,選擇解除安裝項目(Unload Project),繼續在解決方案管理器(Solution Explorer)中右鍵Sample項目,選擇編輯Sample.wixproj。

    步驟3: 添加必備元件的條目

    在Sample.wixproj檔案的下添加如下代碼:

    Include 特性用于表示應安裝的必備元件的名稱。ProductName 項中繼資料是可選的,它作為備用項供生成引擎在找不到包時用作使用者友好名稱。除非未指定 ApplicationFile,否則這些項不是必選 MSBuild 輸入參數。對于必須為應用程式安裝的每個必備元件,都應包含一個相應的項。

    如果 BootstrapperItems 和 ApplicationFile 參數均未指定,則會導緻生成錯誤。

    步驟4:添加生成引導程式的任務

    在Sample.wixproj檔案中添加如下代碼:

       ApplicationFile指定引導程式在所有必備元件安裝完以後開始安裝應用程式時使用的檔案的路徑;$(TargetFileName)是安裝程式的名稱,如果是制作中文安裝包,wix安裝工程預設生成的安裝檔案在輸出目錄下的zh-cn目錄下,這裡根據實際生成目錄的結構填寫不同的路徑

    ApplicationName是在bootstrapper引導程式執行時顯示的應用程式的名稱;

    BootstrapperItems指定要生成到引導程式中的産品;

    ComponentsLocation指定引導程式尋找要安裝的安裝必備元件的位置。此參數可具有下列值:

HomeSite:訓示必備元件由元件供應商托管。

Relative:訓示必備元件與應用程式在同一個位置。

Absolute:訓示所有元件都将在一個集中的 URL 下找到。該值應當與 ComponentsUrl 輸入參數結合使用,ComponentsUrl 指定包含安裝必備元件的 URL。

    如果未指定 ComponentsLocation,将預設使用 HomeSite。

    CopyComponents如果為 true,則引導程式會将所有輸出檔案複制到 OutputPath 參數指定的路徑。BootstrapperComponentFiles 參數的值都應當基于此路徑。如果為 false,則不複制檔案,而且 BootstrapperComponentFiles 值将基于 Path 參數的值。

    OutputPath指定 setup.exe 和所有封包件要複制到的位置,這裡設定的目錄是應用程式安裝檔案的輸出目錄。

    Path指定所有可用的必備元件包的位置,示例中的Path路徑是對于安裝了VS2005的使用者而言的,如果是安裝了VS2008的使用者,則Path的值應該是:C:/Program Files/Microsoft SDKs/Windows/v6.0A/Bootstrapper

    步驟5:生成安裝程式

    儲存修改後的Sample.wixproj檔案,在解決方案管理器(Solution Explorer)中右鍵Sample項目,選擇重新附加元件目(Reload Project),在彈出視窗中選擇“是”,然後生成項目。

Wix打包系列(七) 添加系統必備元件的安裝程式

    點選接受會開始安裝.Net Framework 2.0元件,安裝完.Net Framework 2.0後會自動安裝Sample.msi。

    7.3 使用BMG工具制作自定義系統必備引導程式

    在使用ClickOnce釋出時,vs自帶了一個系統必備的清單(包括.Net Framework 和c++運作庫等),清單中的必備程式我們是可以用上面的方法制作引導程式;但是這種方法隻适用于将系統必備清單中的元件打包,而且需要編寫一些xml代碼,更好的方法是使用BMG(Bootstrapper Manifest Generator)工具,用它可以不用寫任何代碼為系統必備清單添加新的第三方元件,而且還可以為元件和安裝程式建立引導程式。

    這裡我用一個usb key的驅動程式作為安裝必備程式的示例:

    1、下載下傳安裝BMG

    2、打開BMG,版本資訊如下:

Wix打包系列(七) 添加系統必備元件的安裝程式

    3、點選菜單File—>New打開建立項目對話框,選擇Package Manifest項目類型。在彈出的對話框中輸入Project Name和Product Code;

Wix打包系列(七) 添加系統必備元件的安裝程式

    4、點選左上的Add Install File按鈕,選擇自定義必備程式所在的路徑:

Wix打包系列(七) 添加系統必備元件的安裝程式

    5、點選OK,出現如下界面,輸入Display Name,其他屬性可以選填,然後點選Build生成

Wix打包系列(七) 添加系統必備元件的安裝程式

    6、在vs2008中我們就可以看到我們定義的系統必備程式:

Wix打包系列(七) 添加系統必備元件的安裝程式

    7、接着點選菜單—>New,項目類型選擇MSBuild,點選OK後,出現如下界面:

Wix打包系列(七) 添加系統必備元件的安裝程式

    在General頁籤中輸入生成安裝檔案的名稱Name,選擇要安裝的檔案Installer。

    8、接着點選Package頁籤,選擇.net Framework 2.0 和USBKey Driver

Wix打包系列(七) 添加系統必備元件的安裝程式

    9、點選Build按鈕,選擇生成目錄,确定後生成MSBuild項目,在輸出目錄下生成安裝檔案和引導程式如下:

Wix打包系列(七) 添加系統必備元件的安裝程式

    10、運作setup.exe安裝引導程式,會出現安裝USBKey Driver元件的界面,如下:

Wix打包系列(七) 添加系統必備元件的安裝程式

    這裡制作的USBKey Driver必備程式并沒有設定啟動條件和檢查,也就是說不管機器上有沒裝這個驅動,都會執行驅動安裝程式,要設定啟動條件和檢查,可以在第5步中設定相關的屬性,具體可參考bmg幫助文檔

繼續閱讀