InstallShield软件详解

InstallShield使用说明

文章目录

  • InstallShield使用说明
    • 术语解释
    • 工程介绍
      • InstallScript
      • Basic MSI
      • InstallScript MSI
      • 如何选择适合的工程
    • 概念介绍
    • 软件功能介绍
      • General Information
        • Project File Format
        • Product Name
        • Product Version
        • Enable Maintenance
        • InstallDir
        • Display Icon
        • Disable Change Button
        • Disable Remove Button
      • Setup Design
      • Features
        • display name
        • description
        • destination
        • display
        • feature events
      • Component
        • destination
        • destination Permission
        • Never Overwrite
        • 64-bit component
      • Setup Types
      • Files and Folders
      • Redistribution
      • Shortcuts
      • Registry
      • InstallScript
      • Custom Actions and Sequences
      • Support Files/Billboards
      • Dialogs
        • 窗口
        • 皮肤
      • String Editor
      • Path Variables
      • Upgrades
      • Releases
        • 编译配置
      • Direct Editor
    • 脚本介绍
      • 获取系统信息
      • UI整体设定
      • 注册表设置
      • 执行外部程序
      • 设置进度信息
      • 系统事件
    • 构建工程的基本过程
      • 资源准备
      • 结构设计
      • 资源组织
      • 界面设计
      • 脚本编写
      • 编译
        • Build
        • Setup.exe
        • Signing
    • 调试

术语解释

构建:工程中的bulid操作,根据工程文件对相关资源和脚本进行编译,打包为安装包。

脚本:未特指的情况下,指代installshield中的installscript脚本方式。

IS:在此文档中,用于代表InstallShield的缩写。

工程介绍

InstallShield支持多种安装工程,目前只介绍安装几个常用工程,其他工程有待后续学习和补充。

InstallScript

自定义的安装过程,不依赖windows installer,脚本方法更灵活。

Basic MSI

基于windows installer的标准msi工程,其使用windows Installer engine执行标准的msi action序列,通过action控制行为。

InstallScript MSI

基于msi标准的脚本工程。其中包含windows Installer engine和InstallScript engine,除标准msi行为外,能自定义UI界面流程,接收msi事件并执行InstallScript脚本代码。

如何选择适合的工程

最根本的选择依据,就是选用那种安装引擎进行安装管理。

Basic Msi 工程

  • 满足windows要求;
  • 能够最大限度的兼容系统管理工具,结构简单,易于转换;
  • 不用编写脚本,能自定义action进行操作;
  • 升级已有的Basic Msi工程;

InstallScript 工程

  • 对交互有较高要求;
  • 安装时能使用全屏广告板;
  • 能通过脚本更灵活的控制安装行为;
  • 安装前后进行其他自定义操作;
  • 升级已有的脚本工程;

InstallScript MSI 工程

  • 满足windows要求;
  • 对交互有较高要求;
  • 能通过脚本更灵活的控制安装行为(可控性弱于脚本工程);
  • 安装前后进行其他自定义操作;
  • 升级已有的脚本Msi工程;

概念介绍

1
*
1
*
1
*
1
*
project
feature
component
file
regset

Feature:要素,组成工程的基本单元,可自嵌套。

Component:组件,组成feature的基本单元,对应文件管理的基本单元。

软件功能介绍

General Information

该面板中,提供项目通用信息的设置。

Project File Format

改参数决定了工程文件的存储形式。推荐使用xml形式,工程文件(.ism)可以xml形式打开,明文内容,适合编辑操作。

Product Name

工程的产品名称,会以属性的方式存储在工程中。在部分dialog的界面中,以%P调用,在脚本中,以IFX_PRODUCT_NAME调用。

Product Version

工程的产品名称,会以属性的方式存储在工程中。在脚本中,以IFX_PRODUCT_VERSION调用。

版本号组成为结果为:主版本.小版本.构建编号.修订编号。版本取值范围最大值为255,编号最大值为216-1。(修订编号不用来区分不同的产品版本)

版本号在安装工程内,起着重要的作用。当安装程序运行时,会将版本信息通过安装引擎注册到系统中,以此作为程序升级的一个依据。

Enable Maintenance

该参数通过影响系统默认属性removeonly的值,控制setup.exe的卸载行为。

