资源预览内容
第1页 / 共26页
第2页 / 共26页
第3页 / 共26页
第4页 / 共26页
第5页 / 共26页
第6页 / 共26页
第7页 / 共26页
第8页 / 共26页
第9页 / 共26页
第10页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
探索InstallShield制作一个完整的应用程序安装实例(一)大家一定有过这样的经 历,每当我们殚精竭虑为用户开发完一个系统之后往往都是派一名技术员到用户那里进行应用软件的安装,数据库的配置,这些看似简单的配置对一般用户来说可不 是件容易做的事。这不仅给那些喜欢力求完美的程序设计师带来一点遗憾外,而且也使我们设计出来的软件缺少一种安全可靠感。如果我们在交给用户软件的时候能 给他们一个象一些专业软件的安装程序,这不仅给用户留下了一个良好的第一印象,同时也节省了开发维护成本。要说起制作安装程序的软件有许多,像 InstallShield,CreateInstall,Easy Install,EasySetup,SetupBuilder等等,可以举出一大堆来。但其中最为著名的当属InstallShield。目前世界上绝 大多数的商业软件的安装盘都是用她来完成,比如我们可能天天在使用的Norton AntiVirus 2000。InstallShield之所以很流行也许是因为程序员可以在通过编写脚本语言方便的进行 Windows应用程序的注册表修改、ODBC配置等复杂的操作,以及她本身提供了一些相当智能化的功能。下面,就本人在实际开发中的一些所得和大家一起 探讨,文中如有任何不妥之处还请同行们给予指教。在讲述到数据库配置的一系列问题是以目前最常用的ODBC接口为基础,文中用到的实例是在 WIN98系统中,InstallShield用的是Professional 6.21下开发和调试的,其中的应用程序实例用的PowerBuilder 7.0下开发的演示程序。第一步:快速体验首先,我们可以来快速体验一下用InstallShield制作的安装程序是什么样的。当然,我不可能详细到怎样建立一个项目之类的问题,有关这方面的内容还请看 InstallShield的入门教材。第二步:;InstallShield初探首先,用Project Wizard建立一个新的项目,取名Demo,同时在对话框中选择所有的选项,并且在语言选择中选择Chinese(PRC)和English,即简体中 文和英文支持。当然你也可以选择其它语言,为了便于讨论我只选择了Chinese(PRC)和English。运行一下试一试,一切都正常,只是一个空壳罢了,没有任何东西。好了,战斗的号角已经吹响了,让我们集中精力个个歼灭。一、 语言选择由于我们在生成项目的同时在语言选择中选择了Chinese(PRC)和English,因 此,在图01中的下拉列表框中会自动出现中文,英文的选项。这一步由模板自动完成,我们不要做任何事情。二、 设置启动画面在我们生成项目的同时,InstallShield会为我们缺省的放上一张启动画面。见图 16。从该图片上我们可以看出,一般情况下是放置一张能很好的代表你公司的图片,同时上面很清楚地标 明你的应用程序的名称,版本,公司名称,版权归属等基本信息。毫无疑问,我们必须用我们自己的图片来替换它。替换的方法是,在Setup File面板中,打开Splast Screen,找到Language Independent,这时我们会发现在它右边的列表中有一个文件Setup.bmp,它就是图18的那一张,我们必须首先把它删除,然后再插入我们想 要的那一张,在列表中任何一个位置点击鼠标右键,选择Insert Files,用一个BMP文件替换它就行了。注意,我们替换的图片的文件名必须是Setup.bmp。另外,顺便提一下,在Splash Screen下除了Language Independent分支外,还有Chinese(PRC)和English分支,如果在它们中放置不同的Setup.bmp文件,那么系统会根据用户 在安装前选择了不同的语言而启动不同的背景,这样可以有效地避免多国语言的烦恼。同样,在设置法律声明(许可协议)和自述文件的时候也是一样的。三、 开始安装这一步由系统自动给出,我们不要做任何事情。但是我们可以在这里进行软件安装前的准备工作。比 如,操作系统判断,机器可用内存容量的检测等,这些往往被忽视。当我们用项目向导生成的新项目时,InstallShield只为我们生成两个事件,分别是 OnFirstUIBefore和OnMoving,它们的意义是,OnFirstUIBefore:在应用程序第一次安装时为了搜集用户信息而弹出的对话框之 前,应用程序所响应的事件。OnMoving:该事件在当所选择的安装组件正在安装或反安装时响应。显然,准备工作可以在事件OnFirstUIBefore中完成,但 InstallShield同时还为我们提供了事件OnBegin,该事件在是在Setup脚本中第一个被触发。还记得图片02,上面有个进度条,显示了 “正准备InstallShield(R)向导.”,当该进度条结束后就首先调用OnBegin,然后才是OnFirstUIBefore。因此,我 们可以将一些前期的准备工作放到这里来完成。下面是如何具体实现。1、首先,如何添加OnBegin事件?InstallShield将事件分成三类:全局事件,组件事件和杂项事件。其中,全局事件的 添加最为方便,只要将当前行光标移到Serup脚本的最后,然后写上function OnBegin()begin. / 函数体end;就行了。2、实现操作系统的识别像其它编程工具一样,InstallShield也为我们提供了一些系统变量,利用这些变量我 们可以轻而易举的得到一些像系统目录,语言代码,CUP类型等实用数据。具体实现代码如下:/*程序代码*/Function OnBegin()Beginif ( !SYSINFO.bIntel) thenszMsg = 提示:该软件只能运行在Intel系列的处理器上!nn安装程序将终止;MessageBox(szMsg, SEVERE);abort;endif;if (SYSINFO.WIN9X.bWinMe |SYSINFO.WINNT.bWinNT |SYSINFO.WINNT.bWinNT4 |SYSINFO.WINNT.bWin2000) thenszMsg = 提示:该软件只能运行在WIN9X系统上才能确保程序的正常工作!nn是否继续安装?;if ( !AskYesNo (szMsg, NO) thenabort;endif;endif;end/*结束*/相关变量:SYSINFO存放本机的一些系统变量,如操作系统,CUP类型等。有关系统变量的具体使用请参阅编程手册。相关函数:AskYesNo该函数弹出一消息窗口,用户通过按是或非来回答该窗口显示的问题。3、实现内存容量的检测在查阅了InstallShield系统变量后并没有找到有关内存容量方面的变量,因此只有通 过调用函数来实现。相关函数:GetSystemInfo()该函数返回有关目标系统的诸如CUP类型,磁盘容量,当前日期,当前操作系统,内存容量等信 息,返回的内存容量是以千字节为单位。有关函数的具体使用请参阅函数手册。具体实现代码如下:/*程序代码*/if (GetSystemInfo (EXTENDEDMEMORY, nvFreeMem, svResult) 0) thenMessageBox (内存检测失败,安装程序将终止!., SEVERE);abort;endif;if ( nvFreeMem 16384 ) thenszMsg = 该软件只能安装在16M以上内存的机器中。n很遗憾,本机器可用内存不足16M!nn安装程序将终止!;MessageBox (szMsg, SEVERE);abort;endif;/ end./*结束*/四、 许可协议选择Setup File面板,打开Language Independent,选择Operating System Independent ,在右边列表中找到License.txt文件,双击它输入自己的许可协议就行了。五、 Readme文件同上,找到Infolist.txt文件,双击它输入需要说明的自述文件。六、客户信息看一看图片,不难发现当安装程序运行这一步时上面已经填上了缺省的用户名和客户名称,甚至连序 列号都有。这是怎么回事呢?原来在前面我们介绍的事件OnFirstUIBefore的开始有一段代码,如下:nSetupType = TYPICAL;TARGETDIR = PROGRAMFILES COMPANY_NAME PRODUCT_NAME;szDir = TARGETDIR;SHELL_OBJECT_FOLDER = FOLDER_NAME;svName = ;svCompany = ;svSerial = ;如果我们没有给svName和svCompany赋新值的话缺省的用户名和客户名称就是我们在 安装Windows时注册的用户和单位。当然,如果没有给svSerial赋值的话,图片上的序列号就为空。相关系统变量:PROGRAMFILES:存放Windows程序文件夹(Program files)的完整路径。不能更改。七、 序列号判断用InstallShield安装模板制作出的安装程序在运行过程如果没有序列号是无法再继续 下去的。但如果我们在序列号上不加任何检验的话,InstallShield会默认为任何字符都是有效的而不管它是什么,此时序列号也就毫无意义,除非你 想让你的应用程序无限制的发布。因此,还是建议你在安装过程中对序列号进行一下有效性检验。方法很简单,在事件OnFirstUIBefore中找到 Dlg_SdRegisterUserEx分支,见下列代码:Dlg_SdRegisterUserEx:szMsg = ;szTitle = ;nResult = SdRegisterUserEx( szTitle, szMsg, svName, svCompany, svSerial );if (nResult = BACK) goto Dlg_SdShowInfoList;在语句if (nResult = BACK) goto Dlg_SdShowInfoList;前添上相应的序列号校验程序/*增加序列号的检验if ( svSerial != 199721) thenMessageBox(警告:输入序列号错误,请确认后重输!,SEVERE);goto Dlg_SdRegisterUserEx;endif;/end.就这么简单。声明一下,这里我
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号