zoukankan      html  css  js  c++  java
  • 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='SoftwareMyInstallerRegFoobar 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

  • 相关阅读:
    还在使用golang 的map 做Json编码么?
    Golang 性能测试(2) 性能分析
    golang 性能测试 (1) 基准性能测试
    消息队列 NSQ 源码学习笔记 (五)
    消息队列 NSQ 源码学习笔记 (四)
    消息队列 NSQ 源码学习笔记 (三)
    消息队列 NSQ 源码学习笔记 (二)
    消息队列 NSQ 源码学习笔记 (一)
    你不知道的空格
    Supervisor 使用和进阶4 (Event 的使用)
  • 原文地址:https://www.cnblogs.com/chenyingzuo/p/12173474.html
Copyright © 2011-2022 走看看