InstallDir

程序的安装目录的初始值,会以属性方式存储在工程中。在windows安装程序中,一般设定到[ProgramFilesFolder](根据程序位数会有不同)目录下。

Display Icon

程序显示的Ico图标。具体表现在安装完成后,在程序列表中显示的图标。设置的图片路径必须是在目标机器上存在的,否则对应的图标会使用默认图标,建议使用系统目录或安装目录保存相关资源。

Disable Change Button

设置程序是否支持更新操作。具体表现在,在程序列表中是否可以进行修改操作。

Disable Remove Button

设置程序是否支持卸载操作。具体表现在,在程序列表中是否可以进行卸载操作。

Setup Design

用于设计安装包的逻辑结构,可在面板中进行feature、component的添加和删除,以及属性的设置。

Features

display name

feature的显示名称。会在customsetup dialog中显示。

description

feature的描述信息。会在customsetup dialog中显示。

destination

feature所关联的目录,该值会重写产品的目标路径。当用来计算勾选的feature所需要使用的磁盘空间时会用到。一般情况下,组件的关联目录应该和feature的关联目录保持一致。

display

是否在customsetup dialog中的树形图中显示feature,用于自定义安装交互勾选。

feature events

feature触发的事件绑定。

Component

destination

组件所关联的目录。

destination Permission

对关联目录的权限设置。该值会重写feature的目标路径。

Never Overwrite

设置是否在文件释放过程中,对已存在的文件进行复写。

64-bit component

设置组件是否标记为64位。会影响组件识别目录和注册表的路径。

Setup Types

设计对外交互的安装方式,主要是对feature的组合。

Files and Folders

文件及目录结构树。该树图是对各个feature和component合并后的总览图,比较适合做安装资源文件的管理。

除了单个文件添加的方式,常用的添加文件的方式为动态文件链接(dynamic file linking)。通过动态链接,可以直接引用指定的文件夹,获取文件夹内的文件,按照设定规则过滤文件。

Redistribution

设置相关的依赖软件,可以绑定到指定的feature上。

Shortcuts

设置快捷方式。

Registry

程序的注册表树图。该树图是对各个feature和component合并后的总览图,比较适合做注册表的操作。

支持reg形式的导入和导出,可以通过脚本对键值进行批量创建。

需要注意键值的图标代表了不同的操作方式,需要根据应用需求进行选择。

  • 安装时创建,卸载时空键删除。
  • 安装时创建,卸载时保留。
  • 安装时创建非空键,卸载时删除。
  • 安装时创建,卸载时删除。

在赋值过程中,可以使用系统变量进行赋值,语法为#%+变量名,例如#%%TEMP%用来获取临时路径,等同于访问%TEMP%的值。如果使用的是MSI类型的工程,可以使用installer属性进行赋值,语法为[PropertyName],关于可使用的属性,参看微软官网,Property Reference - Win32 apps | Microsoft Docs。

InstallScript

自定义脚本的执行。详见帮助文档。在这里插入图片描述
InstallShield软件详解_第1张图片
InstallShield软件详解_第2张图片
InstallShield软件详解_第3张图片
InstallShield软件详解_第4张图片
InstallShield软件详解_第5张图片
InstallShield软件详解_第6张图片
InstallShield软件详解_第7张图片
InstallShield软件详解_第8张图片
InstallShield软件详解_第9张图片
InstallShield软件详解_第10张图片
InstallShield软件详解_第11张图片
在这里插入图片描述
InstallShield软件详解_第12张图片
InstallShield软件详解_第13张图片
InstallShield软件详解_第14张图片
InstallShield软件详解_第15张图片
InstallShield软件详解_第16张图片
InstallShield软件详解_第17张图片
InstallShield软件详解_第18张图片

Custom Actions and Sequences

msi的action序列,是msi工程所特有的。每个action通过数字编号,决定对应执行顺序。

Support Files/Billboards

安装工程的支持目录,可以用来存放临时数据文件和UI交互中所使用的的程序。

目录中支持添加相关资源,定制自己安装程序的初始化显示的splash界面和资源释放时的界面。

当安装程序运行时,会在系统临时目录中创建两个由guid命名的临时目录。由于是通过guid创建的,所以每次运行都是产生的目录名都是不固定的。

