当前位置:首页 期刊杂志

PB客户端软件自动升级的设计与实现

时间:2024-09-03

满洲里出入境检验检疫局 姜晓龙

PB客户端软件自动升级的设计与实现

满洲里出入境检验检疫局 姜晓龙

PB(PowerBuilder)应用程序的客户端系统更新绝大多数采用本地计算机完全式安装或拷贝式安装进行,CS模式的程序设计在系统更新环节上确实浪费了大量的人力、物力和工作时间。本文详细地介绍一种局域网内客户端软件自动升级的实现方法,它将有效地减轻客户端程序升级工作的重荷,弥补CS结构的系统在更新任务方面的不足和缺陷。

客户端软件;自动升级;文件服务器;配置文件;程序版本

1.引言

在较大的CS结构的管理系统中,需求的变化、补丁的加载以及系统的升级等原因导致对客户端应用程序的修改会带来大量的客户端更新工作。维护人员必须到每台客户机去更新安装,这就大大加重了维护人员的工作量。在客户端计算机数量相对较少的情况下这种情形还可以忍受,倘若局域网内存在数十台乃至几百台等待更新的机器,而网络节点分布又不集中,其工作强度将是不言而喻的。因此,实现PB客户端软件自动升级的必要性是毋庸置疑的,它可以充分弥补CS模式在系统升级换代方面存在的不足和缺陷。本文结合出口果蔬随附单据无纸化报检系统客户端应用程序自动升级的解决方案,介绍一种局域网内可自动升级客户端软件的实现方法。

2.技术原理

PB客户端应用程序实现自动升级的技术原理是在局域网内专门放置一台文件服务器或直接使用现有的数据服务器,存放最新的应用程序文件和配置文件。启动客户端程序自动升级功能时,应用程序首先执行配置文件,提取相应的升级参数,即本地计算机应用程序的版本、服务器名称或地址以及服务器保存更新文件的共享文件夹;接着根据所提取的服务器名称或地址和共享目录,到文件服务器下载最新应用程序的版本信息;然后比较服务器程序版本与本地程序版本,如果服务器程序版本高于本地程序版本,说明文件服务器上已存在更加新版的客户端应用程序,则提示用户是否对本地计算机应用程序进行更新操作,最后再运行新升级的主程序。

3.功能实现

⑴创建一个INI类型的配置文件CSUpgrade.ini,其具体内容如下:

[Options]

Version=网络版V8.2.11.0723

//程序版本号,比较本地程序版本与服务器程序版本是否一致

Server=\10.15.10.1

//文件服务器名称或IP地址

Folder=CSUpgrade

//存放更新文件的共享文件夹

File=CS2010.exe|CS2010.dll|DBConfig.exe|EDecl.exe

//存放应用程序文件列表并以分隔符“|”间隔

Notes=新增了流程控制、系统日志、大写中文数字发音拼写检查、数据源的自动配置和OLE控件的自动注册以及图片按钮和XP风格按钮等实用功能。

//告知客户端用户需要更新的主要内容说明或注释文本

⑵在用于更新提示的窗口中自定义一个函数wf_GetFileNameL-ist,用于从文件服务器提供的配置文件的文件列表中取得各个需要进行升级的文件,分别存放在一个数组中,并返回升级文件的个数。

⑶定义窗口用户事件ue_postopen,用于比较本地程序版本与服务器程序版本是否一致。如果服务器程序版本与本地程序版本互相一致,则直接启动系统的主程序,同时关闭自动升级窗口;如果服务器程序版本高于本地程序版本,则提取文件服务器提供的配置文件的注释文本,以便用户决定是否进行本地计算机应用程序的更新工作,主要程序脚本如下:

Ls_Local_INIFile=’CSUpgrade.ini’

//本地或服务器INI配置文件名称

Ls_Local_Version=ProfileString(Ls_Local_INIFile,’Options’,’Version’,’’)

//本地应用程序版本

SELECT Server_Path,File_Folder INTO :Ls_Server,:Ls_Server_Folder FROM T_CS_Parameter;

//提取文件服务器名称或IP地址以及共享文件夹

Ls_Server_Folder=Ls_Server + ‘’ + Ls_Server_Folder + ‘’

//设置文件服务器路径

Ls_Server_INIFile=Ls_Server_Folder + ‘CSUpgrade.ini’

//设置文件服务器端的INI配置文件

Ls_Server_Version=ProfileString(Ls_Server_INIFile,’Options’,’Version’,’’)

//获取文件服务器程序版本

Ls_File=ProfileString(Ls_Server_INIFile,’Options’,’File’,’’)

//获取更新文件列表

Ls_Notes=ProfileString(Ls_Server_INIFile,’Options’,’Notes’,’’)

//获取更新说明

IF(Ls_Server_Versiongt;Ls_Local_Version)THEN

//比较本地与服务器程序版本号

This.Show()

//显示自动更新窗口

mle_1.text=’文件服务器存在新的版本应用程序,说明如下:~r~n”’ +Ls_Notes + ‘”~r~n您是否更新本地应用程序?’

