1 of 35
一个完整的安装程序实例—艾泽拉斯之海洋女神出品
前言
Installshield 可以说是最好的做安装程序的商业软件之一,不过因为功能的太过于强大,以至于上手和精通都不是容易的事情,之前都是用
Installshield 的 Project Assistant 对付过去的,这次做这个安装程序,为了实现一些功能,必须写代码,国内外现成的资料很少,而且很多都语焉不
详,自己反复啃了多次,对比 Installshiel 自带的 help,才明白资料所表达的意思。这个安装程序虽然比较简陋,在行家眼里可能是小菜一碟,但
是也花了笔者一个星期的时间,阅读了很多资料,啃了好几天英文 help,集成了很多先驱者的经验,也费了自己不少心血做成的,对每一段代码
的用处、每一个用到的函数都进行了详细的说明,因此转载时请务必保留转载出处和由艾泽拉斯之海洋女神出品的字样;如需刊登,请与作者联
系。
在此要感谢吞硬币的小猪,天下晓明,余满青,海洋 C++乐园(此海洋不是彼海洋)等大虾在互联网上的无私奉献,他们的贴子和博客给了我很
大启示。
因为本人是做 java 出身的,因此对这种类 C++语言还是第一次接触,有理解不当之处,请朋友们指正。欢迎 Email 至 little_fairycat@126.com
2 of 35
第一部分:基本设置.................................................................................................................................................................................................................... 3
第二部分:脚本编程.................................................................................................................................................................................................................. 12
1. 显示软件许可协议...................................................................................................................................................................................................... 13
2. 判断是否安装了本软件所需要的先决软件或运行环境 .......................................................................................................................................... 15
3. 用户的输入信息、所选安装路径、所选安装组件显示在安装界面上 .................................................................................................................. 16
4. 根据用户选择的组件,从外部文件夹拷贝相应的文件到安装目标路径的文件夹中 .......................................................................................... 20
5. 如果用户选择了文档 feature,则把文档文件夹拷贝进来,并且对该文件夹进行盲读,为每一个文档创建一个在开始菜单下的快捷方式21
6. 在安装结束时,显示 readme.txt 文件....................................................................................................................................................................... 23
7. 在安装结束时,允许用户选择是否显示桌面快捷方式 .......................................................................................................................................... 25
8. 在安装结束后,启动指定的程序.............................................................................................................................................................................. 25
9. 安装结束后,为 JDK 设置一个环境变量................................................................................................................................................................. 26
10. 完美卸载.................................................................................................................................................................................................................. 27
第三部分:其他.......................................................................................................................................................................................................................... 30
1. 修改显示界面的风格.................................................................................................................................................................................................. 30
2. 编译打包...................................................................................................................................................................................................................... 30
3 of 35
正文
需求:公司做了一个软件产品,
1. 该软件运行需要 JDK 环境(不是 JRE,因为该软件要向 windows 注册一个服务,用到了 JavaService,JDK 才支持这个功能;不过这里侧重于
判断是否安装了某软件是否安装,而不是纠缠于该装 JDK 还是该装 JRE);
2. 由于是 Server-Client 形式的,需要允许用户选择安装组件,比如 A 机只装 Server 端,B 机只装 Client 端;
3. 文档不打包在安装程序里,直接存放在光盘文件夹下方便用户查看,同时允许用户指定是否安装文档到计算机上(为什么这样做,后面说明
详细原因);
4. 该软件会以授权形式发放给用户,不同的用户,软件本身可能相同,而不同的只是授权文件和一些配置,因此希望授权文件和配置文件不打
包在安装程序里,而直接存放在光盘里,以减少可能的重复打包安装程序的劳动;
5. 在安装完毕后,希望能自启动程序(因为该软件需要在安装完毕后启动一个程序,该程序实现向 Windows 注册服务的功能,该程序最好由安
装程序启动,而不是由客户手动启动)。
6. 希望有反安装程序
本文提到的“外部”指不打包在安装程序里的,与安装程序一起存放在光盘里的一些文件夹,这些文件夹包含了安装中所需要的文件,同时也可
能有其他用途,因此不适合直接压缩打包在安装程序里。
该实例实现了如下功能:
1. 显示软件许可协议
2. 判断是否安装了本软件所需要的先决软件 JKD1.6.0_04,如无,则启动外部安装程序进行安装(同样原理可以用来判断是否安装了其他软件,
只要该软件在注册表中有键值)
3. 安装允许用户选择需要安装的组件
4. 用户的输入信息、所选安装路径、所选安装组件将显示在安装界面上(Installshield 虽然自带了此界面,但是默认是显示为空的,需要写脚本
来显示信息)
5. 根据用户选择的组件,在开始菜单显示程序的快捷方式(同样适用于桌面快捷方式,后面做详细说明)
6. 根据用户选择的组件,从外部文件夹拷贝相应的文件到安装目标路径的文件夹中
7. 根据从外部拷贝进来的文件,创建快捷方式(这里主要是拷贝文档,并在开始菜单中创建快捷方式)
8. 在安装结束时,显示 readme.txt 文件
9. 在安装结束后,启动指定的程序
10. 完美卸载
笔者所用的环境为 Installshield 12 Premier Edition,Windows XP with SP2, 该环境下建立的工程可以直接使用在 Installshield 2008 Premier Edition 下,
Installshield 2008 在打开 Installshield 12 所建的工程时会提示你是否需要进行 Upgrade,确认即可,软件会自动为你进行升级,很方便。
下面我们一步一步来建立一个基本的工程,并且使用脚本来完善和丰富所需功能
第一部分:基本设置
1. 打开 Installshield 12 Premier Edition,新建一个 Installscript MSI Project,这种被称之为半脚本程序,因为兼具 Basic Project 基本类型和 Installscript
Project 全脚本类型两者的优点,我比较喜欢用。像我这样需求的,既要用到 Wizard 的便利,又想写一点脚本来实现一点自定义操作的,就比
较适合用这种类型啦。
选择类型为 Windows Installer | InstallScript MSI Projcet,输入工程名,指定工程所在的文件夹。
2. 界面会切换到 Project Assistant,我们先从这里开始把工程的基本组件和基本文件建立好。
4 of 35
3. 在 Project Assistant 界面的底部,会有一个引导动作条,在建立该工程的基本结构和文件时,我们都将在此界面进行操作,下文都将以“引导
条”来指代这个引导动作条。
4. 点击引导条上的 Application Information
这里输入:
公司名,公司名将会出现在 Setup.exe 的注解中
软件名,将会出现在安装过程的左上角标题栏上
版本号,没看到在哪,不过自己比较方便地知道自己在编译哪个版本的软件
公司网址,没看到在哪,而且如果该公司没有网址呢?而且这里有点 bug,好像默认的值总是会报一个 String_ID1 为空的错误,自己输入一个网
址就不会报错。
是否在你创建了更新时自动通知最终用户,没用过,我都选了 No。
选择一个图标,这个图标会出现在“添加或删除程序”里,我一般用默认的,当然你可以替换成自己想要的图标。
5. 点击引导条上的 Installation Requirement
这里选择对操作系统和一些软件的需求。根据自己需要来选择是否要求操作系统的版本,已经是否要求安装了某些软件。
6. 点击引导条上的 Installation Architecture
这是个十分有用的设置,对于本文所用的分布式软件来说非常合适,分布式软件的每个组件可以设置为一个 Feature,用户可以自由选择安装某些
功能。
将选项 Do you want to customize your Installation 选择为 Yes。
点击选中根节点 Installation Architecture,点击 New 创建新的 Feature,可以为每个 Feature 指定新名称。
还可以在 Feature 下创建子 Feature,比如如果文档 Feature 下包括软件本身文档,和软件所需的运行环境的文档,那么可以创建两个子 Feature,分
别包含两种文档,用户在安装时就可以选择安装部分或者全部文档了。这里我们没有用到子 Feature,用途和普通 Feature 一样。
5 of 35
这里,建立好所有 Feature 后,我们将切换到 Installation Designer 做一个设置
找到 Installation Designer 页面上左边导航树 Organization | Features 分支,你会看到这里 Features 都显示为原始的名称,而非我们改过的名字,因为
Feature 有 Name 和 Display Name 两种名称,我们刚才改的不过是 Display Name,为了便于查看和使用,我们在这里把 Name 也改一下
注意 Name 不可以有空格,可以使用下划线
继续切换回 Project Assistant
7. 点击引导条上的 Application Files
我们将在这里对安装路径进行微调,并且为每个 Feature 指定需要安装的文件
这里我不想使用 Program Files | Company Name | Product Name 这个路径,我想使用 Program Files | Product Name,我直接点击选中 My Product
Name[INSTALLDIR]拖动到 ProgramFileFolder 下,还可以直接将 My Product Name 改成自己想要的文件夹名字
- 1
- 2
前往页