Wix 快速开发安装包程序 (二)安装行为
上一小节,主要介绍了构建最小级别的安装包,这个安装包所做的事情很简单,主要是打包好一些文件,然后放到用户机器的某个位置下面。
这个小节,主要是总结安装过程的各种行为如何使用Wix编写。
一、写注册表
安装过程经常会给注册表写东西,这个方法是通过 RegistryKey 元素实现的,通常用 Root 和 Key 来确定写注册表的位置,然后子元素
RegistryValue 来在这个位置下面写一条一条的项目,Name 和 Value 来确定这一项。
<DirectoryRef Id="TARGETDIR">
<Component Id="RegistryEntries" Guid="3609F43C-C313-4B87-AD47-28B34FB4FE3A">
<RegistryKey Id='FoobarRegInstallDir' Root='HKCU' Key='Software\MyInstallerReg\Foobar 1.0' Action='createAndRemoveOnUninstall'>
<RegistryValue Type='string' Name='TestInstallDir' Value='[INSTALLDIR]'/>
<RegistryValue Type='integer' Name='TestNumber' Value='123'/>
</RegistryKey>
</Component>
</DirectoryRef>
安装完成后,搜索注册表,应该能看到上面的两条

二、 Action
1. 内置行为
用例一:安装完成之后,要求用户重启机器
<InstallExecuteSequence>
<ScheduleReboot After='InstallFinalize'>Version9X</ScheduleReboot>
</InstallExecuteSequence>
用例二:使用内建元素 CustomAction
注意到我们之前给用户安装过一个文件 FoobarAppl10.exe,这个文件在wix通过File元素指明,注意它的Id是FoobarEXE

那么我想在安装完成之后,运行这个exe,就可以这样写:

如上,通过FileKey 找到要执行的文件。
还有一个例子,用NotePad打开安装后的一个文件 Readme.txt,通过Property找到Notepad.exe, 然后再传参数Readme.txt,这样就可以打开了。
实际效果,安装完成之后:

2. 通过 CustomAction 注入c#代码,并在安装应用程序时执行
上面介绍的方法毕竟使用起来比较受限,wix允许我们写c# code 并在安装时执行
1. 用VS创建工程

2. VS帮我们添加了一个cs文件,注意wix能执行的方法都要加Attribute CustomAction

参数 session 相当于上下文环境,先测一个最简单的方法,session.Log 方法,这个是在安装包按安装过程中,向日志文件写东西的接口。
更多的session信息参考微软文档,https://docs.microsoft.com/en-us/windows/win32/msi/session-object
3. 编译完成后得到产物 MyCsutomAction.CA.dll

4. 添加到我们的安装包工程里

5. 添加一个文件,专门定义刚才的CustomAction, 注意BinaryKey是为了找到那个dll,DllEntry 是你要调用的方法名


6. 使用的地方

使用命令安装做出来的安装包,并指明生成日志文件到当前目录
;正常安装
msiexec /i SetupProject1.msi ;安装后写日志,MyInstaller.log
msiexec /i SetupProject1.msi /l*v MyInstaller.log
观察日志文件,发现CustomAction 已经被执行了


3. 调试安装包和 CsutomAction 注入的代码
实际开发中注入的c# 不可能没有bug,除非它真的太简单,所以必须得会调试
1. 为了测试,加点Property在文件里

2. 在c# custom action这边,写一句代码,把VS启动起来

3. 实际安装中,会弹出用VS打开源代码工程,选好了就能调试代码。
注意session中可以拿到之前定义的几个Property,Name Age Address


