背景

因项目需要,将最终交付的应用打包成安装程序。在VS2010之前版本,所有安装包制作,我都使用VS自带的安装程序。在VS2010后,因对VS的安装程序维护成本过高,依赖的VBScript脚本语言,因此微软官方放弃了两个很好用的东西,一个就是VS自带的安装程序,另一个是宏命令。取而代之的是Nuget的三方平台开放和鼓励政策。
InstallShield的版本分为:
Premier
Professional
Express
详细请看各版本间的区别
其中,Express功能受限,但提供了基本的VS功能支持,说白了是免费使用的,一般项目利用该版本就可以做出一个不错的安装程序,美中不足的是:没有多Feature的支持,也就是说,如果你的安装程序中需要选择安装多个选项,而且追求完美,仅希望最终发售给客户的时候就一个EXE文件,那么很抱歉,你可能要花钱买以上两个版本了。
基于以上原因,团队在选型安装包制作程序的时候选择了Installshield Limited Edition,原因有几个:

  1. VisulStudio的工程项目集成,方便的建立安装程

    1. 仅使用免费版本,当然网络上大多的是破解版本等,但因产品发布最终部署在国外多区域,因此慎重选择了全免费的功能
    2. 微软不支持自带的安装程序,既然不维护那么我们也没必要选择熟悉的方式
    3. 这东西的确好

InstallShield 下载

实际应用中,感觉2013比2012好很多,因后续版本没有在生产环境中使用过,因此没有发言权,因此推荐2013下载地址:
InstallShield Limited Edition 2013 点击下载

快速创建安装程序工程

右击解决方案->添加->新建项目

配置基本信息

创建完成项目后,工程中会出现InstallShield的向导界面。
第一个界面名称为“Application Information”,如下图:

配置好基本信息后,节“General Information”我们展开细节进行更细致的说明,如下图:

1,Product Code
产品的MD5算法标识,一般软件或应用程序都会产生一个该标识,WINDOWS系统等需要根据该标识来唯一区分不同的产品,该标识一经生成,请不要改动。会影响卸载等功能。
后边我们介绍的在WINDOWS快速启动中,建立卸载快捷方式时,会使用该标识。
2,SetUp Language
安装程序语言,如果是发布英文安装程序则选英文,如果是中文,则选择中文语言,该设置会影响到安装程序在安装过程中的提示信息等(提示信息可以自定义,我们后续说明)
3,INSTALLDIR
安装程序的安装目录,比如在安装过程中,我们自定义指向了产品安装路径在D盘某个路径下,在程序运行过程中或者获取注册表信息的时候,需要使用产品的根目录信息。这个非常有用,在注册表相关章节我会说明。
4,DATABASEDIR
数据库安装目录,因软件安装过程中,大多一键式完成,有的软件需要使用数据库数据,在配置完数据库账号等信息后,期望将数据初始化的脚本执行,完成数据库的初始化工作,确保软件能够正常使用,因此,这个路径请大家熟记,后续会有详细说明。
5,ALLUSERS
用户选项,也就是该软件在安装过程中,仅限于当前账户还是其他账户登录后,仍能使用。依据情况设定。
6,Require Administrative Privilages
安装程序是否需要管理员权限,当安装程序中有操作诸如注册表、被打包的程序中运行的时候需要管理员权限的时候,我们需要设定为TRUE。尤其在WIN7以上版本操作系统中,如果当前登录账号非管理员账号,会有很多权限受限,当勾选后,安装程序以管理员权限运行。
7,其他功能使用较少或者默认即可

打包必备环境

在打包软件或产品时,往往一个软件需要依赖很多环境,比如C++运行时、Framework等等,为了便于传递给用户,我们期望将所有信息嵌入到安装程序中,在用户没有安装的情况下,直接从安装程序中抽取。
1,Installation Requirements
软件的必备环境,该环境可提供的信息非常少,如果用Limited Edition,仅可以提供未安装提醒,无法自动安装,满足一般对环境要求不多,客户专业性比较强,可以自己去下载相关组件并安装的情况。
2,嵌入必备软件

勾选了以上的环境后,我们就可以选择必备环境嵌入操作了。
未勾选前,软件状态为“need to be download”当我们勾选后,提示下载,下载完成后,会提示“Installed locally”。
整个过程从原理上举例说明是,InstallShield 默认安装后,是没有Framwork 4.5的本地环境安装包的,当勾选后,依据列表中的项,它从自己的安装程序根目录,找到“SetupPrerequisites”文件夹,并找到对应的“Microsoft .NET Framework 4.5 Full.prq”的PRQ文件,根据文件中标识的下载地址,从微软官方中下载Framwork。
常用prq地址点击下载
以下是PRQ文件内容,我们可以分析下:

1)标识了注册表位置
2)标识了产品类型
3)标识了本机路径
4)标识了网络获取路径
5)标识了默认安装时使用的安装程序和启动参数

那我们看看本机的下载情况:打开InstallShield 安装目录

接下来,我们要把Framework嵌入到安装包中,右击查看属性:

1)Copy From Source Media
从本地拷贝文件,相当于在当前的安装程序外,你需要额外准备一个文件夹(也可能是多个),然后安装的过程中发现没有,就从指定的文件夹中抽取(大家可以回顾下老版本的vs的Setup文件夹,里边除了一个安装程序外,大量的臃肿文件)
2)Download From Web
如果没有安装,则从网络上下载,如果网络不可用,直接退出安装。
3)Extract From Setup.exe
从Setup.exe中抽取,也就是在生成安装包的时候,会自动的嵌入到安装程序中,当安装过程中需要该环境,且客户机没有安装的情况下,会从安装包中抽取。
这种方式带了一个不好的地方,就是如果依赖环境比较多,比较大,一个打包程序生成下来时间比较长、大小也是很大的。

