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()

CustomActionWix 中扮演着很重要的角色,这里讲讲它的其中一个用途 —— 根据条件设置属性的值。
例子:
<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 中自带了 FilesInUseMsiRMFilesInUse2 个错误处理的对话框
一般不需要开发人员去处理,只需要在 Install UI Sequence 前引用这两个对话框即可
<DialogRef Id = "FilesInUse">
这样卸载或者其他操作时,当前安 装的文件正在被使用时会出现提示框,要求用户选择操作

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值