Wix 快速开发安装包程序 (二)安装行为的更多相关文章
- linux多种安装包格式的安装方法
linux多种安装包格式的安装方法 一.rpm包安装方式步骤:1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录: 2.打开一个终端,su -成root用户: 3.cd s ...
- IS2009制作Oracle 静默安装包(二) 感谢空白先生特许授权
原文:IS2009制作Oracle 静默安装包(二) 感谢空白先生特许授权 上一篇: IS2009制作Oracle 静默安装包(一)感谢空白先生特许授权本文经原作者特许授权于海洋女神发布,转载请务必注 ...
- JDK8安装包的下载安装方式以及环境变量的配置
前面我们介绍了 <Java是什么?>.<OracleJDK是什么?OracleJDK的版本怎么选择?>.<OpenJDK是什么?>以及<OracleJDK 与 ...
- 快速开发微信小程序
image.png 最近婷主在做微信小程序.自己的微信公众号也需要添加点料,乘着这次放假,把微信小程序研究了下.虽然没有做什么很强大的功能,不过好歹自己的公众号也有了微信小程序.够用即可. 1.需要先 ...
- Matlab 多个版本的安装包下载、安装和激活教程 + 多套数学建模视频教程
目录 1. 关键词 1.1. 说明 2. 下载地址 2.1. OneDrive高速云盘 2.1.1. 多版本的安装包 2.1.2. 多套数学建模的视频教程 2.2. 百度云 3. 安装教程 1. 关键 ...
- Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架
Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 历史 Bootstrap 是由 Twitter 的 ...
- vs2015 制作安装包额外需要安装的软件VSI_bundle
vs2015 制作安装包额外需要安装的软件VSI_bundle 下载地址:http://files.cnblogs.com/files/sdner/VSI_bundle.rar
- RHEL6下获取安装包(RPM)而不安装的方法
RHEL6下获取安装包(RPM)而不安装的方法 有时候我们只能在某个机器上网获得RPM安装包,如何将RPM包在不能上网的内网机器安装,就需要能将安装包下载到本地而不安装,然后再把这些包复制到内网机器, ...
- Python大礼包-安装视频+pycharm编译器|Mac版本+64位+32位版本pycharm安装包+python安装|内附网盘链接带提取码
pycharm安装包+环境安装打包带走,附带视频教程与pdf教程. (下载链接在本文最下方) 多的不说,直接上图: Python大礼包-安装视频+pycharm编译器详细文件: 点击此处进入下载地址 ...
随机推荐
- spring4.2.4整合ehcache
最近工作中遇到个功能需要整合ehcache,由于spring版本用的是4.2.4,而在ehcache官网找到的集成配置文档是spring3.1的,因此配了几次都不成功,在历经一番波折后终于成功集成了s ...
- Mybatis基础(二)
Mybatis连接池 Mybatis连接池提供了三种配置方式,配置的位置在SqlMapConfig.xml的dataSource标签中,其type属性就是配置连接池的种类.type的可取值 1.POO ...
- Python程序打包EXE遇到的各种坑
废话不多说,反正我现在还没成功,不过我记录一下遇到的坑! 1:安装相关库太慢 解决办法:离线安装 在一大堆教程中,要安装好几个库,但是有些库用pip在线安装一直卡死(看不到进度条,就当卡死吧),这个问 ...
- qt creator源码全方面分析(2-1-1)
目录 C++的策略/二进制兼容性问题 定义 ABI注意事项 可做与不可做 库程序员的技巧 位标志 使用d指针 故障排除 在没有d指针的情况下将新数据成员添加到类中 添加已重新实现的虚函数 使用新类 向 ...
- 10、VLAN
VLAN综述:1.分段2.灵活性3.安全性 一个VLAN=一个广播域=逻辑网段(子网) VLAN运作:1.每个逻辑的VLAN就象一个独立的物理桥2.交换机上的每一个端口都可以分配给不同的VLAN3.默 ...
- 深入浅出 Serverless:优势、意义与应用
Serverless 是炙手可热的技术,被认为是云计算发展的未来方向.尤其是在前端研发领域,使用 Node 开发云函数,可以让前端工程师更加专注于业务逻辑,实现全栈工程师的角色转变. Serverle ...
- 时序数据库 Apache-IoTDB 源码解析之前言(一)
IoTDB 是一款时序数据库,相关竞品有 Kairosdb,InfluxDB,TimescaleDB等,主要使用场景是在物联网相关行业,如:车联网.风力发电.地铁.飞机监控等等,具体应用案例及公司详情 ...
- golang学习笔记(一):包,变量,函数
欢迎访问我的博客和github! go 语言学习笔记第一弹,来自 gotour ,以后要常写笔记,把自己学习笔记记录下来,就算只是笔记也要多写. 好记性不如烂笔头,也要多锻炼自己的写作能力. 说实话, ...
- [python]Mongodb
文档: http://api.mongodb.com/python/current/tutorial.html 安装: 官网直接下载安装, mac上brew安装的下载太慢, 打算手动安装 使用: 开启 ...
- 深入JVM垃圾回收机制,值得你收藏
JVM可以说是为了Java开发人员屏蔽了很多复杂性,让Java开发的变的更加简单,让开发人员更加关注业务而不必关心底层技术细节,这些复杂性包括内存管理,垃圾回收,跨平台等,今天我们主要看看JVM的垃圾 ...