路高鹏
(中国电子科技集团公司第五十四研究所河北石家庄050081)
在软件的生命周期中, 软件的升级和修复Bug 等后期维护工作是最重要的环节, 同时也是时间最长和投入最大的阶段[1]遥单机和客户端/服务器软件由于其具有安全性高尧稳定性好尧能充分利用本机资源尧运行速度快和服务器压力小等特点,现在仍然被广泛应用于各种如游戏尧大型MIS 系统和安全类软件等应用系统中[2]遥
为了更好地开展工作袁让软件能够无故障及高效的运行袁需要对这些软件进行及时和可靠的更新或者整体的升级换代遥本文提出了一个新的软件自动升级系统的架构袁可以很容易地扩展为不同方式和不同类型文件的升级袁有良好的通用性遥
软件自动更新[3]的实现实质上是按照一定的规则在服务器和客户机之间进行通信和传递数据袁让二者对话遥自动升级软件的功能组织如图1 所示遥
软件采用XML 文件记录远程地址信息袁目标软件的版本号袁名称何路径遥应用软件通过自动从互联网或者局域网中获得最新的软件版本[4]袁和当前客户端中的软件版本进行比较袁如果服务器端的软件版本大于客户端软件的当前版本袁系统会要求用户进行升级袁下载文件列表File.xml 配置文件[5]曰否则通知用户已是最新版本遥根据所选通信协议方式袁进行文件队列的下载遥在更新模块根据所选的协议对相应的文件列表中的文件逐个进行操作遥
在服务器端需要安装提供文件下载的HTTP 和FTP 服务器软件遥
2.2.1 配置方法
HTTP 服务器采用的是apache-tomcat-6.0.14 绿色版袁在根目录和bin 下的MessageConfig.xml 文档袁修改所有IP 值为服务器IP袁 绑定本机地址曰confserver.xml 文档袁 可修改Connector 标签的port 端口值袁默认是8080袁可根据实际需要进行更改袁 中文支持加上 URIEncoding = "gb2312"曰webappshost -managerWEB -INF 和 conf 的 web.xml 的encoding 改为utf-8遥
FTP 服务器软件采用的是FileZilla Server,其功能比起商业软件FTP Serv-U 毫不逊色遥它几乎无用户数限制曰多线程引擎曰在Windows NT4尧2000 和XP 下以服务形式运行曰针对fxp/反弹攻击过滤曰安全密码储存(使用MD5 hash)曰实时对用户/组进行管理曰所有选项可以在服务器在线时改变袁无需服务器下线曰传输超时功能可以踢掉使用普通工具保持一直在线的空闲用户曰基于设置规则的服务器和用户/组速度限制曰支持MODEZ 文件传输压缩遥安装后建立用户名和密码袁并设置权限袁供客户端连接使用遥
2.2.2 文件信息
服务器端的根目录下配置有Core.xml尧File.xml尧setting.ini袁以及发布的新文件袁都放在同一目录下遥格式如下院
淤Core.xml 文件内容袁分为HTTP 和FTP2 种袁格式类似袁在此只举出一种遥
用户安装软件成功过后袁在安装目录下Upgrade 下有淤主程序Update.exe曰于Config 文件夹院Core.xml 和setting.ini 配置文件曰盂lib 文件夹院需要静态库lib尧动态库dll 的支持文件曰榆 用户手册袁CHM 文件曰 虞日志log 文件袁XML 和INI 文件与服务器上的文件格式相同袁均是描述本地软件的版本信息遥
开发环境是Visual Studio 6.0袁开发工具是VC++遥
3.1.1 检测和下载模块设计
下面列出代码中的重要的一些语句袁利用HTTp 协议从服务器上获取文件状态:
下面是下载文件代码袁列出其中关键的一些语句遥
下面列出代码中的一些关键语句袁实现判断FTp 服务器上的文件是目录还是单个文件遥
下载单个文件也是用到InternetReadFile 函数袁 并用FtpSetCurrentDirectory()定位到Ftp 当前目录袁根据下载的文件是目录下的文件还是单个文件袁调用FtpOpenFile()打开远程文件遥
3.1.2 更新模块设计
读取每个文件标签属性袁第一个参数对应更新用途袁第二个参数对应目标软件绝对路径的相对路径遥首先判断软件是否运行袁如果运行袁则终止遥代码如下:
随后对文件进行相应的操作遥需要增添的文件直接进行移动(move)曰对COM 组件注册(regedit)曰对批量文件的移动可以通过读取注册表中WinRAR 软件的位置袁然后采用调用外部程序的方法启动WinRAR.exe袁并附加rar 命令把压缩文件解压到临时文件夹中袁然后从临时文件夹中把文件移动到目标地址曰对安装文件根据填写的参数执行静默安装曰此外还可进行单个文件的删除(Del)尧文件夹的删除(remove)遥
在软件的初始界面点击揖检查更新铱链接袁即可进行本软件的升级更新遥区别于带升级软件的配置文件袁采用ini 的文件格式遥此格式的文件内容以纯文本方式保存袁内容被分为一个或多个区段袁在区段下存放键和值对袁通过区段名和键名可以取得对应的值遥根据设定的通信协议(http 或ftp)袁进行文件下载袁比对尧升级遥
如果是主程序袁则进行旧主程序的更名袁更名并移动新主程序袁创建一个新进程遥在新程序初始化是删除旧主程序文件遥如果是其他文件袁则直接进行文件的删除尧替换操作遥在全面升级成功后再进行自身配置文件的替换遥
下面那这段代码实现主程序的更新:
自动升级软件还提供了一个新的功能袁扫描指定站点的功能遥界面上有2个视图控件袁上面的控件显示站点扫描结果袁下面的显示选中站点的文件资源遥在起始和终止IP 控件中输入地址袁点击揖直接查询铱即可遥随后在活动的站点中选择其一(需无用户名尧密码)袁可查看逐级文件资源遥
软件采用InstallShield 工具打包项目袁制作成可安装的形式袁语言为英文遥本软件只准许一个实例运行袁启动时会弹出欢迎界面遥用户遇到问题时可以按F1 键调出帮助文档袁参考帮助信息遥文档是用Macrobject 软件把word 文档转换成.chm文件制作而成袁同时利用BCG 美化了到VC++6.0 的界面袁使得外观更友好尧人性化遥
软件动态更新技术正成为当今软件维护领域的一个重要研究课题,能否提供不间断的服务正在成为人们衡量软件系统的一项重要指标[7]。在面向服务的分布式系统上实现软件的动态更新值得深入研究。
[1]张 仕.基于面向对象软件的动态更新研究[D].上海:上海交通大学,2008.
[2]宋凌怡.软件通用自动升级方法的研究与实现[J].安顺学院学报,2011(3):118-120
[3]谭安芬,王 力.系统自动更新升级软件SUS 研究[J].电子工程师,2006(6):38-41.
[4]赵小娥.用VC++编程实现程序的自动更新[J].西安文理学院学报:自然科学版,2006(4):80-83.
[5]岳国华.分布式环境下C/S 模式客户端软件自动在线升级的设计与实现[J].西安科技大学学报,2011,31(1):72-76.
[6]陈 刚,羌玲玲.用VC++实现软件的自动升级[J].计算机应用与软件,2010(10):298-301.
[7]王德俊.面向服务的分布式系统动态更新研究[D].上海:上海交通大学,2010.