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"> 这样卸载或者其他操作时,当前安 装的文件正在被使用时会出现提示框,要求用户选择操作

Wix使用整理(二)的更多相关文章

  1. Wix学习整理(5)——安装时填写注册表

    原文:Wix学习整理(5)--安装时填写注册表 一 Microsoft操作系统的注册表 什么是注册表? 注册表是Mircrosoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信 ...

  2. Wix学习整理(6)——安装快捷方式

    原文:Wix学习整理(6)--安装快捷方式 一 为HelloWorld案例添加安装快捷方式 通常我们安装一个应用软件的时候,都喜欢在桌面或开始菜单中添加快捷方式以便我们快速访问.现在我们就在上篇添加注 ...

  3. Wix学习整理(7)——在开始菜单中为HelloWorld添加卸载快捷方式

    原文:Wix学习整理(7)--在开始菜单中为HelloWorld添加卸载快捷方式 通过前面的几篇随笔,我们已经给我们的HelloWorld提供了填写注册表信息,以及开始菜单快捷方式和桌面快捷方式.这些 ...

  4. Wix学习整理(4)——关于WiX文件格式和案例HelloWorld的分析

    原文:Wix学习整理(4)--关于WiX文件格式和案例HelloWorld的分析 关于WiX文件格式 .wxs是WiX的源文件扩展名..wxs文件以类XML文件的格式来指定了要构造Windows In ...

  5. Wix学习整理(3)——关于Windows Installer和MSI

    原文:Wix学习整理(3)--关于Windows Installer和MSI 关于Windows Installer Windows Installer是微软Windows操作系统自带的一个软件安装和 ...

  6. Wix学习整理(1)——快速入门HelloWorld

    原文:Wix学习整理(1)--快速入门HelloWorld 1 Wix简介 Wix是Windows Installer XML的简称,其通过类XML文件格式来指定了用于创建Windows Instal ...

  7. Wix学习整理(2)——HelloWorld安装添加UI

    原文:Wix学习整理(2)--HelloWorld安装添加UI 在前一篇随笔Wix学习整理(1)——快速入门HelloWorld中,我们制作的安装包安装界面太简单,没有与用户进行交互的过程.下面我们修 ...

  8. 单元测试系列之十:Sonar 常用代码规则整理(二)

    摘要:帮助公司部署了一套sonar平台,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分析,避免再次出现类似问题. 作者原创技术文章,转载请注明出处 ======== ...

  9. Deep Learning(深度学习)学习笔记整理(二)

    本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之 ...

随机推荐

  1. mysql delete 注意

    mysql中You can't specify target table <tbl> for update in FROM clause错误的意思是说,不能先select出同一表中的某些值 ...

  2. Django之进阶相关操作

    一.QuerySet的特点 1.可切片 使用Python 的切片语法来限制查询集记录的数目 .它等同于SQL 的LIMIT 和OFFSET 子句. 1 >>> Entry.objec ...

  3. csu 1798(树上最远点对,线段树+lca)

    1798: 小Z的城市 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 60  Solved: 16[Submit][Status][Web Board] ...

  4. vim进阶-自己设置vim编辑器

    我这是最基础的一些vim设置,参考文章http://blog.csdn.net/huiguixian/article/details/6394095 看大牛设置的vim,感觉很花里胡哨,以后慢慢接触: ...

  5. C# asp.net 实现导出Excel

    原文地址:传送门 这段时间用到了导出Excel的功能,这个功能还是比较常用的,我常用的有两个方法,现在整理一下,方便以后查看. 1.实现DataTable数据导出到本地,需要自己传进去导出的路径. / ...

  6. 4款Github泄漏敏感信息搜索工具简单比较

    gitrob Ruby开发,支持通过postgresql数据库https://github.com/michenriksen/gitrob weakfilescan Python开发,多线程,猪猪侠开 ...

  7. HTML5实战与剖析之字符集属性(charset和defaultCharset)

    HTML5对字符集属性也进行了更新,其中charset和defaultCharset属性就是HTML5中新添加的字符集属性.有关charset和defaultCharset属性的具体讲解尽在HTML5 ...

  8. 【转】django 与 vue 的完美结合 实现前后端的分离开发之后在整合

    https://blog.csdn.net/guan__ye/article/details/80451318   最近接到一个任务,就是用django后端,前段用vue,做一个普通的简单系统,我就是 ...

  9. 转:[译]CSV 注入:被人低估的巨大风险

    转:https://yq.aliyun.com/articles/225847 原文地址:The Absurdly Underestimated Dangers of CSV Injection 原文 ...

  10. canconfig 移植记录

    can 在Linux 里面是作为一个网络设备存在的,记录一下 canconfig 移植过程. 一. 下载 canutils 和 libsocketcan libsocketcan 地址: http:/ ...