本发明公开了一种软件升级的方法和装置,属于计算机软件领域。所述方法包括:向服务器发送查询报文,所述查询报文携带软件中模块的标识和所述模块的当前版本号;接收所述服务器返回的响应报文,所述响应报文携带所述模块标识、所述模块的最新版本号和所述模块的升级信息;根据所述模块的当前版本号、所述模块的最新版本号和所述模块的升级信息,升级所述模块标识对应的模块。所述装置包括:发送模块、接收模块和升级模块。本发明通过上述方法和装置,实现了一种基于模块的软件升级,还可以对模块中的文件进行升级,提高了软件升级的效率和灵活性。
技术领域
[0001]本发明涉及计算机软件领域,特别涉及一种软件升级的方法和装置。
背景技术
[0002]在计算机领域,对于已经安装好的软件,为了优化软件、提高软件的性能,通常需要对软件进行升级。
[0003]现有技术中,软件升级过程主要包括以下步骤:
[0004]客户端与服务器建立通信连接后,客户端中的升级引擎从服务器下载软件升级包,该软件升级包中包括一个安装引擎,该升级引擎调用安装引擎,使该安装引擎在被调用启动后,将升级软件包中的升级资源文件更新到客户端,从而完成一个软件升级的过程。
[0005]综合上述,现有技术至少存在以下问题:
[0006]目前的软件升级方法,需要下载整个软件的升级包,因此下载时间比较长,影响升级效率,并且只能对整个软件进行升级,缺乏灵活性。
发明内容
[0007]为了提高软件升级的效率和灵活性,本发明实施例提供了一种软件升级的方法和装置。所述技术方案如下:
[0008] —种软件升级的方法所述方法包括:
[0009]向服务器发送查询报文,所述查询报文携带软件中模块的标识和所述模块的当前版本号,所述查询报文还包括:所述模块中文件的标识和所述文件的当前版本号;
[0010]接收所述服务器返回的响应报文,所述响应报文携带所述模块标识、所述模块的最新版本号和所述模块的升级信息,所述升级信息中包括是否强制升级,所述模块的升级信息包括:所述模块的安装包地址信息或所述模块中所有文件的文件列表信息,或者所述模块的升级信息包括所述查询报文中文件的文件列表信息,所述文件列表信息至少包括文件的标识和更新方式;
[0011]如果所述升级信息中包括的是强制升级,则根据所述模块的当前版本号、所述模块的最新版本号和所述模块的升级信息,升级所述模块标识对应的模块;
[0012]其中,所述根据所述模块的当前版本号、所述模块的最新版本号和所述模块的升级信息,升级所述模块标识对应的模块,包括:
[0013]如果所述模块的当前版本号与所述模块的最新版本号不一致,安装所述模块的安装包地址信息对应的安装包;或者,如果所述模块的当前版本号与所述模块的最新版本号不一致,对所述模块中的所有文件,按照其文件标识对应的更新方式进行更新;或者,如果所述模块的当前版本号与所述模块的最新版本号不一致,对所述模块中与所述查询报文中文件标识相同的文件,按照其文件标识对应的更新方式进行更新。
[0014]其中,所述文件列表信息包括:增量更新属性;
[0015]所述将所述模块中的文件更新为所述文件列表信息对应的文件包括:
[0016]如果所述文件列表信息对应的文件的内容为空,删除所述模块中文件标识与所述内容为空的文件标识相同的文件;
[0017]如果所述文件列表信息对应的文件在所述模块中存在与其相同标识的文件,替换所述模块中与其相同标识的文件;
[0018]如果所述文件列表信息对应的文件在所述模块中不存在与其相同标识的文件,在所述模块中增加所述文件列表信息对应的文件。
[0019]其中,所述模块的升级信息还包括:所述模块的依赖模块、所述模块与其依赖模块之间的依赖关系和所述依赖模块的升级信息,所述方法还包括:
[0020]根据所述依赖关系,确定优先级顺序;
[0021]根据所述依赖模块的升级信息,按照所述优先级顺序,依次升级相应的依赖模块。
[0022] —种软件升级的装置,所述装置包括:
[0023]发送模块,用于向服务器发送查询报文,所述查询报文携带软件中模块的标识和所述模块的当前版本号,所述查询报文还包括:所述模块中文件的标识和所述文件的当前版本号;
[0024]接收模块,用于接收所述服务器返回的响应报文,所述响应报文携带所述模块标识、所述模块的最新版本号和所述模块的升级信息,所述升级信息中包括是否强制升级,所述模块的升级信息包括:所述模块的安装包地址信息或所述模块中所有文件的文件列表信息,或者所述模块的升级信息包括所述查询报文中文件的文件列表信息,所述文件列表信息至少包括文件的标识和更新方式;
[0025]如果所述升级信息中包括的是强制升级,则升级模块,用于根据所述模块的当前版本号、所述模块的最新版本号和所述模块的升级信息,升级所述模块标识对应的模块;
[0026]其中,所述升级模块包括:安装单元、更新单元或文件升级单元;
[0027]所述安装单元,用于如果所述模块的当前版本号与所述模块的最新版本号不一致,安装所述模块的安装包地址信息对应的安装包;
[0028]所述更新单元,用于如果所述模块的当前版本号与所述模块的最新版本号不一致,对所述模块中的所有文件,按照其文件标识对应的更新方式进行更新;
[0029]所述文件升级单元,用于如果所述模块的当前版本号与所述模块的最新版本号不一致,对所述模块中与所述查询报文中文件标识相同的文件,按照其文件标识对应的更新方式进行更新。
[0030]其中,所述文件列表信息包括:增量更新属性;
[0031 ]所述更新单元包括:删除子单元、替换子单元和增加子单元;
[0032]删除子单元,用于如果所述文件列表信息对应的文件的内容为空,删除所述模块中文件标识与所述内容为空的文件标识相同的文件;
[0033]替换子单元,用于如果所述文件列表信息对应的文件在所述模块中存在与其相同标识的文件,替换所述模块中与其相同标识的文件;
[0034]增加子单元,用于如果所述文件列表信息对应的文件在所述模块中不存在与其相同标识的文件,在所述模块中增加所述文件列表信息对应的文件。
[0035]其中,所述模块的升级信息还包括:所述模块的依赖模块、所述模块与其依赖模块之间的依赖关系和所述依赖模块的升级信息,所述装置还包括:
[0036]第二升级模块,用于根据所述依赖关系,确定优先级顺序;根据所述依赖模块的升级信息,按照所述优先级顺序,依次升级相应的依赖模块。
[0037]本发明实施例提供的技术方案带来的有益效果是:
[0038]通过向服务器发送软件中模块的标识和当前版本号,并接收服务器返回的该模块的升级信息,根据模块的当前版本号、最新版本号和升级信息升级该模块,实现了一种基于模块的软件升级,提高了软件升级的效率和灵活性。另外,通过向服务器发送模块中文件的标识和文件的当前版本号,并接收服务器返回的该文件的地址信息,还可以对模块中的文件进行升级,进一步提高了软件升级的效率和灵活性。
附图说明
[0039]图1是本发明实施例1中提供的软件升级的方法流程图;
[0040]图2是本发明实施例1中提供的软件升级的方法流程图;
[0041 ]图3是本发明实施例1中提供的安装包升级的流程图;
[0042]图4是本发明实施例1中提供的替换文件的流程图;
[0043]图5是本发明实施例1中提供的重启机器后替换的流程图;
[0044]图6是本发明实施例1中提供的关闭程序进行替换的流程图;
[0045]图7是本发明实施例1中提供的程序退出时进行替换的流程图;
[0046]图8是本发明实施例1中提供的程序下次启动时进行替换的流程图;
[0047]图9是本发明实施例1中提供的文件增量更新示意图;
[0048]图10是本发明实施例2中提供的软件升级的装置结构示意图;
[0049]图11是本发明实施例2中提供的软件升级的装置另一结构示意图;
[0050]图12是本发明实施例2中提供的软件自升级的流程图。
具体实施方式
[0051]为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
[0052] 实施例1
[0053]参见图1,本实施例提供了一种软件升级的方法,包括:
[0054] 101:向服务器发送查询报文,查询报文携带软件中模块的标识和模块的当前版本号;
[0055]进一步的,查询报文还包括:模块中文件的标识和文件的当前版本号。
[0056] 102:接收服务器返回的响应报文,响应报文携带模块标识、模块的最新版本号和模块的升级信息;
[0057]其中,对于模块级别的软件升级,模块的升级信息至少包括:安装包地址信息或文件列表信息;对于文件级别的软件升级,模块的升级信息至少包括:文件的标识、文件的最新版本号和文件的地址信息。
[0058]进一步的,模块的升级信息还可以包括:模块的依赖模块、模块与其依赖模块之间的依赖关系和依赖模块的升级信息。其中,模块的依赖模块是指在软件升级过程中,如果对该模块进行升级,必须先对其依赖模块进行升级,也即模块与其依赖模块在其升级过程中存在一定的依附性。
[0059]相应的,软件升级的方法还包括:根据依赖关系,确定优先级顺序;根据依赖模块的升级信息,按照优先级顺序,依次升级相应的依赖模块。其中,依赖关系是指在软件升级过程中,如果欲对某一模块进行升级,需要先对另一模块进行升级的这种依附关系,称为依赖关系,该另一模块即为该模块的依赖模块。
[0060] 103:根据模块的当前版本号、模块的最新版本号和模块的升级信息,升级模块标识对应的模块。
[0061]对于模块级别的软件升级,本步骤具体包括:
[0062]如果模块的当前版本号与模块的最新版本号不一致,安装安装包地址信息对应的安装包;或者,如果模块的当前版本号与模块的最新版本号不一致,将模块中的文件更新为文件列表信息对应的文件。
[0063]对于文件级别的软件升级,本步骤具体包括:
[0064]如果模块的当前版本号与模块的最新版本号不一致,且文件的当前版本号与文件的最新版本号不一致,升级文件的标识对应的文件为文件的地址信息对应的文件。
[0065]本实施例提供的方法,通过向服务器发送软件中模块的标识和当前版本号,并接收服务器返回的该模块的升级信息,根据模块的当前版本号、最新版本号和升级信息升级该模块,实现了一种基于模块的软件升级,提高了软件升级的效率和灵活性。另外,通过向服务器发送模块中文件的标识和文件的当前版本号,并接收服务器返回的该文件的地址信息,还可以对模块中的文件进行升级,进一步提高了软件升级的效率和灵活性。
[0066]参见图2,下面结合具体实例介绍上述软件升级的方法。
[0067] 201:客户端在收集了本地模块的版本信息之后,向服务器发送不同级别的查询报文;
[0068]其中,模块级别的查询报文至少携带软件中模块的标识和模块的当前版本号,文件级别的查询报文除了携带软件中模块的标识和模块的当前版本号,还需要携带模块中文件的标识和文件的当前版本号。
[0069]通常情况下,客户端仅发送已安装模块的模块级别的信息。对于需要频繁更新的文件,可以发送文件级别的信息。客户端可以配置一个常见的频繁更新的文件列表,如果发送的模块中包含该列表中的文件,则会附带一起发送给服务器。另外,文件级别的查询可由服务器控制,服务器在提供文件信息时,可以指定该文件是否是频繁更新文件,客户端根据服务器的指定更新相应的文件列表。具体的,服务器可以根据各个文件更新次数的统计信息,判断该文件是否是频繁更新文件,也可以采用其他判断方法,本实施例并不限定。
[0070] 202:服务器在接收到客户端的查询报文之后,对不同级别的查询分别给客户端不同的响应报文;
[0071]其中,响应报文至少携带模块标识、模块的最新版本号、以及模块的升级信息。具体的,
[0072] a)对于模块级别的查询,模块的升级信息至少包括:模块的安装包地址信息或模块的文件列表信息,还可以包括是否完全升级、是否强制升级等信息。其中,模块的文件列表信息是指该模块中所有文件的标识、最新版本以及地址信息等。如果是完全升级,则更新整个模块,也即这个模块中的所有文件都被升级。如果是强制升级,则该模块必须升级,不允许用户选择。
[0073]其中,对于安装包方式或文件列表方式的选择,如果升级涉及到的文件是关键文件,即会改变插件状态的文件,如dll (Dynamic Link Library,动态链接库)或xml(Extensible Markup Language,可扩展标记语言)文件,服务器应以安装包地址形式返回,否则,可以文件列表形式返回。
[0074] b)对于文件级别的查询,模块的升级信息至少包括:查询报文中文件对应的文件标识、该文件的最新版本号、以及该文件的地址信息等该文件的文件列表信息。
[0075]其中,a)和b)所涉及的文件的地址信息具体有两种存在方式,如果所有文件地址信息的XML文件的内容在报文长度允许范围之内,以UDP报文为例,报文最大长度为1024,则使用XML文件直接返回,否则使用URL(Universal Resource Locator,统一资源定位符)方式返回,再由客户端自行拉取。
[0076]进一步的,模块的升级信息还包括:模块的依赖模块、模块与其依赖模块之间的依赖关系、以及依赖模块的升级信息。其中,依赖模块的升级信息与模块的升级信息包括的内容相似,至少包括依赖模块的安装包地址信息或文件列表信息,还可以包括是否完全升级、是否强制升级等信息。
[0077]其中,模块的依赖模块是指在软件升级过程中,如果对该模块进行升级,必须先对其依赖模块进行升级,也即模块与其依赖模块在其升级过程中存在一定的依附性。依赖关系是指在软件升级过程中,如果欲对某一模块进行升级,需要先对另一模块进行升级的这种依附关系,称为依赖关系,该另一模块即为该模块的依赖模块。例如,待升级的模块为一插件,该插件的依赖模块为一主模块,该主模块的依赖模块为一主程序,依赖关系为插件依赖主模块,主模块依赖主程序。
[0078] 203:客户端根据模块的当前版本号、模块的最新版本号和模块的升级信息,升级模块标识对应的模块。
[0079]具体的,如果模块的当前版本号与模块的最新版本号不一致,安装模块的安装包地址信息对应的安装包;或者,如果模块的当前版本号与模块的最新版本号不一致,将模块中的文件更新为模块的文件列表信息对应的文件。
[0080]其中,参见图3,安装包升级的具体过程为:客户端直接启动安装包,监控其安装状态,判断安装是否成功,如果失败,则升级失败,如果安装成功,判断是否需要后续处理,如果不需要后续处理,则升级成功,如果需要后续处理,则标记为需要后续处理。其中,后续处理是指安装时需要重启应用程序或重启系统等,本实施例并不限定。
[0081]其中,文件列表升级过程中的文件更新包括:替换文件、删除文件和增量更新文件等,更新类型属性具体可以在文件列表信息中标识。下面简单介绍替换文件和增量更新文件。
[0082]参见图4,替换文件的具体过程为:对文件列表中的文件逐一进行备份、替换,具体可以备份到临时文件夹中,然后判断文件是否替换成功,如果替换失败,则回滚至该文件替换前的状态,并提示升级失败,如果替换成功,判断文件列表中是否还有其他文件,如果还有其他文件,重复备份、替换的过程,如果没有其他文件,判断文件列表中的文件是否需要延迟替换,如果没有需要延迟替换的文件,则报告升级成功,如果有需要延迟替换的文件,例如文件被占用时,则报告升级完成但有需要延迟替换的文件。
[0083]上述延迟替换包括重启机器后替换、重启程序后替换、重启插件后替换三种情况。
[0084]重启机器后替换,是指被占用文件属于内核态的模块,如网络浏览监控等。参见图5,客户端将这些文件标记为重启后替换,由操作系统在重启后自动替换。
[0085]重启程序后替换,是指被占用文件属于主框架、主模块,或者属于不可由插件管理器重启的插件。客户端选择关闭程序进行替换,或在程序退出时,或程序下次启动时进行文件替换。
[0086]其中,参见图6,关闭程序进行替换的过程为:通知程序关闭,替换文件,再次启动程序。参见图7,程序退出时进行替换的过程为:通知、并标记程序退出时替换文件,退出前启动更新程序,替换文件后退出。参见图8,程序下次启动时进行替换的过程为:通知并标记程序重启时替换文件,启动前启动更新程序,替换文件后启动。
[0087]重启插件后替换,是指被占用文件属于可以被插件管理器重启的插件。客户端通知插件管理器关闭对应的插件,进行文件替换后,再通知插件管理器重启对应插件。
[0088]增量更新文件的具体过程为:如果文件对应的文件子单元的内容为空,删除文件中对应子单元标识的内容;如果文件中存在与其相同标识的文件子单元,替换文件中与其相同标识的文件子单元;如果文件不存在与其相同标识的文件子单元,在文件中增加对应的文件子单元。例如,参见图9,文件I为替换,文件2为删除,文件100为增加。
[0089]进一步的,如果待升级的模块与其他模块之间有一定的依赖关系,还应按照一定的优先级顺序升级,具体包括:
[0090]根据依赖关系确定优先级顺序,根据依赖模块的升级信息,按照优先级顺序,依次升级相应的依赖模块。本实施例的优先级顺序以依赖关系的逆序确定,本实施例并不限定。
[0091]例如,待升级的模块为一插件,该插件依赖的模块为一主模块,该主模块依赖的模块为一主程序,依赖关系为插件依赖主模块,主模块依赖主程序,则升级的优先级顺序为主程序、主模块、以及插件。其中,主程序可以是含界面的可执行程序,主模块可以是在主程序中提供特定功能的模块,如系统清理模块、插件管理模块等,插件可以是以Plug in(插入)形式存在的独立功能模块。
[0092]本实施例提供的方法,通过向服务器发送软件中模块的标识和当前版本号,并接收服务器返回的该模块的升级信息,根据模块的当前版本号、最新版本号和升级信息升级该模块,实现了一种基于模块的软件升级,提高了软件升级的效率和灵活性。另外,通过向服务器发送模块中文件的标识和文件的当前版本号,并接收服务器返回的该文件的地址信息,还可以对模块中的文件进行升级,进一步提高了软件升级的效率和灵活性。
[0093] 实施例2
[0094]参见图10,本实施例提供了一种软件升级的装置,包括:
[0095]发送模块301,用于向服务器发送查询报文,查询报文携带软件中模块的标识和模块的当前版本号;
[0096]接收模块302,用于接收服务器返回的响应报文,响应报文携带模块标识、模块的最新版本号和模块的升级信息;
[0097]升级模块303,用于根据模块的当前版本号、模块的最新版本号和模块的升级信息,升级模块标识对应的模块。
[0098]其中,模块的升级信息包括:模块的安装包地址信息或者模块的文件列表信息;
[0099] 相应的,参见图11,升级模块303包括:安装单元303a或更新单元303b ;
[0100]安装单元303a,用于如果模块的当前版本号与模块的最新版本号不一致,安装模块的安装包地址信息对应的安装包;
[0101]更新单元303b,用于如果模块的当前版本号与模块的最新版本号不一致,将模块中的文件更新为模块的文件列表信息对应的文件。
[0102]其中,文件列表信息包括:增量更新属性;
[0103] 更新单元303b包括:删除子单元303bl、替换子单元303b2和增加子单元303b3;
[0104]删除子单元303bl,用于如果文件列表信息对应的文件的内容为空,删除模块中文件标识与内容为空的文件标识相同的文件;
[0105]替换子单元303b2,用于如果文件列表信息对应的文件在模块中存在与其相同标识的文件,替换模块中与其相同标识的文件;
[0106]增加子单元303b3,用于如果文件列表信息对应的文件在模块中不存在与其相同标识的文件,在模块中增加文件列表信息对应的文件。
[0107]其中,查询报文还包括:模块中文件的标识和文件的当前版本号;模块的升级信息包括:文件的标识、文件的最新版本号和文件的地址信息;
[0108]相应的,升级模块303包括:文件升级单元303c,用于如果模块的当前版本号与模块的最新版本号不一致,且文件的当前版本号与文件的最新版本号不一致,将文件的标识对应的文件更新为文件的地址信息对应的文件。
[0109]其中,模块的升级信息还包括:模块依赖的模块、模块与其依赖模块之间的依赖关系和依赖模块的升级信息,该装置还包括:
[0110]第二升级模块304,用于根据依赖关系,确定优先级顺序;根据依赖模块的升级信息,按照优先级顺序,依次升级相应的依赖模块。
[0111]本实施例提供的装置,还可以进行自升级,参见图12,具体过程为:在退出前启动新的升级程序的进程,新升级程序的进程会等待老进程退出,如果超时未退出,则强制杀掉老进程,然后替换文件,并标记机器重启后,删除临时文件后退出。
[0112]本实施例提供的装置,与方法实施例中的客户端属于同一构思,其具体实现过程,详见方法实施例,这里不再赘述。
[0113]本实施例提供的装置,通过向服务器发送软件中模块的标识和当前版本号,并接收服务器返回的该模块的升级信息,根据模块的当前版本号、最新版本号和升级信息升级该模块,实现了一种基于模块的软件升级,提高了软件升级的效率和灵活性。另外,通过向服务器发送模块中文件的标识和文件的当前版本号,并接收服务器返回的该文件的地址信息,还可以对模块中的文件进行升级,进一步提高了软件升级的效率和灵活性。
[0114]以上实施例提供的技术方案中的全部或部分内容可以通过软件编程实现,其软件程序存储在可读取的存储介质中,存储介质例如:计算机中的硬盘、光盘或软盘。
[0115]以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。