installshield打包完整示例(3)

2019-01-27 18:48

看到此处,已经变成了English为默认语言了。

12. 点击引导条上的Build Installation。

打包安装盘的设置,本人从来不用这个选项,都用工具条上的Release Wizard。

至此,第一部分基本完成。如果是一些没有特别要求的安装包,这部分讲解的内容足够可以做一个基本的安装包了

在开始进行编程前,我们先明确一下我们要用编程来弥补前面设置的哪些功能的不足 1. 显示软件许可协议

2. 判断是否安装了本软件所需要的先决软件JKD1.6.0_04,如无,则启动外部安装程序进行安装(同样原理可以用来判断是否安装了其他软件,只要该软件在注册表中有键值)

3. 用户的输入信息、所选安装路径、所选安装组件将显示在安装界面上(Installshield虽然自带了此界面,但是默认是显示为空的,需要写脚本来显示信息)

4. 根据用户选择的组件,从外部文件夹拷贝相应的文件到安装目标路径的文件夹中

5. 根据从外部拷贝进来的文件,创建快捷方式(这里主要是拷贝文档,并在开始菜单中创建快捷方式)

6. 在安装结束时,显示readme.txt文件 7. 在安装结束后,启动指定的程序

8. 完美卸载

脚本编程这部分都将在Installer Designer这个界面进行。后面不再赘述。

Installshield大小写敏感,因此请严格按照示例上所写的大小写规则来书写。例:字符串变量STRING和string都支持,但是String不支持。

1. 显示软件许可协议

1. 添加许可协议文本

在左边导航树上找到Behavior and Logic | Support Files/Billboards选项。这个选项允许用户添加一些在安装过程中需要用到的文件。

中间的导航栏会显示对应的选项

在Support Files分支下,会显示一个Language Independent和所有你所选择的语言类型。

Language Independent意为,如果你在这里分支下做了设置,那么无论选择用何种语言安装,这个设置都会生效;而各个语言类型意为,如果你在某语言下做了设置,那么这个设置只有在选择了用这种语言安装的时候才会生效。

点击Language Independent,这次我们将在这个分支下进行试验。

在右边的Files栏中右键点击,在弹出菜单上选择Insert Files选项。

选择事先撰写好的许可协议的文本文件,插入到Files栏中。

许可协议允许两种文本格式:txt和rtf格式,此处我们采用 txt格式。 2. 然后切换到Behavior and Logic | InstallScript选项,

3. 中间的导航栏Files下有一个默认的Rul文件Setup.Rul,我们这个工程的全部installscript代码都将写在这个默认文件里

4. 点击选中Setup.Rul节点,右边会显示该文件的可编程面板。

5. 许可协议应该在一开始运行安装程序的时候就显示,也就是在拷贝数据前。请在第一个下拉框中选择Before Move Data选项,然后在第二个下拉框中选择OnBegin选项(不要因为默认显示的是这两个选项,而不做这个打开下拉列表进行选择的动作,否则软件检测不到你选择了选项,无法自动添加代码),则编程界面上会自动添加一些代码如下图所示。当然,如果你手动敲代码上去也是可以的。

6. 我们将在function OnBegin()的函数体里面写代码来显示刚才添加的许可协议文本的内容,直接把下面的代码拷贝到OnBegin()函数的begin和end;之间就可以了 Disable (BACKBUTTON); if(!MAINTENANCE)then

