天天看點

Wix使用整理(二)

1)         安裝解除安裝時進行日志記錄

Wix 制作的 Installer 的調試很麻煩,沒有直接的 Bug 工具,可以通過記錄安裝日志的方式進行間接調試。指令為 msiexec /i package.msi /l log.txt

詳細參考: msiexec /Option <Required Parameter> [Optional Parameter] 安裝選項         </package | /i> <Product.msi>                  安裝或配置産品         /a < Product.msi>                 管理安裝 - 在網絡上安裝産品         /j<u|m> <Product.msi> [/t <Transform  List>] [/g <Language ID>]                 播發産品 - m 播發到所有使用者, u 播發到目前使用者         </uninstall | /x> <Product.msi |  ProductCode>                 解除安裝産品 顯示選項         /quiet                 安靜模式,無使用者互動         /passive                 無從參與模式 - 隻顯示程序欄         /q[n|b|r|f]                 設定使用者界面級别                 n - 無使用者界面                 b  - 基本界面                 r - 精簡界面                 f - 完整界面 ( 預設值 )         /help                 幫助資訊 重新啟動選項          /norestart                 安裝完成後不重新啟動         /promptrestart                 提示使用者重新啟動 ( 如果必要 )         /forcerestart                 安裝後總是重新啟動計算機 日志選項         /l[i|w|e|a|r|u|c|m|o|p|v|x|+|!|*] <LogFile>                  i - 狀态消息                 w  - 非緻命警告                 e - 全部錯誤消息                 a - 操作的啟動                 r  - 操作特定記錄                 u - 使用者請求                 c - 初始界面參數                 m  - 記憶體不足或緻命退出資訊                 o - 磁盤空間不足消息                 p - 終端屬性                 v  - 詳細輸出                 x - 額外調試資訊                 + - 擴充到現有日志檔案                 ! - 每一行重新整理到日志                 *  - 記錄所有資訊,除了 v 和 x 選項         /log < LogFile>                 與 /l* < LogFile> 相同 更新選項         /update <Update1.msp>[;Update2.msp]                  應用更新          /uninstall <PatchCodeGuid>[;Update2.msp] /package < Product.msi | ProductCode>                 删除産品的更新 修複選項         /f[p|e|c|m|s|o|d|a|u|v] <Product.msi |  ProductCode>                 修複産品                 p - 僅當檔案丢失時                 o  - 如果檔案丢失或安裝了更舊的版本 ( 預設值 )                 e - 如果檔案丢失或安裝了相同或更舊的版本                 d - 如果檔案丢失或安裝了不同版本                 c - 如果檔案丢失或較驗和與計算的值不比對                 a - 強制重新安裝所有檔案                 u - 所有必要的使用者特定系統資料庫項 ( 預設值 )                 m - 所有必要的計算機特定系統資料庫項 ( 預設值 )                 s - 所有現有的快鍵方式 ( 預設值 )                 v - 從源運作并快取區域資料包 設定公共屬性         [PROPERTY=PropertyValue]

2)         安裝預設位置的修改

安裝包一般預設安裝在系統盤的 Program Files 檔案夾下,此文 件在 Wix 中為 ProgramFilesFolder ,使 用形式為: <Directory  Id="ProgramFilesFolder"></Directory >     還有很多内置的檔案夾描述屬 性,比如桌面 ——DesktopFolder 、開始菜單的程式 ——ProgramMenuFolder ,這些都可以直接用。     有時候安裝程式限定要裝在某個盤 的根目錄中,這時候可以用 WindowsVolume 來代替系統盤,但是使用方法上有一定的差別:     < SetDirectory Id="WINDOWSVOLUME"  Value="[WindowsVolume]"/>     < Directory  Id="WINDOWSVOLUME"></Directory>     不加上 SetDirectory 會報錯,最好加 上。

    要想使用自己定義的安裝目錄, 則要對 Wix 自帶 的屬性 WIXUI_INSTALLDIR 進行包裝。      < Property Id="WIXUI_INSTALLDIR" Value="INSTALLLOCATION" />

