一种软件自动更新方法

2012-04-29 02:31:34赵宏伟孙永清崔宇寅
电脑知识与技术 2012年1期
关键词:客户端服务器

赵宏伟 孙永清 崔宇寅

摘要:探讨软件不可避免的软件版本更新问题。设计的自动更新方法从网络上自动下载新版本保存到本地,然后根据用户需求,进行软件自动更新。在设计过程中,充分考虑了各种原因导致的软件更新失败,并采用了应对办法,大大提高了自动更新方法的通用性。

关键词:自动更新;功能更新;版本更新;客户端/服务器;XML

中图分类号:TP319文献标识码:A文章编号:1009-3044(2012)01-0074-03

A Method of Software Upgrade Automatically

ZHAO Hong-wei, SUN Yong-qing, CUI Yu-yin

(Key Laboratory of Ministry of Public Security Information Network Security, Shanghai 201204, China)

Abstract: This paper discusses how to update the software to the new version that we can not avoid encountering this problem. The designed method of the automatic update automatically downloads the new version from the network, then according to usersneeds, the software is automatically updated. In the design process, the various causes of failure of software updates had been taken into account, and many responses were used. Through the practice above, this method was enhanced versatility.

Key words: auto-update; functional upgrades; version upgrades; client/server; XML

全球几乎每个时刻都有新的软件诞生,不管是大型软件还是小型应用程序,就算设计得非常完美,也不可能没有BUG或者不需要进行扩展。那么当发布出去的软件出现问题或者有新功能需要更新怎么办呢,一个常见的办法就是进行更新。一种做法是由用户自己去下载最新版本发布,但是这种做法不仅给用户带来了不便,也常常因为用户未能及时更新造成安全隐患。因此,随着互联网的普及,另一种软件更新方法随之产生,就是软件自动更新,而且有越来越多的软件采用了这种自动更新的方法。自动更新技术不仅简化了用户操作,也能让软件中的各种GUB得到快速修复,同时软件中增加的内容能够尽快展现在用户面前。

更新程序一般采用客户端服务器模式,由于软件客户端所使用的语言、所运行的环境、以及其他方面的差异,在实际实现时,往往面临了各种困难,如需要用户反复重启或者用户手动关闭客户端软件等等。如何设计一种通用的软件自动升级方法,在不需要用户干预的情况的实现软件自动更新成为一个需要探讨的课题。

本文设计了一种更为通用的软件更新方法,可以在客户端软件运行自动进行更新,更新过程中不需要退出客户端软件。对用户而言,整个升级过程是完全透明的,同时,考虑到可移植性,本文设计的方法能够使用多种语言实现。

1自动更新方法实现

1.1方法模型

自动更新是软件的一项重要功能,实现起来之所以复杂是因为在软件更新过程中存在着各种不确定的因素,如下载新版本失败、客户端程序被占用等等。针对这些问题,本文设计了的软件自动更新方法吸收了Windows操作系统升级的做法,在软件被占用时记住状态,等待操作系统重新启动后,页面文件被创建前,此时用户还没有完全进入操作系统,而且需要更新的软件也没有启动起来。这个方法的自动更新模型如图1所示。

在这个模型里,软件正常运行后,首先进行版本检测,当服务器版本高于当前运行的版本时,就下载新版本到本地,下载完成后记录状态。当用户手动升级软件或者操作系统重启后,更新软件,完成更新后软件继续正常运行。这样就完成了一次软件的更新,在实际实现中,本文将执行更新功能的模块独立出来,做成一个Update程序,同时为了表述方便需要更新的软件称为Loader程序,Loader程序启动自动更新的程序,可以是软件的主程序,也可以是其他程序。

1.2方法实现过程

根据图1中的描述,本文的软件自动更新方法是一个具有一定周期的循环过程,一次周期的具体实现过程如下:

1) Loader程序启动Update程序。

2) Update程序发现新版本,根据Update文件夹下的包名和sha1值判断是否已经下载,如果没下载,从服务器下载新文件包到update文件夹下。

3) Update程序的提醒线程弹出对话框提醒用户有新版本需要更新,如果用户点击[是]开始更新,[否]休眠10分钟再提醒,如果用户一直不同意更新,则在操作系统下次启动后自动更新。

4)用户选择更新后Update程序开始更新工作;

5)更新时候首先判断注册表更新步骤键值是否为2,如果是2表明前期已经备份完毕跳过备份步骤直接更新文件,否则创建backup文件夹,根据配置文件先将需要更新的文件移动到backup文件夹中作为更新失败恢复。拷贝完毕修改注册表更新步骤键值为2,然后将update文件夹中的文件根据更新配置文件解压到相应位置覆盖原有文件,如果备份或者更新途中失败,那么将备份文件夹中的文件重新拷贝出来还原版本,提示用户重启操作系统更新。更新完成后删除update、backup文件夹,删除注册表更新配置脚本将更新步骤键值设为0。

6)更新成功后启动loader程序。

1.3 Loader与Update的启动与交互

Loader程序通常是由用户手动运行或者跟随操作系统启动起来的,Loader程序运行后自动启动Update程序,Update程序首先判断用户是否可以联网,这个功能可以有很多种实现方法,比如可以ping某个网站或者直接连接更新服务器。如果客户机可以联网,那么从服务器下载更新配置文件来本地,通过更新配置文件中的信息来确定本地系统中的软件是否需要更新。

Loader启动后不仅启动了Update进程,而且启动了一个监听线程,该监听线程设置了一个信号,接收异步事件,等待Update进程的事件通知,Loader进程在没有事件通知前一直做着自己的事务,如图2所示。当Update进程检查到有新版本后,设置升级事件,通知Loader进程做相应的升级前的准备工作,自己则进入等待状态。当Loader进程完成准备工作后,就告诉Update进程已准备完毕,然后Update进程就启动更新线程进行实质性的软件更新了。

在这个交互过程中,Loader进程接到升级事件通知启动后通常提示用户重新启动操作系统,如果用户同意,Loader进程则进行准备工作,需要准备的工作包括中断现有所有事务、保存现有各种状态等。如果用户不同意立即更新,则记录状态,下次操作系统重启时自动更新Loader程序。

1.4 Update进程实现

在Update进程实现过程中,有2个发挥重要作用的线程,一个是下载线程,另一个是更新线程。因此Update进程重点就是对这2个线程的实现。

1.4.1下载线程

下载线程的作用是检查并下载新版本,其实现流程如图3所示,其步骤如下:

1)下载线程首先先检查是否有上次没更新的配置信息,如果有先更新;下载线程通过读取配置文件,与本地程序的版本信息进行比较,获知新版本软件是否已下载或已备份。

2)如果新版本已下载,则提示用户进行软件更新。

3)如果新版本已备份,则直接通知启动更新线程进行软件更新。

4)如果既没有下载新版本,又没有备份,就根据配置信息的url链接地址从服务器下载新文件到update文件夹。下载的文件均为单个的zip压缩包,下载完毕根据SHA1判断文件完整性,如果SHA1校验失败,重新下载,重试3次失败暂停更新。与本地软件进行版本比对后,确定是否有新版本;

5)如果有新版本则创建Update文件夹,并下载需要更新的文件;

6)为了保证下载的软件没有被恶意篡改过,需要检查文件SHA1值;7)然后提示用户更新,并通知启动更新线程。

1.4.2更新线程

更新线程的作用是实现软件版本的更新升级,包含了2种情况,一种是用户同意更新,更新线程就关闭Loader程序后进行更新,另一种是用户不同意立即更新,更新线程则设置为操作系统重新启动后进行更新,其流程如图4所示。

更新线程的执行步骤如下:

1)更新线程首先读取的配置信息,根据配置文件确定新版本是否已下载或已备份。

2)如果已有新版本下载,则根据配置文件进行软件更新,更新失败说明软件被占用或者其它原因,此时可能需要重新启动操作系统。3)如果更新成功,则在配置文件中修改更新步骤为0,表示回到初始状态。4)如果没有新版本被下载,但是备份文件夹中有新版本,则根据配置进行更新。

5)当更新成功后,启动Loader进程。

2更新配置文件和备份配置文件格式

本方法中涉及的更新配置文件和备份配置文件均采用XML格式,以提高通用性及可读性,配置文件格式如下。

2.1配置文件

update0001.zip21212231

/lib/socket.dll63adfadsfeabd7a7c7a7779543

update0002.zip4129821

/lib/demo.dll7d7a3b2135bbdccd7a7c7a77793

update0003.exe44223456

/loader.exe135bbdccd7a7c77d7a8d7f66b543b2

2.2备份文件格式

backup0001.bak/lib/socket.dll

backup0002.bak/lib/demo.dll

backup0003.bak/loader.exe

猜你喜欢
客户端服务器
通信控制服务器(CCS)维护终端的设计与实现
县级台在突发事件报道中如何应用手机客户端
传媒评论(2018年4期)2018-06-27 08:20:24
孵化垂直频道:新闻客户端新策略
传媒评论(2018年4期)2018-06-27 08:20:16
基于Vanconnect的智能家居瘦客户端的设计与实现
电子测试(2018年10期)2018-06-26 05:53:34
得形忘意的服务器标准
知识产权(2016年8期)2016-12-01 07:01:13
计算机网络安全服务器入侵与防御
客户端空间数据缓存策略
积分刷刷刷-FTP服务器篇