Wix使用整理(二)

 

1)         LanguageCodepage的設

Language指所在地區使用的語言,爲數字編號。
Codepage
指所在地區的代碼頁,用來進行區域區分。
下來列舉幾個常見的區域代號:
語言                              語言-國家     Language      Codepage
English                            en-us             1033               1252
Simplified Chinese            zh-cn              2052               936
Traditional Chinese           zh-tw              1028                950

2)         GUID的生成

VS2005中,通過工具”——“創建GUID”生成。
GUID
也可以自行定義,但是前提是要保證唯一。

3)         安裝文件描述XML自動生成

當安裝文件特別多的時候,我們就需要用專用的工具進行文件描述XML的自動生成了,採用的是Wix自帶的heat工具,位於安裝目錄的bin下。
    Heat
的使用方法爲:
    heat.exe [-?] harvestType <harvester arguments> -out sourceFile.wxs
   
詳細見Wix說明文檔。
   
例子:
    heat.exe  dir ABC -gg -ke -sfrag -template:fragment -dr INSTALLLOCATION -cg BasicComponentGroup -srd -out  ABC.wxs
   
作用爲:將目錄ABC(相對目錄)下的所有文件(包括空目錄)作爲一個ComponentGroup添加到ABC.wxs文件中,其中根目錄爲INSTALLLOCATION,段標籤爲fragment
運行這行命令會自動生成一個wxs文件,裏面包含ABC目錄下所有文件的描述。

4)         Feature的選擇安裝

Wix安裝包中所有的組件都是以Feature的方式安裝到系統中的,Level是安裝級別,是最重要的屬性之一,不可缺少。
    Level
的值爲整型,最小爲0,最大1000。爲0的時候此Feature不安裝。 一般來說Level與選擇安裝關聯,與之相對應的一個屬性爲INSTALLLEVEL,默認爲1.小於1Feature將不會被安裝。Level值爲3FeatureTypical類型,Level值大於3Complete類型。Level也可以在安裝時動態修改,使用<Condition>條件判斷。例如:
<Feature Id="DesktopFt" Title="Desktop" Level="1">
        <Condition Level="0"><![CDATA[HASDESKTOP <> "1"]]></Condition>
        <ComponentRef Id="DesktopShortcutComponent"/>
  </Feature>
   
如果HASDESKTOP屬性值不爲1,那麼此FeatureLevel將爲0,不會被安裝。使用此種方式選擇安裝需注意HASDESKTOP屬性的初始化位置,一定要保證在Feature初始化前進行。否則設置無效。
   
也可以採用另一種方法選擇性安裝:
    HASDESKTOP
屬性修改的地方添加<Publish>
      <Publish Event="AddLocal" Value="ALL">1</Publish>
      <Publish Event="Remove" Value="DesktopFt"><![CDATA[HASDESKTOP <> "1"]]></Publish>
   
這樣效果一樣,但是不需要HASDESKTOP的值的初始化在Feature之前。
   
詳細參考 http://www.joyofsetup.com/2007/05/30/feature-conditions-and-ui/
(
附註:  注意此種方式下內置屬性REMOVE的值就不再爲空,那麼在安裝時也不能以REMOVE來判斷當前操作)

5)         Property的使用

Wix中使用自定義變量的方法爲聲明Property(屬性)。
Property
分爲兩種:全局的和局部的。全局屬性必須全部大寫,否則視爲局部屬性。
例如:
<Property Id="HASDESKTOP" Value="1"/>
如果改爲小寫,那麼其他文件(也許是fragment)的代碼調用屬性無效。
搜索、判斷得到的屬性一律爲全局屬性,大寫。例如:
<Property Id="VC71PATH">
      <RegistrySearch Id="VC71" Type="raw" Root="HKLM" Key="SOFTWARE/Microsoft/VisualStudio/7.1" Name="InstallDir"/>
</Property>
上述例子爲在註冊表中查找VC71InstallDir的值,如存在將值付給VC71PATH,不存在則VC71PATH爲空。

6)         安裝包的中文化

Wix默認的語言爲en-us,中文化需要另外添加zh-cnzh-tw的描述文件。
擁有了中文拓展的文件以後,在代碼中使用loc調用屬性即可,使用方式與en-us無異。
當然也可以自定義一些中文化的標籤,格式爲:
<WixLocalization Culture="zh-cn" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<String Id="LicenseThirdPartText" Overridable="yes">
請仔細閱讀以下聲明</String>
</WixLocalization>
調用方式爲:text =”!(loc.LicenseThirdPartText)”

中文語言包下載地址爲:http://download.csdn.net/salever

7)         內置CustomAction的使用

1. Quiet Execution Custom Action 安靜模式下執行操作。允許用戶在後臺執行一些命令,但是不出現執行窗口。
   
1,安靜模式下執行CMD操作 
<Property Id="QtExecCmdLine" Value="command line to run"/>
<CustomAction Id="QtExecExample" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="immediate" Return="check"/>
<InstallExecuteSequence>   
   <Custom Action="QtExecExample" After="TheActionYouWantItAfter"/>
</InstallExecuteSequence>
採用安靜模式執行CMD操作,但是不出現CMD命令窗口。注意Value中的命令以及應用程序必須加引號,即使沒有空格也要加上。

2,安靜模式下執行其他應用程序操作
<CustomAction
Id="QtExecDeferredExampleWithProperty_Cmd" Property="QtExecDeferredExampleWithProperty"
              Value=""[#MyExecutable.exe]"" Execute="immediate"/>
<CustomAction Id="QtExecDeferredExampleWithProperty" BinaryKey="WixCA" DllEntry="CAQuietExec"
              Execute="deferred" Return="check" Impersonate="no"/>

<InstallExecuteSequence>
    <Custom Action="QtExecDeferredExampleWithProperty_Cmd" After="CostFinalize"/>
    <Custom Action="QtExecDeferredExampleWithProperty" After="TheActionYouWantItAfter"/>
</InstallExecuteSequence>

2.ShellExecute CustomAction
執行打開文檔或URL等操作。典型應用爲安裝完成後打開幫助文件或則運行安裝程序。

例:
<Property Id="WixShellExecTarget" Value="myapplication.exe" />
    <CustomAction Id="LaunchApplication"
        BinaryKey="WixCA"
        DllEntry="WixShellExec"
        Impersonate="yes" />
    </Product>

 

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