天天看點

Wix 安裝部署(二)自定義安裝界面和行為

這篇會在上篇的基礎上繼續探索Wix的自定義界面和行為的功能,以下都是個人的小結,不當之處歡迎指正,與君共勉!

一、安裝向導

       Wix提供了五種安裝向導風格,

 WixUI Advanced

 WixUI FeatureTree

 WixUI InstallDir

 WixUI Minimal

 WixUI Mondo

    如何使用呢?需要兩步,先不問為什麼:

    1.需要使用UIRef 元素  ,在Product中引入

   2.再在安裝工程上右鍵添加引用,引入WixUIExtension.dll ,這個dll就在你安裝的wix的bin目錄下面。我們再生成以下,這個時候點選安裝檔案,安裝向導頁面就出現了,先是同意許可證,再是上一步,下一步等按鈕知道完成,比上一篇中的安裝明顯像樣了些。先不着急往下走,再回頭看以下 

     UI元素是專門用來規範安裝UI的,在其中可以定義你選擇的風格,設定自定義的行為等。UIRef 用來選擇安裝向導風格,把Id中Minmal換掉就可以了,Minmal是最簡潔的。當然不能出現兩個UIRef,不然WIx就淩亂了。

   Advance和InstallDir 還需要其他的設定。

    InstallDir 需要一個屬性,讓使用者定義安裝的地方。如下:

Wix 安裝部署(二)自定義安裝界面和行為
Wix 安裝部署(二)自定義安裝界面和行為

   當然要記得修改 

   安裝的時候,就會讓使用者選擇安裝位置。

Wix 安裝部署(二)自定義安裝界面和行為

     WixUIExtension.dll是wix自帶的連結庫,還有其他的連結庫如WixUtilExtension,WixNetFxExtension,WixIISExtension等,會在後面一一探索。

二、自定義風格

    這裡主要講的是加入自己的文字和圖檔,預設的是帶有Wix的一些背景圖檔,正式釋出的時候,當然要換成自己産品相關的。

    1.修改許可證書。許可證書需要rtf的富文本格式,我們可以用word先把内容寫好,然後檔案另存為選擇rtf格式的儲存就行了,再直接粘貼到工程目錄下。然後在Product标簽中加入以下代碼,license.rtf就是你的許可證書。再次生成,安裝的時候就在第一頁看到了。

Wix 安裝部署(二)自定義安裝界面和行為

 WixVariable是wix比較先進的個功能,Value不能為空。同樣我們可以換掉圖檔及其他。WixUIDialogBmp的圖檔會出現在歡迎頁和安裝完成頁,規格是 493 × 312。

WixUIBannerBmp 的圖檔會出現正上方。規格493 × 58  

還有WixUIInfoIco,WixUINewIco,WixUIUpIco,WixUIExclamationIco 來更換一些圖示。

 2.定義退出頁。

  ExitDlg 成功安裝後顯示,可以加入文字,複選框,讓使用者選擇是否馬上執行,我們在安裝軟體的時候經常看到這個提示。

  我們先加入一條感謝語,在Product元素中插入以下内容,WIXUI_EXITDIALOGOPTIONALTEXT 專門用來展示文字。

 同理加入一個複選框,用來提示使用者運作是否目前程式。

界面讓我改成這個樣子了,覺得這個背景透明度也是個問題,這個問題先記下。

Wix 安裝部署(二)自定義安裝界面和行為

 但這個時候 還是不能運作的,我們再看下一節。

三、執行自定義Action

  這裡小小的分開下,是因為Action是wix中的一大功能,這次先嘗下滋味。需要三步

  1.先引入WixUtilExtension.dll 

  2.用WixShellExecTarget 和 CustomAction來定義這個行為 (在Product元素中加入)

 WixShellExecTarget 是專門用來運作一個應用程式的,這裡的Value中的#号表示的是全路徑,而這個myapplication.exe是個id,指向你安裝元件的中File的id。相當于這個Property定義了要執行程式的位置。CustomAction定義了這個行為Id就是LanuchApplication,DllEntry表示是入口。深入的認識還是要到後面繼續研究。

 3.在UI元素中加入Publish元素來告訴UI如何執行這個行為。

 上面兩個元素完成了方法的定義,這裡的Publish就是觸發這個行為。Dialog屬性表示是哪個框(dialog),Control=“Finish” 表示是點選完成鍵觸發這個行為,Event=“DoAction” 表示點選後執行這個行為,應該還有其他的值,現在還不知道。而這個Value 正好指向了CustomAction的Id。 WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 表示要checkbox 選中後執行。于是乎,仿佛碎片的世界又聯系在了一起。這個時候,我們重新生成後,安裝一遍,選擇複選框,就能執行了。回頭想想,為什麼是這樣,wix這個相當于全部都是配置檔案,不像C#的語言那麼優雅,語義化。是以開始看起來确實有些惱火呢。了解了才能記得住,每個元素就相當于一張表,而這個Id對于每個元素來說都是唯一的,這樣通過Value和Id彼此關聯,而且生産MSI檔案其實就是個資料庫。

 如果要立即執行某個程式,比如bat檔案 可以将這個行為加到安裝序列中執行

 如果要立即執行某個程式。

fliekey指向的是一個bat檔案,但奇怪的是,直接運作這個bat瞬間就執行完了,在安裝過程中執行卻要個10秒鐘,推測是因為 After='InstallFinalize' 等待整個安裝完成,但是我修改成其他的InstallExecuteSequence中的行為,卻沒有觸發安裝,在解除安裝的時候卻安裝了。

還有一種方法,靜默的觸發bat檔案。不會彈出黑色的框。

不過windows系統在非管理者下 又會彈出提示:正在安裝這個驅動。。。 這個驅動是否正确安裝。  雖然比黑框好了一點,但還是不完美。

四、定義文字

 所有安裝過程中的文字都是可以重載的, 可以通過增加一個String 指定對應的Id 就可以重載,這個可以用來做一個分離工作。需要兩步

  1.需要加入localization  檔案,右鍵,添加建立項,選擇localization File . 再用String 來定義你的文字。

  2.修改你的Product.wxs ,這裡的Name 後的表達式就指向localization檔案中的Id="Application" 的String。 

    再次安裝的時候檔案名就變成了**My Application Name,其他地方同理。這樣可以避免多次重複的修改,做到文字和配置的分離。

    這一節先到這裡,今天眼睛都看花了,自定義的還不止這些,明天繼續.....

 全部代碼:

Wix 安裝部署(二)自定義安裝界面和行為

 View Code

    還是那句話,如果對你有幫助,就頂一下吧

繼續閱讀