自定義 CustomAction( 一 )

CustomAction 在 Wix 中扮演着很重要的角色,這裡講講它的其中一個用途 —— 根據條件設定屬性的值。 例子: <Property Id="IDEVC71" Value="not detected"/> < Property Id="VC71PATH">       <RegistrySearch Id="VC71" Type="raw"  Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\7.1"  Name="InstallDir"/> < /Property> < CustomAction  Id="MyAction.SetVC71Property" Return="check" Property="IDEVC71"  Value="detected">VC71PATH</CustomAction>

用途:一旦在系統資料庫中找到相關 的值,那麼屬性 IDEVC71 的值将被設為 detected ,否則為 not detected

3)         如何在安裝時設定系統資料庫和環境變量

設定系統資料庫: <RegistryValue Root="HKCU" Key="Software\Developer"  Name="installed" Type="integer" Value="1" KeyPath="yes"/>     設定環境變量:(這裡将環境變量的設定作為一個 Component ) <Component  Id="ProductEnvironment" Guid="" KeyPath="yes">       <Environment Id='UpdatePath' Name='PATH' Action='set' System='yes' Part='first' Value='[INSTALLLOCATION]bin'/>       <Environment Id='SetTclLibraryPath' Name='TCL_LIBRARY' Action='set' System='yes'  Part='all' Value='[INSTALLLOCATION]msys\lib'/> < /Component>     前者是添加到系統變量 PATH 中,後者是建立系統環境變量 TCL_LIBRARY

4)         自定義 CustomAction( 二 )

調用本機應用程式: <Property Id="NOTEPAD">Notepad.exe</Property> < CustomAction Id="LaunchReadme" Property="NOTEPAD"  ExeCommand="[INSTALLLOCATION]README.txt" Return="asyncNoWait"/>     用途:調用 Notepad 程式(記事本)打開安裝目錄下的 README.txt 檔案。

5)         INI 檔案的操作

Wix 提供對标準 INI 檔案的操作,包括建立、編輯等。 例子: <IniFile Id="WriteIntoFile" Action="addLine" Key="InstallDir" Name="Foobar.ini" Sections="Paths" Value="[INSTALLDIR]"/> 用途:在檔案 Foobar.ini 檔案中 Paths 段下添加一行 “InstallDir = 安裝目錄 ” 。 Action 中的操作包括添加、删除、建立等。在實際編寫代碼時會有自動提示。

6)         Heat 的特殊用法

Heat 工具用于 harvest 檔案或者檔案夾,是比較基礎的 Wix 工具,這裡講講它的一個特殊用法:配合 candle 使用 var 傳遞參數。      例如:       heat.exe  dir  VC80 -gg -nologo -ke -sfrag -template:fragment  -dr INSTALLLOCATION  -cg VC80ComponentGroup -var var.VC80Dir -out build\VC80.wxs     用途:将檔案夾 VC80 下的所有檔案和檔案夾打包進 VC80ComponentGroup 裡,源檔案根目錄 SourceDir 用( $var.VC80Dir )代替。      編譯的時候使用 candle  -dVC80Dir="VC80" 即可,這樣就可以同時對不同檔案夾下的 檔案進行一次性處理。 -d 參數可以有多個,也可以在 light 的時候調用,嘗試成功。

7)         Wix 自動化 Build 流程

heat

candle

light 目前可以考慮使用基本的 BAT 批處理指令進行自動化的 Build 過程,以後可以考慮引入 Build 系統。

8)         關于 FilesInUse 的使用

Wix 中自帶了 FilesInUse 和 MsiRMFilesInUse2 個錯誤處理的對話框 一般不需要開發人員去處理,隻需要在 Install UI Sequence 前引用這兩個對話框即可 <DialogRef Id = "FilesInUse"> 這樣解除安裝或者其他操作時,目前安 裝的檔案正在被使用時會出現提示框,要求使用者選擇操作

繼續閱讀