上一小节,主要介绍了构建最小级别的安装包,这个安装包所做的事情很简单,主要是打包好一些文件,然后放到用户机器的某个位置下面。

这个小节,主要是总结安装过程的各种行为如何使用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 快速开发安装包程序 (二)安装行为的更多相关文章

  1. linux多种安装包格式的安装方法

    linux多种安装包格式的安装方法 一.rpm包安装方式步骤:1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录: 2.打开一个终端,su -成root用户: 3.cd s ...

  2. IS2009制作Oracle 静默安装包(二) 感谢空白先生特许授权

    原文:IS2009制作Oracle 静默安装包(二) 感谢空白先生特许授权 上一篇: IS2009制作Oracle 静默安装包(一)感谢空白先生特许授权本文经原作者特许授权于海洋女神发布,转载请务必注 ...

  3. JDK8安装包的下载安装方式以及环境变量的配置

    前面我们介绍了 <Java是什么?>.<OracleJDK是什么?OracleJDK的版本怎么选择?>.<OpenJDK是什么?>以及<OracleJDK 与 ...

  4. 快速开发微信小程序

    image.png 最近婷主在做微信小程序.自己的微信公众号也需要添加点料,乘着这次放假,把微信小程序研究了下.虽然没有做什么很强大的功能,不过好歹自己的公众号也有了微信小程序.够用即可. 1.需要先 ...

  5. Matlab 多个版本的安装包下载、安装和激活教程 + 多套数学建模视频教程

    目录 1. 关键词 1.1. 说明 2. 下载地址 2.1. OneDrive高速云盘 2.1.1. 多版本的安装包 2.1.2. 多套数学建模的视频教程 2.2. 百度云 3. 安装教程 1. 关键 ...

  6. Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架

    Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 历史 Bootstrap 是由 Twitter 的 ...

  7. vs2015 制作安装包额外需要安装的软件VSI_bundle

    vs2015 制作安装包额外需要安装的软件VSI_bundle 下载地址:http://files.cnblogs.com/files/sdner/VSI_bundle.rar

  8. RHEL6下获取安装包(RPM)而不安装的方法

    RHEL6下获取安装包(RPM)而不安装的方法 有时候我们只能在某个机器上网获得RPM安装包,如何将RPM包在不能上网的内网机器安装,就需要能将安装包下载到本地而不安装,然后再把这些包复制到内网机器, ...

  9. Python大礼包-安装视频+pycharm编译器|Mac版本+64位+32位版本pycharm安装包+python安装|内附网盘链接带提取码

    pycharm安装包+环境安装打包带走,附带视频教程与pdf教程. (下载链接在本文最下方) 多的不说,直接上图: Python大礼包-安装视频+pycharm编译器详细文件: 点击此处进入下载地址 ...

随机推荐

  1. mongodb centos7 安装

    安装MongoDB的方法有很多种,可以源代码安装,在CentOS也可以用yum源安装的方法.由于MongoDB更新得比较快,我比较喜欢用yum源安装的方法.64位Centos下的安装步骤如下: 1.准 ...

  2. JAVA String对象和字符串常量的关系解析

    JAVA String对象和字符串常量的关系解析 1 字符串内部列表 JAVA中所有的对象都存放在堆里面,包括String对象.字符串常量保存在JAVA的.class文件的常量池中,在编译期就确定好了 ...

  3. python书籍推荐以及杂七杂八

    黄哥推荐学习Python 10本好书 Python3网络爬虫开发实战 github daily-reading 想对大家说的话 POJ 算法练习 http://openjudge.cn/ http:/ ...

  4. ARTS Week 10

    Dec 30, 2019 ~ Jan 5, 2020 Algorithm Problem 88 Merge Sorted Array (合并两个有序数组) 题目链接 题目描述:给定两个有序数组 num ...

  5. HDU 6562 lovers 2018CCPC吉林H(线段树)

    题意: 初始n个空串,m个操作: 1.给[l,r]的所有字符串头尾加一个‘d’,将原字符串x变为dxd 2.求[l,r]所有字符串代表的数字之和mod 1e9+7 思路: 据说是硬核线段树.. 对于线 ...

  6. 【TensorFlow】TensorFlow基础 —— 模型的保存读取与可视化方法总结

    TensorFlow提供了一个用于保存模型的工具以及一个可视化方案 这里使用的TensorFlow为1.3.0版本 一.保存模型数据 模型数据以文件的形式保存到本地: 使用神经网络模型进行大数据量和复 ...

  7. Leetcode题解 - 部分中等难度算法题解(56、957、825、781、1324、816)

    957. N 天后的牢房 思路: 模拟变换,当N天结合后返回 => 当N非常大的时候,超时 => 一般N很大的时候,这种题目必然存在循环,所以记录找过的状态,一旦出现已经访问过的状态可立即 ...

  8. 【Java并发工具类】Java并发容器

    前言 Java并发包有很大一部分都是关于并发容器的.Java在5.0版本之前线程安全的容器称之为同步容器.同步容器实现线程安全的方式:是将每个公有方法都使用synchronized修饰,保证每次只有一 ...

  9. tomcat 访问权限设置

    1.全局设置,设置允许某些IP能够访问到tomcat服务器,或不能访问tomcat服务器 只需要编辑tomcat的server.xml,增加适当代码即可. 修改如下:在<Host>  &l ...

  10. python OpenCV安装

    linux系统 yum install -y libSM.x86_64 libXext.x86_64 libXrender.x86_64 pip install numpy Matplotlib pi ...