通过任务管理器,可以看到其实启动了两个安装引导程序。一个是双击打开的对应程序,另一个由上一个引导程序所调用打开的位于临时目录中的引导程序。而另一个目录就是SupportDir的所在。

当安装程序运行时,会自己释放临时安装文件,再将临时资源拷贝到SupportDir,之后UI交互界面才会弹出。

当安装程序结束后,先将SupportDir清理,然后再清理安装临时目录。

Dialogs

UI设计界面。在工程中,窗口界面显示和逻辑代码是分离的。该界面控制的是显示部分。

窗口

系统自带了多个默认样式的窗口,每个窗口对应有默认的脚本方法。当需要使用某个功能窗口时,可以在该界面对默认样式进行编辑,改变窗口的显示。之后如果有需要,再修改对应的脚本,控制内部逻辑。

当系统窗口无法满足我们的应用需求时,可以进行窗口的自定义,并为之创建对应的脚本方法,用于实现自定义的功能需求。可以从零开始,直接新建窗口,也可以对系统窗口进行克隆,作为基础。

无论是编辑过的系统窗口,还是自定义窗口,都支持导出导入的功能。通过导入导出,减少部分样式的迁移。需要注意的,这里的导入导出,改变的只有显示部分,并不涉及逻辑代码。在导入过程中,有可能还会出现资源覆盖的情况,需要谨慎处理。

由于dialog中使用的资源(文字和控件),都是通过id进行标识的,id一般也是系统通过固定格式自动生成的,所以也可以通过自定义id来规避资源覆盖的情况。dialog中使用的图片资源,都是以位图的方式来使用的,对bmp格式的图片支持得比较好,推荐使用bmp格式图片。

皮肤

支持设定窗口的皮肤,系统自带了6种样式的皮肤可供选择。installshield提供了皮肤制作的软件,由于未对其进行了解,暂不展开相关话题。

皮肤的选择切换,并不会影响设计窗口的显示样式,而是在构建之后进行显示。

我们推断一下皮肤应用的流程。系统窗口中存在系统指定ID的控件作为基础控件,构建过程中,对基础控件的样式资源进行替换,达到更改窗口显示样式的效果。根据此推断,我们在编辑窗口的过程中,不要对默认控件的ID进行变更,并将自定义的控件和系统控件区分开(通过ID命令)。

String Editor

字符串资源编辑器。

Path Variables

目录链接管理。该界面管理了工程中所用的目录链接。通过类型可以分为以下四种。

  • 系统预定义路径:是IS相关路径和windows系统相关的路径,这种类型的路径是不支持编辑的。
  • 注册表路径:通过注册表键值定义的路径。(目前只有32位注册表下的值能正常读取,64位的尚不能够)
  • 环境变量路径:通过获取系统环境变量定义的路径。
  • 标准定义路径:通过字符串定义的路径。

工程中不能识别相对路径,只能依赖于已有的路径变量进行拼接。可以通过<变量名>获取对应的路径,来进行路径组合。

Upgrades

升级设置。只有msi相关的工程由类似功能,因为这个功能是依托于Windows Installer的。

目前对该功能没有进行足够的测试,只做简单的介绍,不做详解。

