自动更新系统的设计与实现
2023年9月9日发(作者:祖国妈妈的生日作文2篇)
于丹感悟人生茶-
计算机时代2010年第8期 ・ 19 - 自动更新系统的设计与实现 陈坚’,宋安平 (1.上海市经济管理干部学院计算中心,上海200237;2.上海大学计算机工程与科学学院) 摘要:在分析了传统的软件自动更新技术的基础上,提出了一种新的软件更新技术:非增量式的软件自动更新方法。 该技术通过从服务器上发布产品更新依赖关系的部署文件和更新逻辑的更新包来使客户端完成产品的自动更新。这种 设计能够防止产品版本的回退,从而保证客户端产品的可用性。 关键词:软件自动更新;部署文件;依赖关系;更新包;逻辑关系 Design and Implementation of Automatic Update System CHEN Jian‘,SONG An—ping (,.Computer Center,Shanghai Economic Management College,200237,China; 2.School of Computer Engineering and Science,Shanghai University) Abstract:On the basis of analyzing the traditional automatic software update technologies,a new sot ̄ware update technology, namely non—incremental automatic software update method,is presented.The technology enables clients to complete the automatic update of software products by releasing the deployment file including the dependent relation of products updating and update packet including update logic relation on the server.It Can prevent the version of products from retrogressing and ensure the availability of products on clients. Key words:automatic software update;deployment file;dependent relation;update packet;logic relation 0引言 随着社会的进步和发展,软件产品已经在各个行业得到了 有新的内容,一旦确认,SUS、WSUS客户端将自动下载 。还 有其他软件例如卡巴斯基、瑞星、诺顿均采用这种在线升级方 广泛的应用,软件的数量越来越多,功能越来越强大,规模也越 法,这种方法也称为增量补丁更新。这种增量补丁更新的方 存在以下两个问题: 来越庞大。软件的广泛应用对软件产品的及时更新提出了较 法,(1)服务器会将更新功能提供给许多系统,即使目标系统 高的要求。软件发行后的更新升级工作是软件生命周期的重 可能会出现与 要环节u 。软件在交付给用户使用后,会出现以下情况:逐步暴 首先需要装有某个版本的服务包。这样安装后,导致系统重新启动后出现“停止”出错 露出原先在设计和测试阶段没有发现的漏洞;系统运行期间软 核心DLL不兼容的现象, 硬件环境可能会发生变化;用户会有变更需求的要求。这些都 消息而悬挂起来 。需要对软件进行及时的更新。目前有软件产品的更新频率不 (2)如果服务器的版本比客户端的版本旧,那么会发生版 断有加快的趋势,如果没有一种办法有效地进行软件自动更 本倒退的问题。针对上述增量补丁更新方式在实际应用方面的不足,本文 新,将不利于软件系统的维护。软件不能及时更新会给用户带 来损失,同时会增加软件开发商的成本。因此,如何及时有效 提出了一种非增量式的软件自动更新方法。地进行软件产品的自动更新升级,是每个软件开发公司所面临 2自动更新系统的设计要点 的挑战。 首先,在线更新是基于Internet通信的,是将服务器上最新 版本产品和客户机上现有版本的异地数据同步的过程。在更 1相关研究现状 版本比较、客户机下载 目前,对软件产品更新的方法主要有如下几种:邮寄更新 新期间,涉及到服务器与客户机的连接、数据等技术,这需要我们确保自动更新的准确性。 方法;软件补丁包下载法;软件在线升级方法。 其次,服务器端的发布流程管理是关键环节,由于公司的客 邮寄更新方法对分散的用户而言,要做到及时更新比较困 所以服务器端针对每个客户的部署文件也是 难;软件补丁包下载法需要用户自行下载和安装,实际上是对 户需求是不同的, 用户提出了额外的要求,因此不容易实现;软件在线升级方法 不同的,用户通过自己的加密信息连接服务器进行软件的更新。最后,产品更新的复杂性控制也是一项挑战。如果一个公 由于可以及时对客户端进行自动更新升级,明显具有优势。已 有不少软件开发商针对自己的软件提供了在线升级自动更新 功能。例如微软的SUS(Software Update Services)、WSUS 司开发有多个应用软件产品,多数应用软件在结构上依赖于公 共组件,并且在应用软件之间也存在业务流程上的依赖关系, 就不是 (Windows Server Update Services)自动更新功能,当配置好 那么,要将公司里所有产品或者某几个产品进行更新,sual Basic语 SUS以后、WSUS客户端将自动查询SUS、WSUS服务器上是否 几个单一的第三方控件可以轻松完成的(比如Vi・20・ Computer Era No.8 2010 言提供的bkDLControl控件或者IncUpdate控件等)。怎样处理 署文件所规定的产品更新依赖关系产生更新列表,下载产品所 运行,完成自动更新。 产品与公共组件之间、各产品之间以及产品各版本之间的依赖 需要的更新包至本地目录,关系,成为了非增量式自动更新技术的重中之重。 3系统总体设计思路 软 }:开发组通土生版本控制 较料噼可发钷的, 躺 传 }剖DiN过“动 新t2ll 氓蜢联I删}把更鞠 包f? 裁并完成安装 图1更新系统流程图 本文将软件自动更新方法分三个主要过程(更新系统流程 图见图1): (1)编辑自动更新部署脚本,生成自动更新的软件更新包 和部署文件; (2)在线发布部署文件包; (3)应用软件从网站下载软件完成自动更新。 这三个过程中,第一、二个过程需要编辑工具的支持,第三 个过程需要自动更新程序的支持。其中编辑工具完成的功能 主要有两个:完成部署文件(xML文件格式)、发布网站更新包 文件的数据同步(保持发布池中的结构和XML结构相符)。 而更新的内容一共分三个基本组成部分:自动更新工具模 块、公共组件、公司的应用产品。 (1)自动更新工具模块是在软件系统一开始就被调用或者 被公司其他软件产品调用的模块,在整个公司发布流程里是作 为一个独立的产品发布的。它对公共组件的依赖性很小,公共 组件和其他产品都需要它进行更新,或者也可以把它当作公共 组件的组成部分,所以它的更新优先级最高,也就是说,自动更 新工具是更新时必须更新的产品,并且,更新时应当首先更新 自动更新程序,然后再更新其他产品。 (2)公共组件,包括其他产品所需要的数据库、驱动、配置 以及产品所需要的第三方控件等以及其他支持工具。它们在 发布时也是作为一个独立的特殊产品发布的,有可能被其他产 品调用。正常情况下它们应该比普通产品更早地更新,所以更 新优先级比一般产品高。 (3)应用产品,指的是公司所有产品集合中的某一个实例, 即公司的某一个具体软件产品。这些软件有独立的业务功能, 但同时依赖于公共组件,彼此之间也有依赖关系。例如,更新 A产品的时候涉及到B产品的某个模块功能,应该在对A产品 更新之前先对B产品进行更新。所以它们的更新优先级各不 相同。 自动更新程序启动时,连接网络上的自动更新服务器,下 载该产品的部署文件,与本地的产品信息进行比较,并按照部 所有更新动作由更新包完成,所有更新逻辑封装在更新包 中,运行一个更新包就可以完成对一个产品、产品组件以及数 据库的更新以及版本升级。单个更新包在逻辑上是独立,如果 是增量更新的话,就要描述更新包之间的优先级关系,所以我 们认为需把主要精力放在弄清楚处理产品与公共组件之间、各 产品之间以及产品各版本之间的依赖关系。 每一个更新包都有一个优先级,体现在部署文件中每个产 品结点下更新包结点的排列次序上(排在越上面的结点所对应 的产品优先级越高,产品结点上所描述的更新包为该产品最新 版本的更新包,其优先级最低)。更新时,优先运行优先级高的 更新包,再运行优先级低的更新包,最后运行该产品最新版本 的更新包,把产品更新到最新版本。 4更新前的部署工作 自动更新工具并不是一个独立的应用程序,无论在服务 器,还是在客户机上,都需要针对自动更新运行进行部署,这种 部署要按照客户的需求来安排产品发布流程。而笔者设汁的 自动更新工具是以更新包的方式进行更新的,每个更新包是针 对单个产品,所以对自动更新系统的部署,也就是对这些更新 包或者、兑是更新包队列的部署。 4.1服务器上发布池的部署 公司所有开发组开发的源代码通过版本管理工具(如VSS, SVN)上传版本管理服务器上,通过编译和测试后可以发布的 更新包放在webg[ ̄务器某个目录中,此目录称为发布池。 黎 站点一升级池 海棚密标牺制作l:巽 瓣 vl }0 insiallme 黧 vl 0.1 install exe 强国 l海招投标向导J:其 准增蔓 鞲£ 订.f}.0.0 insmll-c.xe 鬻£鎏V1.0 1 inslall exe path xml 图2服务器上发布池的部署 图2显示了服务器上发布池的部署图,公司所有的产品统 一通过一个部署文件管理,存放在发布池的根目录下,这个部 署文件管理所有产品更新包以及它们之间的逻辑。发布池的 根目录下还有公司所有产品的更新包以文件夹的形式存放,文 件夹名为产品名;产品文件夹下又分版本文件夹,版本文件夹 下存放各版本的更新包(instal1.exe)。 4.2注册表的部署 注册表随着软件安装包分发,用户安装产品时,安装盘在 完成自己所需要的注册表操作之后,再自动于注册表的某个内 部约定的路径下注册该产品,目录名为产品的英文名字,下属 二个键[data][version】,键值分别为产品最近的更新日期和本机 上该产品的最新版本号。自动更新工具的注册表目录下不仅 包括上述[data][version]两个键,还有[iflename](部署文件名) 计算机时代2010年第8期 - 2l ・ ate为0,说明这些更新包的下载 [host](J ̄务器地址)【post】(服务器端1:3号)[serverPath](]] ̄务器 db中的某些更新包的DonwSt路径)[serverType](下载类型l为http、2为fcp),以帮助下载自 未完成,要进行重新下载和续载(视目标路径有没有遗留文件 动更新部署文件。 5自动更新工具的设计与实现 5.1收集信息 而定),再将DonwState设为1。更新未完成:主要表现为配置文 件downlist.db中某些更新包的updatestate为0,说明这些更新包 下载了但没有被安装,在等待下载完成所有的更新包之后,开 始安装。安装完,将updatestate设为l。因为上次留有更新列 更新工具所作的第一步是收集信息。 表,所以不必再通过下载部署文件进行重新获取。 在客户机上更新工具的根目录下,自动更新工具放置了一 5.2下载更新包 个配置文件,用于存放上阶段的更新情况,每次下载和运行一 下载更新包是根据更新列表所提供的更新包信息内容,把 个更新包后,都会用更新列表回写配置文件,将DonwState和 Updatestate更新。 在实际更新过程中会有重启系统的需要,而且更新中由于 种种原因,更新任务被意外中断的情况可能会发生。对此情况 的解决方案是:在部署文件与注册表中的版本比较后产生的更 新列表(该列表为自定义格式)中添加更新状态和下载状态两 个字段。更新状态字段为0时,说明更新任务未完成;更新状态 字段为l时,说明更新任务已经完成。下载状态字段为0时,说 明下载任务未完成;下载状态字段为1时,说明下载任务已经完 成。每次下载或运行一个更新包后,这两个字段都将被重新赋 值,并且往程序目录下的downlist.db(自定义配置文件)写入整 个更新列表。在自动更新工具启动、下载或运行一个更新包之 前,都需读取downlist.db,重置更新列表。在成功完成自动更新 以后,会将downlist.db和下载时的临时目录删除。 收集信息阶段,首先是确定主窗体是按照静默方式还是非 静默方式调用,可将自动更新工具做为一个带参数的exe程序 来处理。 if ParamStr(1 1<>’silence’then self.Visible:=true; 其次对系统开始的状态进行判断,通过配置文件内容判断 上一次自动更新过程是否完成或更新成功。 可能的起始状态可以分为下列三种: 状态0。上一次更新成功并且为完成的更新,表现为客户 机本地没有历史残留(downlist.db和临时目录都不存在)。这个 时候,将开始的工作视为全新的更新过程。调用TReg类访问 注册表,得到网络连接信息和部署文件信息,测试网络连接情 况,并完成对服务器的连接,下载xml部署文件,读取xml部署 文件,得到了服务器上最新更新包的信息,和本地的相关信息, 就可以建立更新列表了。 状态1。上一次更新不成功并且有残留文件,主要表现为 自动更新根目录下的临时目录没有被清除掉、配置文件 downlist.db为空或者读写失败。这时候,必须为新的更新任务 进行环境清理。因为对更新包的下载全部采用续传方式进行, 考虑到用户大部分对下载软件续传不是很了解,如果本地的续 传文件是“脏数据”的话,则更新包通过续传的方式下载完成 后,更新包一定无法进行运行,所以,必须对临时目录和xml部 署文件进行清理,具体操作为删除。清理完毕后,重新返回收 集信息,重新验证上次的更新状态,如果清理成功,应该转为状 态0的操作;否则继续作状态l的清除操作。 状态2。上一次更新未完成。其中分两种情况:下载未完 成和更新未完成。下载未完成:主要表现为配置文件downlist. 更新包从服务器上下载到客户机的过程。 为了实现下载过程在Http和Ftp下均可支持断点续传,系 统选用了Delphi语言中封装的Indy通信,对下载的功能类用多 态的方式实现。 Indy控件,提供了TIdHttp、TIdFtp两个类来完成对Http、Ftp 的通信功能。选用这组控件主要是因为,Indy的应用已经很 广,技术相对比较成熟,对lntemet函数封装的使用比较方便。 Tserver是下载通信类的基类,用来统一fcp和http协议对 外调用的函数,用面向对象多态的思想方法,通过外部变量来 控制通信将采用哪种协议,而不必关注两种协议通信函数的不 同之处。 TFtp是利用Indy控件提供的TidFtp完成FTP传输协议的 基本功能,所以内部封装了一个TidFtp,继承了Tserver类的大 部分属性和方法。可以通过属性host,port,UserName,PassWord, 对连接服务器时所需要的基本属性进行赋值。 TidFtp的函数极其简单,其访问形式和访问windows文件 夹的目录结构相似,并且它的下载函数本身就封装了断点续传 的功能,只要将get第三个参数设为true,就可以续载文件。 THttp利用Indy控件提供的TidHttp完成Http传输协议的 基本功能,所以内部封装了一个TidHttp,属性host,port可以通 过它们,对连接服务器时所需要的基本属性进行赋值,这与 TFtp相似,不同的是不需要用户名和密码,在访问服务器和下 载方面较复杂一些。 Tidhttp的下载方法get()本身是不支持断点续传的,需要设 置上下界。但其连接方式比较简单。 在调用时,首先用多态的方法创建一个下载类Tserver(根 据下载类型:l为http,2为郇)并进行实例化,然后通过更新列 表结点中的连接信息对Tserver进行赋值,再连接服务器,检测 服务器上源文件和本地目标文件的大小,安排断点续传逻辑, 进行下载,最后断开服务器。整个过程是针对多态的Tserver进 行操作的,所以完全不必考虑协议的问题,因为FTP,Http对外 的方法函数是统一的。 5.3更新 更新包其实是一个更新逻辑的集合,由打包软件产生,能 完成解压、覆盖、运行脚本、文件操作(文件运行、修改、删除 等)、服务操作(服务的启动、暂停、中止)和重启等API功能。 对这些更新所用的操作和更新逻辑都不需要关心,因为它们完 全被更新包封装,一旦运行更新包,这些操作都会被实现。这 样的设计主要是出于“自动更新流程的简化”和“发布工程师必 (下转第24页) ・24 ・ Computer Era No.8 2010 3系统软件设计 3.1系统软件开发介绍 实现远程监控。本系统具有安全性高、成本低廉,操作简单,可 靠性好等优点,可广泛应用于家庭和企事业单位安防领域。 根据工作原理,程序系统主要由以下三大模块组成:启动模 块、控制模块、监控模块。启动模块对部件进行必要的设置。 控制模块接收用户指令,分配工作,进行相应处理。监控模块 对传感器实时监控,被触发后并报警m 。 软件设计使用图形化交互式C语言(简称VJC)。VJC是用 于能力风暴智能机器人系列产品的软件开发系统,具有基于流 程图的编程语言和交互式C语言,为开发智能机器人项目、程 序与算法、教学等提供了简单而又功能强大的平台。 在VJC平台上,用户不仅可以用直观的流程图编程,也可 以用Jc代码编写更复杂高级的机器人程序。有了流程图和Jc 语言两种编程方法双剑合壁,VJC能够让用户在编写机器人程 序中发挥最大的创造力。 VJC操作简便,有直观清晰的图案和简短的文字说明,用 户可以很方便地用图形模块搭建程序流程图,平台会动态生成 相应无语法错误的Jc代码。流程图搭建完毕,Jc程序就已经 编写完成。可以立即下载程序到机器人中运行,还可以在Jc代 参考文献: 【1l陈恳等编著.机器人技术与应用【M】.清华大学出版社,2006. 【2l周志华,王珏编著.机器人学习及其应用2007[M1.清华太学出版社, 2007. 图4系统软件流程图 【3】仵博,刘簧东.基于GSM的通用远程报警控制器的研制【J】.计算机工 程与应用.2007.31(11):81~83 码编辑环境中对程序进行编辑、注释和修改等。 系统软件流程如图4所示。 3.2软件调试 【4】周国祥,刘成良,JayLee.基于GSM的远程通信控制器研制反其应用 【J】.计算机工程,2005.19. 2008. 调试家用报警机器人是一个相当耗时的过程,需要反复调 【5】张庆双等编著.智能报警与控制经典实用电路IM1.机械工业出版社, 试机器人各个传感器的参数。本软件采用各个模块单个调试 的方式,这样可以使效率大大提高。 【6】宗光华等编.机器人的创意设计与实践【M1.北京航空航天史学出版 让.2004. 4结束语 基于GSM的家用报警机器人采用了基于移动设备的工作 交互界面,而且与距离无关,只要有GSM网络覆盖的地方即可 【7】李瑞峰,顾义坤.基于GSM/GPRS网络的家用机器人远程监控系统 设计【J】.哈尔滨工业大学机器人研究所,2006.128(1 8):69-72 方式,在这种方式中,手机是控制终端,这可以提供良好的人机 【8】蔡自共编著・机器人学基础【M】・机械工业出版社,2009・ (上接第21页) 然了解更新逻辑”的前提而考虑的。 软件公司软件产品的更新维护,取得了成功,并且得到了用户的 现在所要做的是,逐个运行更新包,完成再运行下一个安装 满意和积极的评价。今后需要研究的有如何进一步完善本文所 包。这个操作通过AP可以完成。但是一旦发生重启操作,一切 提出的方法,以及如何针对大型软件更新时减少更新的内容及 操作都将停止,所以每个更新包的下载和更新都将写配置文件, 再在程序开始时读取配置文件,以继续上一次的更新动作。 本号是否被修改,因为注册表的值是自动更新工具和更新包惟 一其开销等课题。我们将在软件行业中推广和应用这一技术。 参考文献: 2007.12:156 J】.计算机应用, 在所有更新包完成运行之后,还要判断注册表里的产品版 …陈坚,宋安平.一种电子支付接口的设计和实现【约定判定更新包更新是否成功的接口。 【2l矫桂秋,单一宁.网络软件自动升级技术剖析【J】.计算机应用, 2003.23(1 1). 完成阶段主要包括向用户出示更新类表、清理场景、写日 志和关闭注册表的操作,也就是程序的收尾工作。 【3】谭安芬,王力.系统自动更新升级软件SUS研究【J】.电子工程师, 2006.32(6). 清理场景,其主要任务是删除下载临时目录和XML部署文 {4】Ben Aguiluz.Microsoft Windows Server Upd ̄e Services Overview. 件以及downlist.db配置文件,以使下一次更新逻辑不受影响。 【5】http://www.microsoft.com/downloads/details.aspx?Familyld= 2478D94——a29c——483c——9dc1-9740bf3081a5&displayLang= en.2005 6结束语 本文分析了现有软件更新技术,针对现有软件更新技术的 不足,提出了一种基于非增量方式的软件更新方法,并详细介 【6】Software Update Services Overview,http://technet.microsoft. 绍了本方法的技术原理和实现细节。目前,该技术已应用于某 com/en—us/wsus/bb4662o8- 。P 网