欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载
     

    探索InstallShield——制作一个完整的应用程序安装实例.doc

    • 资源ID:2551365       资源大小:838.01KB        全文页数:26页
    • 资源格式: DOC        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    探索InstallShield——制作一个完整的应用程序安装实例.doc

    探索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.就这么简单。声明一下,这里我只是给出的最简单的判别模式,较为安全的模式是在判别时对序列号 进行必要的加解密转换,有兴趣的朋友可以自己去实现。探索InstallShield制作一个完整的应用程序安装实例(二)八、 安装文件夹在一般情况下,InstallShield默认的安装文件夹是存放Windows程序文件夹 (Program files)的完整路径,即C: Program files(如果Windows安装在C盘的话)。但是,在绝大多数情况下我们都希望客户将应用程序安装在单独的数据盘上,即不与操作系统安装在同一个硬 盘分区里。一方面便于管理,另一方面也为了防止我们的程序因为系统盘格式化而受到连累。因此,我们常常会建议用户在安装应用程序的时候选择另一个硬盘,如 D盘。另外,我们有时希望我们所开发出来的应用程序安装在一个带有自己公司名称和应用程序名称的目录 下。InstallShield默认的目录就做的非常好,她会建立一个诸如“C:Program FilesABCD软件工作室Demo”的目录(在这里我虚构了一个公司“ABCD软件工作室”)。但,问题是,一旦让用户选择了其它的路径,或者硬 盘,他们几乎都不会在目录上加上开发商和应用程序目录,“ABCD软件工作室Demo”。如果用户仅仅选择了磁盘而忘了选择任何目录的 话,InstallShield就会将所有的程序和数据文件复制到磁盘根目录下,用户和我们当然都不希望这样。因此,为了避免这一切的发生我们只能寄希望 于我们的安装程序能够有足够的智能来应付这一切,这样就不管用户是否选择了目录。实现方法如下。在事件OnFirstUIBefore中找到Dlg_SdAskDestPath分支,如下Dlg_SdAskDestPath:szTitle = ""szMsg = ""nResult = SdAskDestPath( szTitle, szMsg, szDir, 0 );TARGETDIR = szDir;if (nResult = BACK) goto Dlg_SdRegisterUserEx;我们首先需要定义一个临时字符串变量svTempSTRING svTemp;然后,将语句nResult = SdAskDestPath( szTitle, szMsg, szDir, 0 );TARGETDIR = szDir;修改成如下:svTemp = szDir;nResult = SdAskDestPath( szTitle, szMsg, szDir, 0 );if ( svTemp != szDir) thenszDir = szDirCOMPANY_NAME PRODUCT_NAME;endif;TARGETDIR = szDir;该语句的功能是在用户选择的路径后加上单位和应用程序名称作为安装的目录(注:这里我并没有考 虑到用户在选择了默认外的路径后加上单位和应用程序名称作为安装目录的情况)。其中,变量COMPANY_NAME 和PRODUCT_NAME中存放的是单位名和产品名,我们可以随时在资源面板中修改它的值。变量TARGETDIR是指向在硬盘上目的文件夹的完整路径。当调用函数 SdAskDestPath时,该函数会创建一个对话框来让用户选择应用程序要存放的目的路径。不要以为加上了单位和程序的目录就万事大吉了,可别忘了既然让用户来选择安装的目的盘就很有可 能出现磁盘空间不够大,从而导致程序的安装失败或安装后的剩余空间不够程序将来数据的存放等等。因此,必须在用户选择之后,程序进入下一步之前对目的盘的 可用空间进行判断。在这里我假设我们的程序需要10兆的空间来存放目前的文件和未来几年可能的数据。为了达到上述目的就必须知道:1、 用户最终选择的是哪个硬盘2、 该硬盘当前的剩余空间是多少那么,如何来实现呢?幸好InstallShield为我们提供了足够多的函数来应付这一切。函数一:GetDisk该函数从指定的路径或带有路径的文件名当中提取该路径或文件所在的磁盘驱动器号。调用成功返回 0,否则返回小于0的任何数。函数二:GetDiskSpace该函数返回指定磁盘或指定路径所在磁盘的剩余空间,用字节表示。具体实现代码如下:/*加入磁盘剩余空间判断,目前判断剩余空间是否少于10M/* 10M * 1024千字节 * 1024字节 = 10485760 字节GetDisk (szDir, svDrive);lFreeSpace = GetDiskSpace (svDrive);if (lFreeSpace < 10485760) thenMessageBox("警告:安装路径所在的磁盘空间不足10M!请重新选 择!",SEVERE);goto Dlg_SdAskDestPath;endif;/ end.我们只要将这段代码放入语句if (nResult = BACK) goto Dlg_SdRegisterUserEx;之前就行了。九、 安装类型该步骤是由InstallShield自动给出的,一般情况下我们不必做任何事。三个安装选 项:典型安装、压缩安装和自定义安装是根据我们在安装类型(Setup Type)的面板中预先设置好的值来进行的。如果用户选择了自定义安装,系统就会弹出如下界面,见图。这是由系统自动给出的,我们用不着写一行代码,这是不是很棒?不知道你有没有注意到窗口的左面有一个说明框,它是用来提示用户目前所选择的组件是干什么的。 在缺省的状态下它是空的,需要我们来添加。添加的方法是在组件(Components)的面板中,每当我们点中一个组件在左边的列表中就会有一个描述栏 (Description),它的内容就是上面提到的帮助信息,你只要将相对用户说的话写上去就行了。十、 程序文件夹这一步由InstallShield自动给出,一般不要做任何修改。十一、 最后确认我们一定还记得每当安装一个像Office等专业化软件时,在软件正式安装前系统都会给出一个 列表框,其中列出了你所做的一切选择,包括软件的安装路径,需要安装的组件等,同时还包括了注册的用户名和单位等信息。在我们用 InstallShield制作安装盘的时候也会有这一个列表框,但遗憾的是在缺省状况下InstallShield提供的这个列表框是空的,什么内容也 没有,这需要我们给它加入。好在有函数ListAddString来帮我们的忙。相关函数:ListAddString该函数在字符串列表框的当前对象前后新增加一个字符串。调用成功返回0,否则返回小于0的任何 数。在脚本Setup.rul的事件OnFirstUIBefore中找到 Dlg_SdStartCopy分支,如下:Dlg_SdStartCopy:szTitle = ""szMsg = ""listStartCopy = ListCreate( STRINGLIST );/The following is an example of how to add a string(svName) to a list(listStartCopy)./eg. ListAddString(listStartCopy,svName,AFTER);nResult = SdStartCopy( szTitle, szMsg, listStartCopy );ListDestroy(listStartCopy);if (nResult = BACK) goto Dlg_SdSelectFolder;/ setup default statusSetStatusWindow(0, "");Enable(STATUSEX);StatusUpdate(ON, 100);return 0;在语句nResult = SdStartCopy( szTitle, szMsg, listStartCopy );前加上如下代码/*加入安装过程中用户所选择的主要步骤/ 如果不手动加入的话将会什么也不列出ListAddString(listStartCopy,"客户信息:",AFTER);ListAddString(listStartCopy,"用户名:" + svName,AFTER);ListAddString(listStartCopy,"用户单位:" + svCompany,AFTER);ListAddString(listStartCopy,"",AFTER);ListAddString(listStartCopy,"程序安装路径:" + szDir,AFTER);ListAddString(listStartCopy,"",AFTER);ListAddString(listStartCopy,"程序文件夹:" + szfolder,AFTER);ListAddString(listStartCopy,"",AFTER);switch (nSetupType)case TYPICAL : ListAddString(listStartCopy,"安装类型:典型安装",AFTER);case COMPACT: ListAddString(listStartCopy,"安装类型:压缩安装",AFTER);case CUSTOM: ListAddString(listStartCopy,"安装类型:自定义安装",AFTER);endswitch;/end.其中svName、svCompany、szDir等变量我们可以在 事件OnFirstUIBefore开始的变量定义中找到。从变量的名称我们很清楚的知道该变量存放的是用户名,单位,安装目录等。十二、 第一幅背景,第二幅背景图片12,图片13细心的朋友一定会注意到软件在安装过程中会出现两副不同的背景图片,图12和图13,这就是 InstallShield的显示区界面,我们可以称它为布告板。这看上去是不是很像在播放幻灯片?呵呵,我们可以和微软的比一比了(说句笑话)。言归正 传,还是来说说是如何实现的吧。布告板,它只有在文件被传输时才被激活。也就是说,当你调用 ComponentTransferData函数来解压并拷贝时布告板才被显示,该函数是有系统自动调用,用不着我们来操心。但是,你不能为一个布告板指定显示时间,InstallShield会根据整个程序的安装时间 (指文件拷贝时间)自动的为每一个文件平均分配,但至少是2秒。如果你的安装程序仅持续20秒,而你却放置了25副图片,很显然系统只会显示前10副图 片。当你需要显示布告板之前还必须确保以下两个条件:1、 在你的脚本里,首先要确保在文件被传输前调用Enable(BACKGROUND) 和 Enable(FULLWINDOWMODE),我们可以加在事件OnMoving中。形式如下:function OnMoving()STRING szAppPath;beginEnable(BACKGROUND);Enable(FULLWINDOWMODE);Enable(STATUSDLG);PlaceWindow(STATUSDLG, 400, 10, LOWER_LEFT);szAppPath = TARGETDIR;RegDBSetItem(REGDB_APPPATH, szAppPath);RegDBSetItem(REGDB_APPPATH_DEFAULT, szAppPath PRODUCT_KEY);end;相关函数:Enable(BACKGROUND) :显示安装主背景窗口Enable(FULLWINDOWMODE):设置主背景窗口为最大化。2、 在设置文件(Setup Files)面板中,在合适的目标语言和平台下放置具有特殊后缀名的布告板文件。默认的命名是:“Bbrd”,然后再跟一个数字,最后再加上后缀 “.bmp”或“.wmf”。例如,我们现在要加三副BMP图片,则这三副图片的名称分别应该是Bbrd1.bmp、Bbrd2.bmp、 Bbrd3.bmp。好了,运行一下,很不错。我们可以利用这项技术在安装过程中播放类似幻灯片效果,就像安装 Windows一样。探索InstallShield制作一个完整的应用程序安装实例(三)二、 ODBC1、ODBC介绍ODBC,即开放式数据库连接,它是由Microsoft公司提供的应用程序接口(API), 一个单独的应用程序通过它可以访问许多个不同类型的数据库及不同格式的文件。虽然继ODBC之后业界已推出了一些像OLE DB,ADO等之类的新技术,但目前,开放式数据库连接API也许是在Windows应用程序中用得最广泛的数据库接口。在每种数据库所用到的专用接口 中,除了加入特殊代码外,还需要为ODBC API译码。在ODBC API和用来与数据库交换信息的专用接口之间,特殊的ODBC驱动程序提供了任何一种必需的译码。2、ODBC 4.0驱动程序以下的表列出了 ODBC 桌面数据库驱动程序 4.0 的每一个组件所要求的文件。这些文件安装在 Windows的系统目录WindowsSystem或 Windows NT的系统目录WindowsSystem32下。如果 ODBC 文件以前被安装在一个不同的目录中,请确定你使用的是在 WindowsSystem (或 System32) 目录下的新文件。某些文件是多个部件共同需要的。如果你想要和你的应用程序一起重新分配任一个 ODBC 桌面数据库驱动程序,这些文件也必须被重新分配。建议在分发软件时在你的应用程序目录下建立一个 “ODBC”目录,将这些重新拷贝到该目录底下,但一定要确保该路径是个PATH搜索路径。以下的文件对于每一个 ODBC 桌面数据库驱动程序 4.0 是共同的:Ds16gt.dllDs32gt.dllExpsrv.dllMsjint40.dllMsjet40.dllMsjter40.dllMsjtes40.dllMsvcrt40.dllOdbc16gt.dllOdbc32.dllOdbc32gt.dllOdbccp32.cplOdbccp32.dllOdbccr32.dllOdbcinst.cntOdbcinst.hlpOdbcint.dllOdbcjet.hlpOdbcjet.cntOdbcji32.dllOdbcjt32.dllOdbcjtnw.hlpOdbcjtnw.cntOdbctl32.dllVbajet32.dllOdbctrac.dll下列文件是安装某一个驱动程序类型的软件所必须的:驱动程序文件Microsoft AccessMsrd2x40.dll,Msrd3x40.dllDBASEMsxbse40.dll,Oddbse32.dllMicrosoft ExcelMsexcl40.dll,Odexl32.dllParadoxMspdox40.dll,Odpdx32.dllTextMstext40.dll,Odtext32.dllAdaptive Server Anywhere见下面说明注意:1、 ODBC 桌面数据库驱动程序4.0版本至少需要 16 MB 的随机访问内存 (RAM)2、 有关与这些驱动程序一起使用的ODBC版本的信息,参考ODBC程序员参考手册。3、Adaptive Server Anywehre ODBC驱动程序下表列出的是工作在Adaptive Server Anywehre环境下的驱动程序,必须将这些文件拷贝到一个独立的目录下,并且使系统能够搜索到。描述32位WindowsODBC驱动程序Dbodbc6.dllODBC翻译程序Dbodtr6.dll特殊语言库文件Dblgen6.dll网络接口文件Dbport6.dll连接对话框程序文件Dbcon6.dll注意:1、 ODBC翻译程序仅仅在你的应用程序是依赖于ANSI标准的字符串转换。2、 网络接口程序库是专门用于网络通信用,它仅仅是在客户端的程序访问网络服务器上才必须存在。3、 连接对话框程序文件在以下的几种情况下才需要加入:a. 你的最终用户需要创建自己的数据源b. 当用户连接数据库时需要输入用户标识和口令c. 不管是出于什么目的用户需要显示连接对话框4、配置ODBC驱动程序为了使用ODBC驱动程序安装程序不仅仅只是将这些驱动程序文件拷贝到硬盘上,它还必须在注册 表中设置一组ODBC驱动程序的属性。Adaptive Server Anywhere安装程序会自动在NT和WIN9X的系统注册表中标识和配置ODBC驱动程序。因此,如果你为你的最终用户制作应用程序的安装程序时也必 须进行相同的设置。通过查看Windows注册表工具,我们发现Adaptive Server Anywhere的ODBC驱动程序是在下列的键中被系统所标识的。HKEY_LOCAL_MACHINESoftwareODBCODBCINST.INIAdaptive Server Anywhere 6.0,其中需要设置的下键有键名类型键值DriverStringPathdbodbc6.dllSetupStringPathdbodbc6.dll除此之外,你还必须在键HKEY_LOCAL_MACHINESoftwareODBC ODBCINST.INIODBC Drivers中为Adaptive Server Anywhere注册在该键中增加如下键键名类型键值Adaptive Server Anywhere 6.0StringInstalled5、数据源注册除了进行ODBC驱动程序注册外,还必须为用户的数据源进行注册。这是因为每一个用户数据源必 须被注册表登记才能被系统所识别,这样用户才能使用它。因此,必须在键HKEY_CURRENT_USERSoftwareODBC ODBC.INI中进行如下注册。键名值类型键值AutoStopStringYesDatabaseFileStringPathdemo.dbDescriptionStringAdaptive Server Anywhere Sample DatabaseDriverStringPathwin32dbodbc6.dllPWDStringSqlStartStringPathwin32dbeng6.exe -qUIDStringDba注:1、 上面的path除了DatabaseFile指的是客户数据库所在的路径,其他的都是指Adaptive Server Anywhere的安装路径。我们在给客户分发应用软件的时候一般不再另外安装Adaptive Server Anywhere,所以可以将Adaptive Server Anywhere路径下的文件 Dbeng6.exe,Dbodbc6.dll,Dblgon6.dll,Dbport6.dll,Dbcon6.dll,Dbodtr6.dll一起分 发给客户,并且拷贝至一个单独目录下,然后将路径指向它就可以了。2、 在dbeng6.exe后加上“-q”是为了隐藏任务栏上的SQLAnywhere窗口。另外,必须将数据源加到注册表中的数据源列表中,加入到如下键中HKEY_CURRENT_USERSoftwareODBCODBC.INIODBC Data Sources该键中存放的是每一个数据源和ODBC驱动程序的关联。键名是指数据源名字;键值是指ODBC 驱动程序的名字。由于本文所叙述的是基于PowerBuilder7.0开发环境下的应用程序的发布,所以键值都是"Adaptive Server Anywhere 6.0"(因为,当我们安装PowerBuilder 7.0时,系统默认的ODBC驱动程序的名字为Adaptive Server Anywhere 6.0),当然,如果你愿意话也可以改变它。这里有必要提示一下,由于用户数据源的配置可能包含一些敏感的数据库设置,比如说连接数据库的 用户ID和口令。这些设置都会以无格式的文本形式存储在注册表中,可以很容易的被Windows注册表编辑程序regedit.exe或 regedt32.exe查看,只要有点编程经验的人都能通过获这些实用工具取该ID和口令来修改数据库中数据。因此,你在处理这些问题的时候还要三思一 下,你可以选择加密口令或让用户在连接数据库时录入。既然我们知道了如何在注册表中为应用程序进行ODBC配置,那么剩下的问题是,把他们放在什么 地方?不用说,大家也猜到了,最好的地方就是当所有文件都已经复制完毕,在我们要求用户重新启动系统之前。事件OnMoved可以做到这一切。在做这些事 的同时我们最好能够显示给用户一个消息框,告诉用户我们在干什么,做完这一切之后再关闭它。这就要用到函数SdShowMsg和Delay。见图。探索InstallShield制作一个完整的应用程序安装实例(四)相关事 件:OnMoved该事件是在当所有在目标机器上的组件都被安装或反安装时响应,在该事件中的代码总是会被执行。相关函数:SdShowMsg:该函数打开或关闭一个非模态的小窗口,该窗口显示指定的消息。Delay:该函数可以用指定的时间(秒)来使安装程序的执行时间延迟。下面是完整的ODBC注册表配置的代码程序。/*程序代 码*/*当所有数据拷贝完毕后在这里配置ODBCfunction

    注意事项

    本文(探索InstallShield——制作一个完整的应用程序安装实例.doc)为本站会员(本田雅阁)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开