软件升级方法和系统与流程

文档序号:12041423阅读:315来源:国知局
软件升级方法和系统与流程
本发明涉及数据处理设备的软件处理技术领域,尤其涉及一种软件升级方法和系统。

背景技术:
现有的数据处理设备(如计算机、智能手机等)的软件升级方法通常有两种,一种是基于安装包的升级方式,另一种是基于cab升级包的升级方式。所述基于安装包的升级方式很简单,就是从服务器上下载一个全新的安装包,待下载完成后启动之,安装包会完成对旧版本的卸载和新版本的安装工作。这种基于安装包的升级方式的缺点是:带宽浪费严重,即使是一个小的功能改动,也需要用户下载几兆(M)甚至上百兆字节的安装包,绝大多数没有变化的文件也会被一同下载和替换没从而造成带宽浪费。所述基于cab升级包的方式更加有针对性,所述cab升级包是一种微软WINDOWS操作系统的压缩包,其中包括升级文件。在这种方式中,只是将软件的版本x到版本y之间的差异文件按照操作系统的标准格式(cab格式)进行打包得到cab升级包,待升级程序将该cab升级包在下载到用户本地设备后启动该cab升级包,cab升级包会按照其内部的升级逻辑和文件完成指定文件的更新和操作,从而实现软件版本的升级。但是这种基于cab升级包的升级方式的缺点是:软件的版本数量的增多会导致制作cab升级包的工作量激增。例如,如果一个产品当前的版本号是m,而运营环境中支持的最小版本号是n,那就意味着当前的运营环境下会有m-n个不同的版本同时在被用户所使用,那么采用这种升级方式就意味着需 要为这m-n个不同的版本分别量身定制一个不同的cab升级包,而且每次升级皆是如此,因此制作多版本cab升级包的工作量是非常巨大的,导致维护软件升级的成本大大增加。

