Wix使用整理(一)


由於工作需要,學習了一段時間Wix,總算小有起色。鑒於國內Wix  的普及和使用有限,這里將個人遇到得問題和解決方案記錄下來,以便交流和相互促進。

    

   Wix :全稱 Windows Installer XML , 屬於微軟的一個開源項目,目標是使用 XML 語言靈活的定制具有各種功能的安裝包,需要微軟的 Windows Installer 服務支 持。
   Wix 生 成的產品為 msi 文 件,這種可執行文件與 exe 文件最大的不同為,它更底層,安裝文件的同時可以對系統或者其他軟件進行設置。
  下面的所有內容是基於 Wix3.0 版本。

 

 

    Wix 基本入門資料:

    Wix Document

    Wix tutorial ( 僅支持到 Wix2.0)

    這兩份資料都可以通過 Wix 的發布網站獲取。

 

 

 

1)         Language Codepage 的設置

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. 小於 1 的 Feature 將不會被安裝。 Level 值為 3 的 Feature 為 Typical 類型, Level 值大於 3 為 Complete 類型。 Level 也可以在安裝時動態修改,使用 <Condition> 條件判斷。例如: <Feature  Id="DesktopFt" Title="Desktop" Level="1">         <Condition  Level="0"><![CDATA[HASDESKTOP <> "1"]]></Condition>         <ComponentRef Id="DesktopShortcutComponent"/>   </Feature>     如果 HASDESKTOP 屬性值不為 1 ,那么此 Feature 的 Level 將為 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> 上述例子為在注冊表中查找 VC71 的 InstallDir 的值,如存在將值付給 VC71PATH ,不存在則 VC71PATH 為空。

6)         安裝包的中文化

Wix 默認的語言為 en-us ,中文化需要另外添加 zh-cn 或 zh-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 I d="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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM