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

这个小节,主要是总结安装过程的各种行为如何使用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. python 学习笔记2 匿名函数

    # 匿名函数 lambda a,b : a+b# a.j.from functools import reduce students = [{'name': '张三', 'age': 18, 'hei ...

  2. windows下使用pycharm配置python的virtualenv环境

    环境:win10 python2.7.10(64) 在path中配置python环境 注意:我这边的环境是py2和py3共存的,但是我这边默认使用的是py2. 在virtualenv环境中安装指定的p ...

  3. Windows 7中的“帮助和支持”无法打开怎么办?

    win7 X64 将下面的代码导入注册表 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.xml] @="xmlfile&q ...

  4. 视觉slam十四讲第8章课后习题3+稀疏直接法程序注释

    版权声明:本文为博主原创文章,转载请注明出处: http://www.cnblogs.com/newneul/p/8571653.html 3.题目回顾:在稀疏直接法中,假设单个像素周围小块的光度也不 ...

  5. pycham设置头文件内容

    pycharm软件 设置头文件方法 File->settings->Editor->File and Code Templates->Python Script  #!/usr ...

  6. NetworkX包

    官方教程 NetworkX是一个创建,操作,研究复杂网络的结构,动态,功能的python包. #创建一个network import networkx as nx G = nx.Graph() #no ...

  7. Codeforces_723_A

    http://codeforces.com/problemset/problem/723/A 取中间那个数就可以了,答案为最大值减最小值. #include<iostream> #incl ...

  8. xdebug插件攻击

    title: xdebug插件攻击 date: 2017-09-30 17:08:38 tags: 前一阵突然看到一个有关于xdebug的一个攻击面,不得不说这个想法还是很有意思的.自己搭环境记录一下 ...

  9. jenkins SSH发布文件 Publish over SSH

    jenkins 构建完成后需要一键发布,结构如下 A服务器 svn B服务器 jenkins C服务器 应用服务器 B从A拉取代码后打包成war,然后向C服务器拷贝war包 这里解决的就是远程拷贝问题 ...

  10. expect 运行脚本文件 执行postgres数据库操作

    #!/bin/bash /usr/bin/expect << EOF spawn /usr/local/pgsql/bin/.sh expect "*postgres:" ...