[先参看code值相关内容](# code值作用)

升级方式可分为Major、Minor和Small三种。简单来区分,major方式,需要更改产品编号;minor方式,不需要改变产品编号,需要更改版本信息;small方式不需要更改产品编号和版本信息。

所以每次构建后,对安装过之前构建的安装包的客户机,都可以看作是Small方式的更新,会触发安装更新的过程。为了避免这样的情况出现,一般我们会禁用更新,安装时会提示已安装对应的产品。

Releases

编译配置

对当前的工程进行编译,形成安装文件。关于编译的操作设置,之后单独来讲,这里不展开说明。[参见编译章节](# 编译)

默认编译配置为Product Configuration 1\Release 1,可以通过修改配置名和编译名来修改对应生成的路径。

Direct Editor

对工程内表资源的直接编辑器。安装工程中的信息,都是通过表记录的方式存储的,可以通过该界面对相应的表格直接进行编辑。在编辑过程中要注意表之间的关联关系,否则容易出现修改内容不能成功应用或引起工程错误。

脚本介绍

关于API的详解,请参照帮助文档相关内容。

介绍脚本处理中一些技巧。

获取系统信息

利用SYSINFO结构体,能够获取安装机器的相关信息,可用来做一些条件校验。例如:

  • 验证操作系统信息、版本;
  • 验证IE版本;
  • 验证用户的权限;
  • 验证系统语言;

UI整体设定

  • DialogSetInfo:设置所有dialog窗体的显示样式;
  • SetTitle:设置所有dialog窗体的标题;
  • SetDialogTitle:设置对话框的显示样式;

注册表设置

//采用64位注册表
REGDB_OPTIONS = REGDB_OPTIONS | REGDB_OPTION_WOW64_64KEY;
//恢复32位注册表
REGDB_OPTIONS = REGDB_OPTIONS & ~REGDB_OPTION_WOW64_64KEY;

Dialog Source

窗口行为是通过循环获取对应的消息来实现的。通过WaitOnDialog方法,等待窗体内的控件的消息返回,根据控件id来判断相关操作。

执行外部程序

LaunchAppAndWait方法,可以通过winapi调用外部程序,可以对调用行为进行设置。但该方法不能和程序进行交互,只能获取程序的返回值。

设置进度信息

通过调用SetStatusWindow,可以设置进度条的信息和状态文字。

系统事件

目前只讨论共性触发事件,脚本功能可供使用的事件会更多。

  1. OnCanceling
    点击取消后,弹出提示框,进入完成窗体

  2. OnFirstUIAfter

    初次安装过程结束,进入完成窗体

  3. OnFirstUIBefore

    初次安装过程,界面流程

  4. OnInstallingFile

    单个文件安装时,可以设置自定义状态信息

  5. OnMaintUIAfter

    维护过程结束,进入完成窗体

  6. OnMaintUIBefore

    维护过程开始前,可以更改维护选项界面

  7. OnAbrt

    当进行抛出操作时,所进入的事件

构建工程的基本过程

资源准备

准备相关的安装资源,包括软件程序、图片、文档等,按目录组织好,尽可能分好类别。

结构设计

构建出对应的feature、component结构。通过feature的划分,划分出功能分块,用于和用户进行交互,各个feature之间相互独立,最少包含一个feature。component应代表一组有共性的文件,和对应的feature进行关联。

资源组织

将各种资源和component进行关联,根据用途放置到合适的目录中。例如UI交互过程中使用的资源,放置到supportdir中,软件程序放置到installdir中,配置文件放置到个人目录中。

界面设计

根据需求,设计UI交互界面。

在脚本事件中,控制界面交互的流程。界面交互流程涉及到初始安装和维护两部分,初始安装前对应OnFirstUIBefore事件,维护安装前对应OnMaintUIBefore事件,初始安装结束对应OnFirstUIAfter事件,维护安装结束对应OnMaintUIAfter事件。

脚本编写

根据实际需求,编写脚本处理安装过程。

编译

设置相关的编译参数。介绍几个目前较为常用的设置。

Build

  • Compression:资源文件是否已cab格式进行压缩。如果不压缩,资源会以散文件的形式存储。建议测试的时候,使用不压缩的方式,构建速度比较快。
  • File Name Format:构建时建议使用长路径。(但这个设置并不能解决路径限制的问题)
  • Language Dialog:安装时是否显示语言选择框。

Setup.exe

  • Setup Laucher:是否使用setup.exe作为引导。脚本msi工程,这个属性只能为yes。对于msi工程可以进行选择。
  • Setup.exe Icon File:设置Setup.exe的图标。
  • Required Execution Level:启动引导程序时所需要的权限。一般使用Highest Available获取用户的最高权限即可。如果必须以管理员权限启动,需要设置为Administrator级别。
  • Small Initialization Dialog:是否以精简窗口显示初始化窗口。如果没有对splash界面进行定制,建议设为是。
  • Password Protect Launcher:是否给setup.exe设置密码。
  • Use Custom Version Properties:是否为setup.exe设置自定义的详细信息,主要是设置版权属性和文件描述。

Signing

  • Digital Certificate Information:数字签名文件,目前我们使用的是pfx格式的文件。

调试

安装包构建完之后,可以对install script进行代码级的调试。支持断点、变量监控、

你可能感兴趣的:(InstallShield,windows,.net)