



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、用PB实现客户端程序的自动升级 C/S结构的运行模式虽然没有B/S结构更加容易扩展和简便,但由于其稳定性好、安全性高、运行速度快等特点,现在仍然被广泛应用于各种大型应用系统中,有些则和B/S形成混合的运行模式。 B/S优越于C/S的一个很大特点就是,客户端不需要安装客户端软件,通过浏览器就可以实现各种应用,并且服务器上的内容的变化可以快速反映到客户端。如果让客户端软件也实现自动升级,可以弥补C/S模式在这方面的缺陷。本文就给出了一种可自动升级客户端软件的设计思路,并给出了使用PB的实现方法。1 实现思路 整个软件结构包括:升级数据库服务器、升级代理程序、客户端应用程序、升级服务管理程序等。升级
2、数据库器保存各个版本软件的版本、文件名、文件内容等信息;升级代理程序负责读取升级数据库服务器中的最新版本信息和文件信息,完成最新版本下载和更新,并启动客户端应用程序;客户端应用程序为客户端具体应用的程序软件,即为需要实现更新的软件;最新版本上载程序是升级信息管理程序,用于上传最新的版本信息和相应的文件内容。整体结构如图1所示。图1 自动升级的软件实现方案 客户端应用程序运行之前,先启动一个升级代理程序, 该代理从升级数据库服务器中读取升级信息,如果存在最新版本,提示用户并决定是否下载最新版本,然后并启动客户端应用程序。 升级信息使用如下数据表(soft_fileinfo)进行维护和管理,文件版
3、本号保存文件的版本信息,文件名和文件内容保存文件的名称和文件的二进制内容。创建改变的SQL语句如下(ASA7数据库):CREATE TABLE dba.soft_fileinfo(version char(14) NOT NULL, /文件版本号filename char(30) NOT NULL, /文件名filedata long binary, /文件内容PRIMARY KEY (version, filename); /以文件版本号和文件名为主键 下面给出PB中的程序实现方法,假设客户端应用程序执行文件名为sale.exe,升级数据库服务器采用ASA7。2 客户端升级代理程序实现 在P
4、B中创建一个应用,在应用的实例变量中声明:string old_versiondeclare get_new_filename cursor forselect filename from dba.soft_fileinfowhere version :old_version; 在Open事件中编写如下代码:string ls_newversion/连接升级服务器,这里我们用ASA7数据库代替升级数据库服务器SQLCA.DBMS = ODBCSQLCA.AutoCommit = FalseSQLCA.DBParm = ConnectString=DSN=EAS Demo DB V4;UID=d
5、ba;PWD=sql, ConnectOption=SQL_DRIVER_CONNECT,SQL_DRIVER_NOPROMPTconnect using sqlca;if sqlca.sqlcode = 0 then/读取本地版本号RegistryGet(HKEY_LOCAL_MACHINESoftwareMySoftwaresale, Version, RegString!, old_version)/读取升级服务器上的最新版本号select max(version) into :ls_newversionfrom dba.soft_fileinfo;/如果升级服务器上的最新版本号大于本地
6、版本号,提示下载最新程序if old_version max_len THENIF Mod(ll_len, max_len) = 0 THENloops = ll_len/max_lenELSEloops = (ll_len/max_len) + 1END IFELSEloops = 1END IFFOR i = 1 to loopslb_tempdata = BlobMid(lb_filedata,(i - 1)*max_len + 1,max_len)FileWrite(ll_file,lb_tempdata)NEXTFileClose(ll_file)/读取下一个文件内容fetch ge
7、t_new_filename into :ls_filename;loopclose get_new_filename;end ifend ifelseMessageBox(错误,没有成功连接升级服务器)end if/运行应用程序Run(sale.exe)3 升级服务管理程序实现 升级服务管理程序的实现实际就是一个维护soft_fileinfo表的应用程序,可以修改版本信息,也可以添加新的版本信息和文件内容。这一部分思路比较简单,这里不再给出所有具体的程序代码,仅给出PB将新版本文件写入数据库的方法。integer li_FileNum, loops, ilong flen, bytes_re
8、ad, new_posblob b, tot_b/得到当前选择的文件的内容大小,sle_filename包含文件所在路径及文件名flen = FileLength(sle_filename.Text)/打开文件li_FileNum = FileOpen(sle_filename.Text,StreamMode!, Read!, LockRead!)/由于FileRead函数一次只能读出32765大小的数据,所以先计算读取次数IF flen 32765 THENIF Mod(flen, 32765) = 0 THENloops = flen/32765ELSEloops = (flen/32765) + 1END IFELSEloops = 1END IFnew_pos = 1/分多次读出文件中的所有数据,放在tot_b变量中FOR i = 1 to loopsbytes_read = FileRead(li_FileNum, b)tot_b = tot_b + bNEXT/关闭文件FileClose(li_FileNum)修改当前版本的文件内容updateblob dba.soft_fileinfoset
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论