Wix打包系列(二)用戶界面和本地化操作

上一章節,我們已經大概知道如何對文件進行打包安裝,不過我們也注意到,通過對Sample.wxs的編譯鏈接,生成的msi安裝包沒有任何用戶界面,只有一個安裝進度條。下面我們來看看如何給安裝包添加用戶界面:

 

    2.1   使用wix用戶界面

    wix本身自帶有一套UI,使用這些UI我們可以滿足大多數的安裝界面要求,你可以決定到底使用哪種WixUI:

    1、WixUI_Mondo 包含WixUI附帶的全部用戶界面:welcome界面,許可協議,安裝類型(經典、自定義、完全),部件定製(安裝類型自定義),瀏覽目標目錄,磁盤消耗,同時也包含維護模式的界面;

    2、WixUI_FeatureTree 與WixUI_Mondo的區別就是不能選擇安裝類型,許可協議界面之後直接到了部件定製界面;

    3、WixUI_InstallDir 不會出現選擇安裝類型和自定義部件的界面,許可協議之後會進入到選擇安裝目錄界面

    4、WixUI_Minimal 簡化的安裝界面,在歡迎和許可協議後會自動安裝,不能自定義部件和安裝路徑

    5、WixUI_Advanced  跟WixUI_Minimal 相似,可以一鍵直接安裝,也允許定義部件和安裝路徑

   

    要在安裝程序中應用WixUI需要進行如下配置,首先在源文件Sample.wxs中添加UI的引用,UIRef標記可以放到Product或Fragment標籤下:

 

<UIRef Id="WixUI_Mondo" />
<UIRef Id="WixUI_ErrorProgressText" />

 

WixUI_Mondo 是用戶界面的引用,WixUI_ErrorProgressText則是安裝進度文本,加上該語句後,在安裝進度界面會顯示安裝進度的文字信息。另外還有一個FilesInUse對話框也很有用,如果安裝過程中要修改的文件正在使用,則會掛起安裝程序,並彈出文件正在使用的對話框,用戶可以選擇重試、忽略或者退出安裝,使用FilesInUse對話框只需添加如下語句:

 

<DialogRef Id = "FilesInUse" />

 

 

需要注意的是如果使用WixUI_InstallDir 界面,則還必須額外定義一個標識爲WIXUI_INSTALLDIR的Property。它的Value爲安裝目錄的Directory的ID,這個ID必須是大寫的

 

<Property Id="WIXUI_INSTALLDIR" Value="INSTALLDIR" />

 

 

所有的WixUI的資源文件都包含在wix目錄下的WixUIExtension.dll中,因此在鏈接的時候需要加上-ext WixUIExtension參數:

 

candle.exe -dVersion=1.0.0  Sample.wxs -out 1.0.0/
light.exe -ext WixUIExtension -out 1.0.0/Sample.msi 1.0.0/Sample.wixobj

 

 

    2.2   部件(Feature )定製

 

    執行生成的Sample.msi,我們就可以看到現在安裝包中已經包含用戶界面了,我們可以看看部件定製界面,也就是選擇自定義安裝時出現的界面,包括2個可選的子部件和一個父部件,這3個部件正是我們之前定義的Feature,我們來看看之前我們定義的Feature的屬性:

    Title屬性是部件樹中顯示的部件名稱;

    Description 屬性是點擊部件節點時在右邊文本框中顯示的描述性文字。

    ConfigurableDirectory屬性很重要,它的值是我們之前定義的目錄的引用INSTALLDIR,如果不設置該屬性,將不能爲部件選擇安裝路徑;

    Level是安裝部件的條件等級,要理解它的含義,我們還必須知道Install level的概念:

    Install level可以理解成是安裝級別的level,而Feature level 則是部件級別的level。Install level的值對應於安裝類型,在選擇安裝類型時,會對Install level賦值。對於典型安裝(Typical)的Install level是3,選擇典型安裝的情況下Feature level小於等於3的Feature都將被安裝;對於完全安裝(Complete)的Install level是1000,選擇完全安裝的情況下Feature level小於等於1000的Feature都將被安裝,因此一般情況下我們定義的level不要超過1000;Feature level 設置爲0部件將不會被安裝,也不會在部件定製時顯示出來。

    另外要注意的是Feature,如果我們我們在Feature下定義了Condition,則Condition的條件爲true時的level值將覆蓋Feature的Level值。Condition,顧名思義就是條件,wix中Condition有多種用法:可以定義在Component下,作爲安裝Component的條件;定義在Control下,作爲ControlCondition的入口;定義在Fragment 或者 Product下,作爲運行安裝程序的入口;定義在Feature下,則作爲Feature 條件的入口,如定義如下condition,則當TESTSUCCESS屬性爲1時,Feature level的屬性將被重置爲1000。

 

<Condition Level='1000'>TESTSUCCESS = "1"</Condition>

 

 

    2.3  本地化配置 

    到這裏我們有了安裝界面,但大家會發現安裝界面的文字都是英文的,下面我們來看如何對安裝包進行本地化的操作。首先我們要準備一個你需要語言的資源文件,可以到http://www.tramontana.co.hu/wix/loc/index.php下載相關的資源文件;不過很可惜,這裏只有繁體的資源文件WixUI_zh-tw.wxl,並沒有我們想要的簡體中文的資源文件,我們可以將WixUI_zh-tw.wxl下載到本地,然後將繁體翻譯成簡體;也可以點這裏下載(裏面包含wixUI和SqlExtension的中文資源文件)。

    接着我們需要對源文件進行如下改動:

    1、修改源文件編碼格式爲utf-8:

 

<?xml version="1.0" encoding="utf-8"?>

 

    2、修改Product的Codepage和Language屬性,對應中文的屬性值是Codepage="936" Language="2052"。

    3、修改Package對應  的屬性Languages和SummaryCodepage爲936和2052

    然後編譯源文件,最後在鏈接時需要使用-loc開關加載資源文件,如下:

candle.exe -dVersion=1.0.0  Sample.wxs -out 1.0.0/
light.exe -loc WixUI_zh-cn.wxl  -ext WixUIExtension -out 1.0.0/Sample.msi 1.0.0/Sample.wixobj

 

 

    2.4  自定義界面元素 

    運行生成的安裝文件,已經變成中文安裝界面了。到這裏我們發現,許可協議內容和界面風格都還是wix默認的,wix中這些界面元素的內容都是使用變量定義的,我們可以通過重定義變量的值來更改這些界面元素:

 

<WixVariable Id="WixUILicenseRtf" Value="License.rtf" />
 <WixVariable Id="WixUIBannerBmp" Value="banner.bmp" />
 <WixVariable Id="WixUIDialogBmp" Value="dialog.bmp" />
 <WixVariable Id="WixUIExclamationIco" Value="exclamation.ico" />
 <WixVariable Id="WixUIInfoIco" Value="information.ico" />
 <WixVariable Id="WixUINewIco" Value="new.ico" />
 <WixVariable Id="WixUIUpIco" Value="up.ico" />

 

       這裏的Value 值是目標文件的相對路徑,在與wxs源文件相同的目錄下,ID的值是目標文件的標識,不能改變。

 

    到這裏我們已經可以生成一個標準的安裝界面了,後面我們還將看到如何生成自定義的安裝界面,下一章我們將討論如何自定義Action(Custom Action)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章