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"> 這樣卸載或者其他操作時,當前安 裝的文件正在被使用時會出現提示框,要求用戶選擇操作


免責聲明!

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



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