通过以上的介绍,如果我们的安装程序中,需要自定义必备环境,那么仅仅需要拷贝随便一个prq文件,将里边的内容仔细修改后,按照以上的步骤进行操作即可。
需要说明的是,当InstallShield的“SetupPrerequisites”文件夹,如果多了一个PRQ文件,那么再工程中的“Redistributables”列表中,刷新下就可以看到该名称的依赖环境文件。
内容较多,拆开了第二篇,大家可以继续了解。

InstallShield 2013 应用笔记(一)相关推荐

  1. NEWS - InstallShield 2013 SP1发布

    2013的这个国庆假期期间,InstallShield厂商Flexerasoftware(中文名:福莱睿)发布了最新版本InstallShield 2013的SP1,由于这个升级包带来一些新的技术支持 ...

  2. Dynamic CRM 2013学习笔记(十八)根据主表状态用JS控制子表自定义按钮

    有时要根据主表的审批状态来控制子表上的按钮要不要显示,比如我们有一个需求审批通过后就不能再上传文件了. 首先打开Visual Ribbon Editor, 如下图,我们可以利用Enable Rules ...

  3. Dynamic CRM 2013学习笔记(一)插件输入实体参数解析

    1. 问题描述 最近新建了一个post事件的插件,传入的参数处理如下: 1: if (context.InputParameters.Contains("Target") & ...

  4. Dynamic CRM 2013学习笔记(四十三)流程6 - 自定义流程活动

    当我们在流程里添加步骤时,有一些默认的步骤,像创建.更新.发邮件等,但如果你想加一个里面没有的步骤,比如发SMS消息,或者调用一个外部的web service,怎么办?这时就只能自定义一个流程活动了. ...

  5. Dynamic CRM 2013学习笔记(四十二)流程5 - 实时/同步工作流(Workflow)用法图解...

    实时工作流跟插件一样,也是用事件执行管道来执行,能在pre,post或核心操作中执行.跟插件一样,不能在创建之前和删除之后执行.如果执行过程中有异常发生,会取消并回滚整个操作.实时工作流里所有的活动和 ...

  6. Dynamic CRM 2013学习笔记(三十三)自定义审批流4 - 规则节点 -有分支的流程处理...

    上次介绍过节点的基本配置<Dynamic CRM 2013学习笔记(三十二)自定义审批流3 - 节点及实体配置>,这次介绍下规则节点,因为有时流程里会有一些分支.合并,这时就要用到规则节点 ...

  7. fetchxml 汇总_Dynamic CRM 2013学习笔记(十七)JS读写各种类型字段方法及技巧

    我们经常要对表单里各种类型的字段进行读取或赋值,下面列出各种类型的读写方法及注意事项: 1. lookup 类型 清空值 var state = Xrm.Page.getAttribute(" ...

  8. Dynamic CRM 2013学习笔记(二十二)插件里调用WCF服务

    1. 添加service: 2.调用WCF BasicHttpBinding myBinding = new BasicHttpBinding(); myBinding.Name = "Ba ...

  9. NEWS - InstallShield 2013发布

    在2013年6月4日,新版本InstallShield 2013正式发布,新增或重点改善功能如下: Build both physical installations and virtual appl ...

最新文章

  1. linux之安装软件出现Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)解决总结
  2. Linux学习之CentOS(三十四)--配置域主DNS服务器
  3. shell脚本中$#、$0、$@等特殊变量的含义
  4. 营销型网站吸引用户说难也难,说简单也简单
  5. mac idea用自带的maven还是_苹果电脑自带截图工具怎么用?mac自带截屏工具使用技巧分享
  6. 第四步:【核心】工艺及BOM中心
  7. linux下c语言http服务器_服务器端开发经验总结 Linux C语言
  8. java中 queryparam_@PathParam 和 @QueryParam
  9. 数据行业工作3年,我靠这7个能力,成为领导青睐的高级数据分析师
  10. OrionX Panel for Mac(ps摄影自动化工作流插件)支持ps2021 big sur11 汉化版
  11. C#——后台管理端多级菜单的生成方式
  12. 安装ie9提示未能完成安装_Windows 7下安装IE 11失败,提示:Internet Explorer未能完成安装...
  13. 完全卸载Oracle数据库步骤
  14. (day 34 - 哈希表 or 双指针 )剑指 Offer 57. 和为s的两个数字
  15. 【数学建模】基于matlab GUI雾霾分析仿真系统【含Matlab源码 1503期】
  16. 武汉斗鱼php面试流程,斗鱼面试题
  17. Sum of the Line UPC5222 (容斥)
  18. .Net Core3.1 Centos离线部署
  19. (十二)采购与入库数据表
  20. Matlab之合并音频

热门文章

  1. 你想要的汽车ReID数据集
  2. Redis学习之hset命令
  3. 将服务器端口映射到本地端口
  4. 30招让你从头到脚都健康
  5. POI 控制 excel 生成图表的方式(二)
  6. Beosin威胁情报预警 | MyCrypto技术研究员在纸钱包网站WalletGenerator.net上发现严重漏洞...
  7. ROS学习-8 自定义动作编程的大坑
  8. 用友U8取年度销售平均价,最低/最高售价,最低/最高售价的销售数量
  9. strcpy_s使用
  10. 女人,要给足男人面子