技术实现要素:
有鉴于此,本发明的主要目的在于提供一种软件升级方法和系统,以节约带宽资源和降低软件升级的工作量。本发明的技术方案是这样实现的:一种软件升级方法,包括:客户端向服务器上报软件升级请求,该升级请求中携带本地待升级软件的文件信息;服务器根据升级请求中的待升级软件的文件信息确定与最新版本软件的差异,根据软件差异生成升级指令信息并下发给客户端;客户端根据收到的升级指令信息中的指令下载更新相应文件并执行相应的本地升级操作。一种软件升级系统,包括:设置在客户端中的升级模块,用于向服务器上报携带本地待升级软件文件信息的软件升级请求,并根据服务器返回的升级指令信息中的指令下载更新相应文件并执行相应的本地升级操作;设置在服务器的升级服务模块,用于接收客户端中的所述升级模块发送的升级请求,并根据该升级请求中的待升级软件的文件信息确定与最新版本软件的差异,根据软件差异生成升级指令信息并下发给客户端的升级模块。与现有技术相比,本发明的本质是将cab包中的处理逻辑迁移到数据处理设备客户端的升级模块中,并由服务器根据待升级软件的文件信息确定与最新版本软件的差异,根据软件差异动态生成升级指令信息并下发给客户端的升级模块;升级模块根据服务器下发的升级指令完成文件的下载、更新、以及删除、注册COM组件等在现有技术中需要cab包执行的操作。这样服务器和客户端之 间交互的信息少了,节约了带宽资源,同时还可以规避掉原来手工制作cab包的工作,转为由升级服务器根据用户的版本情况动态组织升级指令,从而降低了了软件升级的工作量,进而降低了维护软件升级系统的运营成本。附图说明图1为本发明所述软件升级方法的一种流程图;图2为本发明所述将查找到的操作指令集进行合并的一种示意图;图3为本发明所述方法中客户端升级模块的一种执行流程图;图4为本发明所述软件升级系统的一种构成示意图;图5为服务器端的所述升级服务模块的一种组成示意图;图6为客户端的所述升级模块的一种组成示意图。具体实施方式下面结合附图及具体实施例对本发明再作进一步详细的说明。图1为本发明所述软件升级方法的一种流程图。参见图1,该流程包括:步骤101、客户端向服务器上报软件升级请求,该升级请求中携带本地待升级软件的文件信息。步骤102、服务器根据升级请求中的待升级软件的文件信息确定与最新版本软件的差异,根据软件差异生成升级指令信息并下发给客户端。步骤103、客户端根据收到的升级指令信息中的指令下载更新相应文件并执行相应的本地升级操作。所述的客户端可以是指有中央处理器(CPU)、内存和操作系统提供软件运行环境的计算系统上运行的软件,所述计算系统典型的例子为台式计算机、笔记本电脑,平板电脑以及具有计算能力的智能手机等手持设备及有计算能力的机器人设备等。本发明所述方法中所述客户端侧的操作由本地待升级软件对应的升级模块执行,该升级模块也是一个软件程序,当其启动后可以运行在一个与待升级软件独立的进程中。所述客户端中的所述升级模块发送的升级请求中的文件信息主要包括待升级软件中所包含各个文件的文件名和版本信息,还可以进一步包括各个文件的HASH值和相对路径等信息。所述服务器在收到所述升级请求后,根据该升级请求中的待升级软件名称查找该软件的最新版本号,根据所述各文件的文件名和版本信息与最新版本软件进行对比,确定文件差异和版本差异;如果没有差异则说明不需要升级软件,此时向客户端返回不需要升级的指令,所述升级模块收到该指令后停止升级操作;如果有差异,则再根据软件版本差异动态生成升级指令信息。所述服务器根据软件版本差异动态生成升级指令信息的具体方法包括如下步骤11)至13):11)根据所述文件差异查找最新版本软件中的新增文件和更改文件,将所述新增文件和更改文件的清单信息组成待更新文件清单信息。所述待更新文件清单信息包含了从升级请求中的当前版本升级到最新版本时需要新增、修改和替换的文件列表,每个文件都包含文件的描述信息,比如文件名、相对路径、文件大小、以及MD5校验值等等。此处,可以由服务器针对待升级软件维护一个所有文件最新版本的映射表,如下表1所示为该映射表的一种范例。文件名相对路径大小最后修改版本AAA.dll%INSTALL_DIR%/BIN251320532BBB.dll%INSTALL_DIR%/BIN473220476CCC.png%INSTALL_DIR%/RES100420587DDD.bmp%INSTALL_DIR%/RES131320476表1如表1所示,所述映射表中包括待升级软件的所有文件的最新版本的清单信息,每一条文件清单信息至少包括文件名、下载路径信息、相对路径信息。上述表1中,由于服务器将同一软件的所有文件存储在该软件对应的一个统一总目录下,且在该目录下的相对路径与该软件在客户端中的安装目录下的相对路径完全一致,因此表1中所述相对路径可以代表其下载路径,只 要在相对路径前面统一加上该软件在服务器上的总目录即可,因此在表1中只维护了相对路径,只要附带上总目录的地址就可以相加得到下载路径信息。当然,表1中也可以包括绝对的下载路径信息,客户端不必加目录地址,可以从该绝对的下载路径信息下载相应文件。另外,所述映射表中的文件清单信息中还要包括文件大小、MD5校验值(在表的宽度所限,在表1中并没有体现)等、以及最后修改版本信息。当服务器收到升级请求后,服务器则用升级请求中携带的待升级软件的当前文件清单过滤上述映射表,将最新版本软件中的新增文件和更改文件保留下来组织成一个待更新文件的清单。所述新增文件就是客户端待升级软件没有的文件;所述更改文件就是客户端待更新软件中有相同文件名的文件,但是文件的版本信息与最新版本不同,说明其内容发生了改变,需要将客户端的待升级软件中的同名文件进行更改。12)根据所述版本差异查找所有版本号高于所述升级请求中所述版本信息的所述待升级软件的操作指令集,并合并所查找到的操作指令集。本发明中,每个软件版本的更新都可能会伴随有一个操作指令集,一次版本升级中可能有若干这样的操作指令,所以最终会以集合的形式组织起来。所述操作指令集中的每一条操作指令包括:本地客户端可识别的操作指令名称、以及该指令对应操作的目标文件的相对路径和文件名信息,还可以进一步包括对目标文件进行处理的辅助程序名称。如下表2所示为操作指令集的实例,为了方便说明,表2中进一步包括了对每一操作指令的用途说明。表2服务器中针对每个软件版本的更新都可能会伴随有一个操作指令集,每 一操作指令集都有一版本号。服务器在收到升级请求后,查找待升级软件的所有版本号高于所述升级请求中所述版本号的操作指令集,最终返回给升级模块的指令集要将查找到的指令集进行合并。图2为本发明所述将查找到的操作指令集进行合并的一种示意图。如图2所示,假设高于升级请求中所述版本号的操作指令集为版本号(version)为20476的操作指令集201和版本号为20532的操作指令集202,则合并这两个操作指令集,得到最终的指令集203。13)将所述更新文件清单信息和合并后的所述操作指令集作为所述升级指令信息。所述升级指令信息最终被服务器以XML格式进行组织得到一张数据表下发给客户端的升级模块。该XML数据表主要包含“更新文件清单”、“操作指令集合”以及一些其他的附加信息。例如所述服务器还进一步查找所述待升级软件的最新版本的功能描述信息,将该功能描述信息填加到所述升级指令信息中。所述功能描述信息用于对此次升级带给用户的新功能进行说明,包含一些描述信息和预览图片,以便用户在升级之前就能对此次升级的效果有一个了解。一个典型的XML格式的升级指令表的内容如下XML代码所示:本发明所述的升级系统中,设置在客户端中的升级模块执行的操作主要 包括:向服务器上报携带本地待升级软件版本信息的软件升级请求、根据服务器返回的升级指令信息中的指令下载文件并更新本地的相应文件、以及根据所述升级指令执行相应的本地升级操作。图3为本发明所述方法中客户端升级模块的一种执行流程图。参见图3,该流程包括:步骤301、客户端的升级模块与服务器交互判断是否要自升级,即判断服务器是否有比本地更新版本的升级模块,如果是则下载新版本的升级模块的文件并替换本地原有的升级模块文件,并重新启动新版本的升级模块执行下一步骤302;否则直接执行下一步骤302。由于升级模块本身非常精简,其包括的文件数量也都是控制在1至2个以内,所以整个升级模块的自身升级过程非常简单和快速。当然本步骤301为可选步骤,也可以跳过本步骤,直接执行步骤302。步骤302、升级模块与服务器交互判断是否需要升级软件,即向服务器上报软件升级请求,该升级请求中携带本地待升级软件的文件信息,其中包括该待升级软件中所包含各个文件的文件名和版本信息,还可以进一步包括各个文件的HASH值和相对路径等信息,服务器根据所述各文件的文件名和版本信息与最新版本软件进行对比,确定文件差异和版本差异,如果有差异则服务器按照前述描述的方法,根据软件版本差异动态生成所述升级指令信息并下发给客户端的升级模块,并执行下一步骤303;如果没有软件差异则通知客户端的升级模块升级失败并退出本流程。步骤303、所述升级指令信息中包括待更新文件清单,且每一条文件清单信息包括文件名、下载路径信息、相对路径信息,因此升级模块可以根据所述待更新文件清单中的文件下载路径信息下载相应的文件。另外,如果所述升级指令信息中包括新版本软件的功能描述信息,则所述客户端在收到所述升级指令信息后、本步骤303之前,进一步包括:显示所述升级指令信息中包含的功能描述信息,以便用户在升级之前就能对此次升级的效果有一个了解。步骤304、按照待更新文件清单中的相对路径信息将下载的文件更新到本地待升级软件安装目录的所述相对路径下。本步骤304也可以称为旧版本和新版本差异文件的合并,即将下载到的新文件替换到待升级软件安装目录下的旧版本文件。在很多情况下,待替换的目标文件可能暂时无法修改或替换(如正在被杀毒软件扫描,或正在被某个进程使用),那就需要对这些情况进行全方位的安全机制进行保障,因为待升级软件的各个程序文件通常都是相互依赖的,如果有一个文件没有替换成功,极有可能导致程序无法再次运行。所以,本发明针对这个问题做了如下的两项安全保障机制:a)执行文件的合并(即更新文件)操作前,判断待升级软件是否正在运行,如果有在运行,则提示用户关闭该软件,关闭后再更新相应文件,否则直接更新相应文件。本发明所述升级模块和待升级软件是运行在两个进程的,关闭待升级软件不会对当前的升级模块造成影响。b)文件合并前,备份本地的待更新的原文件,即将待替换的旧版本文件备份到一个临时目录下,之后进行文件更新。如果更新过程中发现有某一个文件更新失败,则判断这个文件是否必须要更新成功,如果是则说明这个文件对程序的正常运行是不可或缺的,必须用所述备份文件还原所有已经更新的文件。这样做的目的是保证“虽然升级失败,但旧版本依然可以运行”。而如果这个文件不是必须要替换成功的,则可以将该文件的最新下载文件注册到操作系统(如WINDOWS系统)的重启替换服务中,待系统重启时启动替换服务来更新该文件。具体如何判断所述文件是否必须要替换成功,则可以依据更新文件清单中的“关键文件(keyfile)”字段来判断,这种情况下需要服务器在生成更新文件清单时,每个文件的描述信息中还需要包括一个“关键文件”字段,用来标识该文件是否为关键文件即是否必须替换成功,例如:绝大多数底层组件是程序运行必须的,就会被作为keyfile,而如果是扩展资源包和插件等,则对整个系统的正常运行不会造成很大的影响,则不用作为keyfile。客户端在某个文件更新失败时判断该文件的“关键文件” 字段,如果是关键文件则判定必须要替换成功,否则不是必须替换成功的文件。步骤305、完成文件合并后,还要根据所述升级指令信息中的操作指令集执行相应的本地升级操作。所述操作指令集中的每一条操作指令包括:本地客户端可识别的操作指令名称、以及该指令对应操作的目标文件的相对路径和文件名信息。所述升级模块针对每一条操作指令,从待升级软件安装目录的所述相对路径中查找到与该操作指令所指文件名相同的目标文件,并对该目标文件执行所述操作指令名称对应的操作。比如对文件列表中的某个COM组件进行注册、删除某个目标文件、采用操作指令中指定的程序处理某个目标文件等等。在实际应用过程中,由于直接下发完整的文件会非常占用带宽,因为一个几M大小的文件可能因为一点小小的修改就要让客户端下载整个文件,这样既浪费时间又浪费网络带宽,所以本发明还可以实现一种节省带宽和文件下载时间的实施例。在该实施例中,所述客户端向服务器端发送的升级请求中的文件信息中进一步包括各文件的HASH值;并且,所述服务器在查找出最新版本软件中的更改文件后,根据该更改文件的文件名在所述升级请求中查到对应的文件HASH值,再根据该HASH值查询服务器端存储的与该HASH值相同的原始文件,将该原始文件与最新版本的同名文件进行二进制对比,生成二进制差异文件,用该二进制差异文件的下载路径信息代替所述待更新文件清单中的同名文件的下载路径信息,即该更新文件的信息包括:文件名、二进制差异文件的下载路径信息、相对路径信息等。所述二进制差异文件通常称为diff文件,该diff文件的体积很小,其中描述了需要对旧版本文件进行哪些二进制级别的增删改操作来生成一个新版本的文件。比如在x处删除2个byte的数据,在y除修改3个byte的数据等等。至于如何将该原始文件与最新版本的同名文件进行二进制对比,生成二进制差异文件可以采用现有的技术手段,例如在LINUX操作系统中,可以 采用diff操作命令来生成两个文件的二进制差异文件。另外,由于服务器端生成一个diff文件的时间成本比较高,所以生成的diff文件及原始文件的HASH值都可以存储下来,下一次收到升级请求时,可以根据文件的HASH值直接查找到对应的diff文件,并直接将diff文件的下载路径替换到待更新文件的清单中,不必重新生成biff文件。所述客户端根据所述待更新文件清单信息中的下载路径信息下载到相应的二进制差异文件后,按照对应的相对路径信息,进一步将本地待升级软件安装目录的所述相对路径下的同名文件与所述二进制差异文件进行合并,从而产生完整的新文件。至于如何合并二进制差异文件同样可以采用现有的技术手段,本文不再赘述。上述实施例中,对于仅仅修改了内容的文件,客户端可以只下载其对应的二进制差异文件,而该二进制差异文件又非常小,从而节省了带宽资源和文件的下载时间。与上述方法对应,本发明还公开了一种软件升级系统,用于执行本发明的所述方法。图4为本发明所述软件升级系统的一种构成示意图。参见图4,该软件升级系统包括:设置在客户端中的升级模块401,用于向服务器上报携带本地待升级软件文件信息的软件升级请求,并根据服务器返回的升级指令信息中的指令下载更新相应文件并执行相应的本地升级操作;设置在服务器的升级服务模块402,用于接收客户端中的所述升级模块401发送的升级请求,并根据该升级请求中的待升级软件的文件信息确定与最新版本软件的差异,根据软件差异生成升级指令信息并下发给客户端的升级模块401。图5为服务器端的所述升级服务模块的一种组成示意图。参见图5所示,在一种具体实施例中,服务器端的所述升级服务模块402具体包括:版本差异确定模块421,用于根据所述各文件的版本信息与最新版本软 件进行对比,确定文件差异和版本差异;待更新文件确定模块422,用于根据所述文件差异查找最新版本软件中的新增文件和更改文件,将所述新增文件和更改文件的清单信息组成待更新文件清单信息;所述待更新文件清单信息至少包括:每一待更新文件的下载路径信息、相对路径等信息;操作指令确定模块423,用于根据所述版本差异查找所有版本号高于所述升级请求中所述版本信息的待升级软件的操作指令集,并合并所查找到的操作指令集;所述操作指令集中的每一条操作指令至少包括:本地客户端可识别的操作指令名称、以及该指令对应操作的目标文件的相对路径和文件名信息;升级指令合成发送模块424,用于将所述待更新文件清单信息和合并后的所述操作指令集作为所述升级指令信息下发给发起升级请求的升级模块。进一步的,所述升级服务模块402还可以进一步包括:描述信息确定模块425,用于查找所述待升级软件的最新版本的功能描述信息,将该功能描述信息发送给升级指令合成发送模块424;所述升级指令合成发送模块424进一步将该功能描述信息填加到所述升级指令信息中发送给发起升级请求的客户端升级模块。图6为客户端的所述升级模块的一种组成示意图。参见图6所示,在一种具体实施例中,客户端的所述升级模块401具体包括:自升级模块411,用于在上报软件升级请求之前,首先与服务器交互判断是否要自升级,如果是则下载新版本的升级模块文件,并用该新版本的升级模块文件替换原升级模块文件;否则再上报软件升级请求。查询升级模块412,用于向服务器上报携带本地待升级软件版本信息的软件升级请求,接收服务器返回的升级指令信息。文件下载模块413,用于根据所述升级指令信息中待更新文件清单信息中的文件下载路径下载相应的文件。差异文件合并模块414,用于根据所述待更新文件清单信息,将下载的 文件更新到本地待升级软件安装目录的所述相对路径下。执行操作模块415,用于针对所述升级指令信息中的每一条操作指令,从待升级软件安装目录的所述相对路径中查找到与该操作指令中文件名相同的目标文件,并对该目标文件执行所述操作指令。在一种实施例中,所述差异文件合并模块414需要进一步实施安全保障,即该差异文件合并模块中可以进一步包括:关闭提示模块,用于在更新相应文件之前,判断待升级软件是否正在运行,如果是则提示用户关闭该软件,关闭后再更新相应文件,否则直接更新相应文件。备份操作模块,用于在更新相应文件之前,备份本地的待更新的原文件,在某一文件更新失败时,判断该文件是否必须要更新成功,如果是则用所述备份文件还原所有已经更新的文件;否则将该文件的最新下载文件注册到操作系统的重启替换服务中,待系统重启时启动替换服务来更新该文件。为了进一步节约带宽资源和文件下载时间,在另一实施例中,所述待更新文件确定模块中还可以包括二进制差异文件生成模块,用于在待更新文件确定模块查找出最新版本软件中的更改文件后,根据该更改文件的文件名在所述升级请求中查到对应的文件HASH值,再根据该HASH值查询服务器端存储的与该HASH值相同的原始文件,将该原始文件与最新版本的同名文件进行二进制对比,生成二进制差异文件,用该二进制差异文件的下载路径信息代替所述待更新文件清单中的同名文件的下载路径信息;对应的,所述客户端的差异文件合并模块中还可以进一步包括二进制差异合并模块,用于在下载到的二进制差异文件后,将本地待升级软件安装目录的所述相对路径下的同名文件与所述二进制差异文件进行合并。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1