//显示客户端软件需要更新的文本说明

ELSE

Run(‘CS2010.exe’) ; Halt Close

//启动主程序并退出自动更新窗口

END IF

⑷“更新(R)”按钮主要实现的功能是进行自动升级程序的创建过程,自动更新过程界面效果如右图所示。编写如下主要脚本:

Li_FileCount=wf_getfilename(Ls_File)

//获取文件列表并保存在Is_FileName[]数组中

L s_Text=”程序更新开始:” + String(Today(),’yyyy-mm-dd’) + ‘ ‘ +String(Now()) + ‘ ‘ + ayName(Today())

Lit_CSUpgrade_Start=CPU()

//获取自动更新的开始时间计数

mle_1.text=Ls_Text

mle_1.text=mle_1.text + ‘~r~n’ + ‘---’ //设置分隔符,记录自动更新过程并实时显示

Ls_Text=’~r~n’ + String(0) + ‘、’ + “版本:” + Ls_Local_Version +“→” + Ls_Server_Version

mle_1.text=mle_1.text + Ls_Text + ‘~r~n’ + ‘---’

Li_Rtn=FileCopy(ls_Server_Folder + Ls_Local_INIFile,Ls_Local_INIFile,True)

IF(Li_Rtn=1)THEN ; Ls_Flag=’成功!’ ; ELSE ; Ls_Flag=’失败!’ ; END IF

Ls_Text=’~r~n’ + String(1) + ‘、’ + “文件:” + Ls_Local_INIFile + ‘更新’ + Ls_Flag + String(Today(),’yyyy-mm-dd’) + ‘ ‘ + String(Now())

//更新本地计算机INI文件并标注拷贝完成时间

mle_1.text=mle_1.text + Ls_Text

FOR i = 1 TO Li_FileCount

//依次更新程序文件

Li_Rtn=FileCopy(ls_Server_Folder + Is_FileName[i],Is_FileName[i],True)

IF(Li_Rtn=1)THEN ; Ls_Flag=’成功!’ ; ELSE ; Ls_Flag=’失败!’ ; END IF

Ls_Text=’~r~n’ + String(i+1) + ‘、’ + “文件:” + Is_FileName[i] + ‘更新’+ Ls_Flag + String(Today(),’yyyy-mm-dd’) + ‘ ‘ + String(Now())

//更新本地计算机程序文件并标注拷贝完成时间

mle_1.text=mle_1.text + Ls_Text

mle_1.Scroll(i * 2)

//滚动系统当前光标位置

NEXT

UPDATE T_CS_Parameter SET Programme_Edition = :Ls_Server_Version;

//更新客户端的最新显示版本

mle_1.text=mle_1.text + ‘~r~n’ + ‘---’

Ls_Text=”程序更新完毕:” + String(Today(),’yyyy-mm-dd’) + ‘ ‘ +String(Now()) + ‘ ‘ + DayName(Today())

SetProfileString(Ls_Local_INIFile,’Options’,’File’,’’)

SetProfileString(Ls_Local_INIFile,’Options’,’Notes’,’’)

Lit_CSUpgrade_End=CPU()

//获取自动更新的结束时间计数

Ls_Text=Ls_Text + ‘ ‘ + String(Round(Long((Lit_CSUpgrade_End - Lit_CSUpgrade_Start) * 0.001),3))

mle_1.text=mle_1.text + Ls_Text

//统计自动更新用时并显示自动更新全部日志

⑸当服务器程序更新时,技术人员只需将配置文件CSUpgrade.ini和最新版本的程序存放到文件服务器的配置文件的Folder项指定的目录,并修改CSUpgrade.ini文件的程序版本号(Version)、需要更新的文件列表(File)和升级注解(Notes)等各项内容即可,但必须保证服务器程序的版本号高于客户端程序的版本号。

⑹实现图标栏隐式运行升级任务。图标栏的应用为客户端软件的自动升级增光添色,它可以实现完全隐藏的运行升级程序窗口。系统自动升级窗口运行后,在Windows操作系统的图标栏中显示该应用程序的图标。根据提取到的升级参数比较两地程序的版本,当服务器程序版本与本地程序版本一致时,直接调用系统的主程序并关闭自动升级提示窗口;而当服务器程序版本高于本地程序版本时,弹出自动更新窗口并显示升级程序的文本注释。

4.结束语

PB客户端软件自动升级技术已经在各类检验检疫辅助通关系统中成功应用,系统更新时发挥出的作用特别明显,可以使客户端的更新工作在本地计算机自动完成,无需维护人员到每台客户机去更新安装,从而最大限度地减少了维护的工作量,提高了技术人员的工作效率。

[1]柯建勋,张涛,邵亮编著.PowerBuilder9.0实例与技巧[M].北京:清华大学出版社,2003.

[2]侯志平,等.编著.PowerBuilder6.0参考手册[M].北京:晓通数据库研究与发展中心,2001.

姜晓龙(1977-),男,高级工程师,计算机数据库应用程序设计与开发。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!