SdLicense2 (\

endif;.

7. 代码解释

************************************************************************ Disable (BACKBUTTON);

将“上一步”按键设置为不可用。安装程序在一开始的时候会有一个默认的开始界面,第二步才显示许可协议,一般来说没必要回退回去看这个什么都没有的开始界面,因此将回退按键设置为不可用 ************************************************************************ if(!MAINTENANCE)then endif;

这一个条件用来判断安装程序处于何种状态,安装、修复、重新安装或卸载状态,后三者都属于MAINTENANCE状态,因此判断只有在正常安装的状态才显示许可协议 ************************************************************************ SdLicense2 (\

这个函数用于在界面上显示所用的许可协议。Help里对该函数的构造函数如下

SdLicense2 ( szTitle, szOpt1, szOpt2, szLicenseFile, bLicenseAccepted );

参数一:szTitle,显示在界面左上角的标题,如果填写空字符串””,则显示为默认值”License Agreement”。 参数二:szOpt1,我们常见许可协议界面上会有两个选项,一个是“同意”,一个是“不同意”,szOpt1和szOpt2就是这两个选项,如果填写空字符串,则会显示为默认值\license agreement\和\。 参数三:szOpt2,见参数二的说明

参数四:szLicenseFile,指定需要显示的文档,包含路径和带扩展名的文档名。我们刚才把许可协议文本放在supportfile选项下了,这个路径在Installshield里有专门的静态变量来指明,即SUPPORTDIR,然后再添加上带扩展名的文档名,这里是2.txt。静态变量路径和引号引起来的路径之间用^符号来连接。 参数四:bLicenseAccepted,布尔型变量,TRUE状态,则在许可协议界面上默认选中的是那个“同意”的选项;不过好像一般更常见的是默认选中为“不同意”的选项,因此这里可以填入FALSE。

这是许可协议的界面。当用户选择了I accept the terms of the license agreement这个选项后,Next按键可用,安装程序可以继续。(请忽略这里显示的许可协议内容…网上有很多软件许可协议的范本供下载...)

小结:至此,许可协议就添加完毕,在安装执行的时候,用户就可以看到许可协议显示在界面上,并且只有选择了“同意”选项后,安装程序才会往下执行。

显示许可协议的函数一共有三个SdLicense,SdLicenseRtf和SdLicense2,参数略有不同,显示的界面也略有不同,用户可以根据喜好来选择。目前我常用的就是SdLicense2这个函数,显示的界面符合大多数目前流行的安装界面的习惯。

2. 判断是否安装了本软件所需要的先决软件或运行环境

1. 代码还是在OnBegin()函数体内实现,直接把下面的代码拷贝到OnBegin()函数的begin和end;之间就可以了

RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);

if (RegDBKeyExist (\

LaunchAppAndWait (SRCDISK^\ endif;

2. 代码解释

************************************************************************ RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);

设置一下默认的注册表键值根节点为HKEY_LOCAL_MACHINE。

打开注册表可以看到“我的电脑”下的根节点有HKEY_CLASSES_ROOT,

HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE等。我们这次要寻找的JDK软件的注册表键值在HKEY_LOCAL_MACHINE下,因此要把根键设置为HKEY_LOCAL_MACHINE。 表告诉我你不知道怎么看注册表,开始-〉运行-〉输入命令regedit ***********************************************************************

RegDBKeyExist (\ 判断是否存在键值SOFTWARE\\\\JavaSoft\\\\Java Development Kit\\\\1.6.0_04,这个是JDK1.6.0_04安装时向注册表写入的值;

RegDBKeyExist( szSubKey );如果存在键值则返回1,否则返回小于0的随机数字。 ***********************************************************************

LaunchAppAndWait (SRCDISK^\ 当上面判断了没有安装JDK1.6.0_04这个软件时,则启动光盘里jdk文件夹下的jdk-6u4-windows-i586-p.exe安装程序来安装。 这个函数在help里是这样叙述的:

LaunchAppAndWait ( szProgram, szCmdLine, nOptions ); 参数一:szProgram,即要启动的程序。这里我们写入的参数是

SRCDISK^\, SRCDISK指源盘,安装程序所在的盘,光盘和硬盘都可以。\源盘下jdk文件夹下的jdk-6u4-windows-i586-p.exe安装程序。

参数二:szCmdLine,如果要启动的程序需要从命令行读入参数来启动,那么在这里写入对应的参数值;我们这里不需要,因此输入空字符串””。

参数三:nOptions,静态变量,不同的静态变量会得到不同的执行结果,比如无等待安装,静默安装,鼠标外形改变等等。详情请参阅Installshield自带的Help。这里我们用LAAW_OPTION_WAIT,即当JDK安装结束后(无论是正常安装了,还是用户点击取消了安装),安装程序才往下继续。

这里可以看到,当点击了同意许可协议的时候,安装程序会自动检测是否安装了JDK,如果没有安装,则弹出安装界面。 这里在函数体里面,没有对找不到JDK安装程序,以及安装出错等情况做判断。如果用户有需要,可以添加一个消息框,提示在找不到安装程序或者安装出错的情况下,用户可以手动地安装需要的软件。代码可以改写为

RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);

if (RegDBKeyExist (\ if(LaunchAppAndWait (SRCDISK^\LAAW_OPTION_WAIT)<0)then

MessageBox (\ endif; endif;

小结:至此,判断运行所需软件的功能结束,用户可以自己试验一下判断多个软件。用法就是重复上述代码功能,仍在OnBegin()函数体内执行。

3. 用户的输入信息、所选安装路径、所选安装组件显示在安装界面上

Installshield是自带这个界面的,在安装过程中用户可以看到这个界面,但是这个界面上的信息是空的,这一点让人很是疑惑,怀疑是Installshield的bug。因此我们不得不手动地实现这个功能。 1. 这个功能需要在OnFirstUIBefore()函数体中实现,选择Before Move Data | OnFirstUIBefore选项

2. 选择了这个选项后,软件会自动在编程界面生成大量代码,如图所示,这里的每一个

Dlg_SdXXXX都对应着一个界面,例如Dlg_SdWelcome就是对应着最初开始的欢迎界面。如果开发人员对这些很熟悉,可以在这里对每一个界面编程设置。

3. 找到Dlg_SdStartCopy这个界面选项,我们将在这里对已有的代码进行改动,使之显示用户输入的用户信息、所选安装路径和组件等信息


installshield打包完整示例(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:建筑工程预结算常见问题与改进措施的分析

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: