`
wuhuizhong
  • 浏览: 688295 次
  • 性别: Icon_minigender_1
  • 来自: 中山
社区版块
存档分类
最新评论

用PB实现客户端程序的自动升级

阅读更多

C/S结构的运行模式虽然没有B/S结构更加容易扩展和简便,但由于其稳定性好、安全性高、运 行速度快等特点,现在仍然被广泛应用于各种大型应用系统中,有些则和B/S形成混合的运行模式。
  B/S优越于C/S的一个很大特点就是,客户端不需要安装客户端软件,通过浏览器就可以实现各种应用,并且服务器上的内容的变化可以快速反映到客户端。如 果让客户端软件也实现自动升级,可以弥补C/S模式在这方面的缺陷。本文就给出了一种可自动升级客户端软件的设计思路,并给出了使用PB的实现方法。
1 实现思路
  整个软件结构包括:升级数据库服务器、升级代理程序、客户端应用程序、升级服务管理程序等。升级数据库器保存各个版本软件的版本、文件名、文件内容等信 息;升级代理程序负责读取升级数据库服务器中的最新版本信息和文件信息,完成最新版本下载和更新,并启动客户端应用程序;客户端应用程序为客户端具体应用 的程序软件,即为需要实现更新的软件;最新版本上载程序是升级信息管理程序,用于上传最新的版本信息和相应的文件内容。整体结构如图1所示。
 
图 1 自动升级的软件实现方案
  客户端应用程序运行之前,先启动一个升级代理程序,该代理从升级数据库服务器中读取升级信息,如果存在最新版本,提示用户并决定是否下载最新版本,然后并 启动客户端应用程序。
  升级信息使用如下数据表(soft_fileinfo)进行维护和管理,文件版本号保存文件的版本信息,文件名和文件内容保存文件的名称和文件的二进制内 容。创建改变的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 客户端升级代理程序实现
  在PB中创建一个应用,在应用的实例变量中声明:
string old_version

declare get_new_filename cursor for
select filename
from dba.soft_fileinfo
where version > :old_version;

在Open事 件中编写如下代码:
string ls_newversion
//连接升级服务器,这里我们用ASA7数据库代替升级数据库服务器
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='DSN=EAS Demo DB V4;UID=dba;PWD=sql', ConnectOption='SQL_DRIVER_CONNECT,SQL_DRIVER_NOPROMPT'"
connect using sqlca;
if sqlca.sqlcode = 0 then
//读取本地版本号
RegistryGet("HKEY_LOCAL_MACHINE\Software\MySoftware\sale", "Version", RegString!, old_version)
//读取升级服务器上的最新版本号
select max(version) into :ls_newversion
from dba.soft_fileinfo;
//如果升级服务器 上的最新版本号大于本地版本号,提示下载最新程序
if old_version < ls_newversion then
if MessageBox("注意","存在最新版本程序,是否立即升级?",Question!,YesNo!) = 1 then
//下载最新程 序
string ls_filename
blob lb_filedata
blob lb_tempdata
long max_len = 32765
long ll_len
//通过游标,得到所有需要更新的文件名,然后分别处理
open get_new_filename;
fetch get_new_filename into :ls_filename;
do while (sqlca.sqlcode = 0)
//得到最新版本的相应文件内容
selectblob filedata into :lb_filedata
from dba.soft_fileinfo
where filename = :ls_filename
order by version desc;
long ll_file,loops,i
//删除旧版本文件
FileDelete(ls_filename)
// 创建新的文件
ll_file = FileOpen(ls_filename,StreamMode!,Write!,LockReadWrite!, Append!)
ll_len = len(lb_filedata)
//由于PB中的FileWrtie一次只能写入32765大小的文件,所以必须分多次读写
IF ll_len > max_len THEN
IF Mod(ll_len, max_len) = 0 THEN
loops = ll_len/max_len
ELSE
loops = (ll_len/max_len) + 1
END IF
ELSE
loops = 1
END IF
FOR i = 1 to loops
lb_tempdata = BlobMid(lb_filedata,(i - 1)*max_len + 1,max_len)
FileWrite(ll_file,lb_tempdata)
NEXT
FileClose(ll_file)
// 读取下一个文件内容
fetch get_new_filename into :ls_filename;
loop
close get_new_filename;
end if
end if
else
MessageBox("错误","没有成功连接 升级服务器")
end if
//运行应用程序
Run("sale.exe")

3 升级服务管理程序实现
  升级服务管理程序的实现实际就是一个维护soft_fileinfo表的应用程序,可以修改版本信息,也可以添加新的版本信息和文件内容。这一部分思路比 较简单,这里不再给出所有具体的程序代码,仅给出PB将新版本文件写入数据库的方法。
integer li_FileNum, loops, i
long flen, bytes_read, new_pos
blob b, tot_b
//得到当前选择的文件的内容大 小,sle_filename包含文件所在路径及文件名
flen = FileLength(sle_filename.Text)
// 打开文件
li_FileNum = FileOpen(sle_filename.Text,StreamMode!, Read!, LockRead!)
//由于FileRead函数一次只能读出32765大小的数据,所以先计算读取次数
IF flen > 32765 THEN
IF Mod(flen, 32765) = 0 THEN
loops = flen/32765
ELSE
loops = (flen/32765) + 1
END IF
ELSE
loops = 1
END IF
new_pos = 1
//分多次读出文件中的所有数据,放在tot_b变量中
FOR i = 1 to loops
bytes_read = FileRead(li_FileNum, b)
tot_b = tot_b + b
NEXT
//关闭文件
FileClose(li_FileNum)
修 改当前版本的文件内容
updateblob dba.soft_fileinfo
set filedata = :tot_b
where version = current_version;
//如果保存成功,递交数据库
IF sqlca.SQLNRows > 0 THEN
COMMIT;
else
rollback;
messagebox("错误","文件内容保存失败!")
END IF

分享到:
评论

相关推荐

    PB程序自动升级

    综上所述,PB程序自动升级涉及了服务器与客户端的交互、文件的下载与解压、以及在用户计算机上执行更新的过程。这一技术大大简化了用户对软件的维护,同时也减轻了开发者支持多版本应用的压力。通过精心设计的升级...

    PB 客户端 自动 更新 程序

    总的来说,PB客户端自动更新程序的实现涉及网络通信、文件系统操作、配置文件解析以及PowerBuilder编程等多个方面,对学习者来说,这是一个很好的实践项目,可以提升他们的综合技能。在实际应用中,还需要考虑安全性...

    PB 客户端自动升级

    PB客户端自动升级是一种技术机制,主要用于PowerBuilder(PB)应用程序,确保用户能够便捷地更新到最新版本,无需手动下载和安装。自动升级功能是软件维护和版本迭代的关键部分,它提高了用户体验并确保了软件的安全...

    pb开发的应用程序自动升级程序

    pb开发的应用程序自动升级程序 ------------------------------------------------------------- --软件名称:软件自动升级系统 --适用范围:pb8 + mssql server 2000 --开发日期:2003-09-26 --版权所有:Susue ...

    PB6.5做的程序自动升级程序

    以下将详细讲解如何利用PowerBuilder 6.5实现程序自动升级,并探讨相关的技术点。 1. **理解自动升级机制**:自动升级通常包括检测新版本、下载更新、验证更新包、安装更新和重启应用程序等步骤。在PB6.5中,开发者...

    PB 应用程序自动升级

    PB11.5写的 自动升级应用程序 的程序!用起来挺方便的!再也不用一台一台机子的更新程序了! 通过数据库升级,先建立数据表! 然后在任何一台客户端上上传应用程序的新版本,则所有客户端均可升级! 如有问题:请...

    通过数据库客户端自动升级程序

    标题中的“通过数据库客户端自动升级程序”意味着一种技术方法,它允许软件应用程序通过与数据库的交互来自动进行更新。这种方法通常适用于服务器-客户端架构,其中客户端应用能够连接到服务器端的数据库来检查并...

    PB12.5软件自动升级程序(FTP)

    使用PB12.5软件自动升级程序(FTP)有几个显著的好处: - **提高用户体验**:用户不再需要手动下载和安装每个更新,只需点击一次即可完成升级。 - **节省资源**:对于大型应用,自动升级可以减少网络带宽的使用,因为...

    FTP程序自动升级(PB)

    总结起来,"FTP程序自动升级(PB)"涉及到利用PowerBuilder设计和实现一个能够检测、下载、安装和验证软件更新的系统。这个过程涵盖了一系列编程、网络通信、文件管理和错误处理技术,旨在提高用户满意度和软件的可靠...

    PB程序自动升级,检测版本自动更新程序

    PB程序自动升级与检测版本自动更新程序是一种常见的软件维护策略,尤其在企业级应用中,以确保用户始终运行的是最新、最安全的软件版本。PB是PowerBuilder的缩写,这是一种由Sybase(现为SAP)开发的可视化编程工具...

    pb自动升级程序Http协议.zip

    PB自动升级程序基于HTTP协议实现,这是一种广泛应用于互联网上的通信协议,主要负责客户端(如Web浏览器)与服务器之间的数据传输。在本压缩包文件中,我们可能会找到一个PowerBuilder(PB)应用程序,它包含了用于...

    上传局域网内自动升级程序.rar_c/s自动升级_pb 升级_自动 上传 文件_自动升级 c_自动更新

    标题中的“上传局域网内自动升级程序.rar_c/s自动升级_pb 升级_自动 上传 文件_自动升级 c_自动更新”表明这是一个关于C/S(客户端/服务器)架构下的程序自动升级解决方案,主要涉及PB(PowerBuilder)编程语言。...

    pb 自动升级

    在本场景中,"pb 自动升级"指的是利用PB10.5版本的FTP自动升级系统来实现软件的更新与维护。这个系统使得开发者能够轻松地将升级功能集成到已有的应用程序中,从而减少手动更新的复杂性和错误可能性。 FTP(File ...

    PB自动升级源码,数据库+http取文件升级

    这个系统利用数据库存储升级参数,并通过HTTP协议从服务器获取升级文件,实现客户端程序的自动化更新,旨在提高软件维护的效率,降低用户手动升级的复杂度。 首先,我们要理解PowerBuilder是一种古老但强大的面向...

    PB12.5实现自动更新客户端文件updown.rar

    标题提到的"PB12.5实现自动更新客户端文件updown.rar",指的是利用PowerBuilder 12.5版本来设计一个能够自动更新客户端程序的系统。这个系统的核心功能是确保客户端软件始终运行的是最新版本,提高软件的稳定性和...

    wm_sj.rarpb12客户端自动升级程序

    《wm_sj.rarpb12客户端自动升级程序》是一款基于PB12(PowerBuilder 12)开发的客户端自动升级系统,专为C/S(Client/Server)架构的软件设计,旨在解决软件频繁更新的问题,提高用户体验和系统维护效率。...

    小工具-自动更新客户端(PowerBuilder90)

    标题中的“小工具-自动更新客户端(PowerBuilder90)”指的是一个使用PowerBuilder 9.0开发的自动更新客户端程序。这个程序旨在帮助用户自动检查并安装软件的最新版本,确保系统的安全性与功能的完整性。 Power...

Global site tag (gtag.js) - Google Analytics