CN108874427B - 一种更新进度获取方法、装置及可读存储介质 - Google Patents

一种更新进度获取方法、装置及可读存储介质 Download PDF

Info

Publication number
CN108874427B
CN108874427B CN201810691134.0A CN201810691134A CN108874427B CN 108874427 B CN108874427 B CN 108874427B CN 201810691134 A CN201810691134 A CN 201810691134A CN 108874427 B CN108874427 B CN 108874427B
Authority
CN
China
Prior art keywords
updating
target application
update
application program
control file
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201810691134.0A
Other languages
English (en)
Other versions
CN108874427A (zh
Inventor
杨亮
张文明
陈少杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tibet Lindong Technology Co ltd
Original Assignee
Wuhan Douyu Network Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN201810691134.0A priority Critical patent/CN108874427B/zh
Publication of CN108874427A publication Critical patent/CN108874427A/zh
Application granted granted Critical
Publication of CN108874427B publication Critical patent/CN108874427B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本发明提供了一种更新进度获取方法、装置及可读存储介质。该方法包括:获得与目标应用程序对应的第一版本控制文件,第一版本控制文件为服务器中存储的与目标应用程序对应的最新版本的版本控制文件;获得与目标应用程序对应的第二版本控制文件,第二版本控制文件为客户端中与目标应用程序对应的本地安装目录中的版本控制文件;基于第一版本控制文件与第二版本控制文件,判断是否需要对目标应用程序进行更新;如果是,在采用隐式更新方式对目标应用程序进行更新时,在更新程序进程中加载更新插件,通过更新插件,将更新程序进程的更新进度信息传输至目标应用程序的主进程。

Description

一种更新进度获取方法、装置及可读存储介质
技术领域
本发明涉及电子技术领域,尤其涉及一种更新进度获取方法、装置及可读存储介质。
背景技术
在Windows桌面应用程序中,自动更新是一个很重要的部分。现有的自动更新实现中,主要都是在应用程序刚启动时,去检测是否需要更新。如果需要更新,就会启动更新程序进程,首先检测应用程序安装目录中一一校验每个文件是否需要更新,确定出待更新的文件。然后从服务器下载待更新文件的最新版本,最后将下载后的文件覆盖到应用程序的安装目录中,最后重新启动应用程序,从而完成更新。在采用隐式更新方式情况下,目标应用程序可以在确定需要更新时仍然保持运行,直至在目标应用程序本次启动运行至退出后,更新程序进程将下载到的待更新文件进行覆盖后完成更新。隐式更新时,由于无法获知更新进度,导致用户的应用体验差。
发明内容
本发明实施例提供了一种更新进度获取方法、装置及可读存储介质,用于提供一种通过插件获取更新进度的方法,有效提升用户体验。
第一方面,本发明实施例提供了一种更新进度获取方法,应用于客户端,包括:
获得与目标应用程序对应的第一版本控制文件,所述第一版本控制文件为服务器中存储的与所述目标应用程序对应的最新版本的版本控制文件;
获得与所述目标应用程序对应的第二版本控制文件,所述第二版本控制文件为所述客户端中与所述目标应用程序对应的本地安装目录中的版本控制文件;
基于所述第一版本控制文件与所述第二版本控制文件,判断是否需要对所述目标应用程序进行更新;
如果是,在采用隐式更新方式对所述目标应用程序进行更新时,在更新程序进程中加载更新插件,通过所述更新插件,将所述更新程序进程的更新进度信息传输至所述目标应用程序的主进程,其中,所述隐式更新方式为在所述目标应用程序本次启动运行至退出后进行更新的更新方式。
可选的,所述获得与目标应用程序对应的第一版本控制文件,包括:
在所述目标应用程序每次启动时,发送下载请求至所述服务器,接收所述基于所述下载请求发送的所述第一版本控制文件;或
在所述目标应用程序启动时,获得启动时刻,如果所述启动时刻距上一次发送下载请求的时刻间的时间间隔满足预设条件,发送下载请求至所述服务器,接收所述基于所述下载请求发送的所述第一版本控制文件。
可选的,所述基于所述第一版本控制文件与所述第二版本控制文件,判断是否需要对所述目标应用程序进行更新,包括:
获得所述第一版本控制文件中的第一版本号与所述第二版本控制文件中的第二版本号;
判断所述第一版本号是否大于所述第二版本号,如果是,表明需要对所述目标应用程序进行更新。
可选的,在确定需要对所述目标应用程序进行更新时,所述方法还包括:
获得所述第一版本控制文件中的更新方式字段的值,其中,所述服务器中配置的所述更新方式字段的值可以设置为第一预设值或第二预设值,所述更新方式字段的值为所述第一预设值时,表示所述客户端可以采用显式更新方式进行更新,所述更新方式字段的值为所述第二预设值时,表示所述客户端可以采用隐式更新方式进行更新;
如果所述更新方式字段的值为所述第二预设值,采用所述隐式更新方式对所述目标应用程序进行更新。
可选的,所述采用所述隐式更新方式对所述目标应用程序进行更新,包括:
获取所述第一版本控制文件中的最低版本要求字段的值,所述最低版本要求字段的值为所述服务器配置的在采用隐式更新方式时,要求客户端中安装目标应用程序的最低版本号;
判断所述第二版本号是否大于所述最低版本要求字段的值,如果是,采用所述隐式更新方式对所述目标应用程序进行更新。
可选的,所述采用所述隐式更新方式对所述目标应用程序进行更新,包括:
启动所述目标应用程序的主进程与更新程序进程;
基于所述更新程序进程,下载待更新文件,将所述待更新文件存储至系统的临时目录中的更新文件夹中;
当检测到所述主进程中所述目标应用程序退出时,将所述更新文件夹的路径传递至所述更新程序进程,将所述主进程的标识以命令行方式传递至所述更新程序进程;
在所述更新程序进程中调用打开进程句柄OpenProcess函数,将所述当前进程的进度标识传递至所述OpenProcess函数,基于所述OpenProcess函数,判断所述目标应用程序是否正在运行,如果是,调用结束进程TerminateProcess函数结束所述目标应用程序的运行进程,基于所述更新文件夹的路径,获得所述更新文件夹中的所述待更新文件,并将所述待更新文件拷贝至所述本地安装目录中,将所述第二版本控制文件替换为所述第一版本控制文件;如果否,基于所述更新文件夹的路径,获得所述更新文件夹中的所述待更新文件,并将所述待更新文件拷贝至所述本地安装目录中,将所述第二版本控制文件替换为所述第一版本控制文件。
可选的,所述在更新程序进程中加载更新插件,通过所述更新插件,将所述更新程序进程的更新进度信息传输至所述目标应用程序的主进程,包括:
在启动所述更新程序进程后,在读取到所述第二版本控制文件的加载插件字段的值为第三预设值时,在所述更新程序进程中加载所述更新插件;
建立所述主进程与所述更新程序进程间的远程过程调用协议连接;
基于所述远程过程调用协议连接,注册更新进度通知函数;
通过所述更新插件能调用所述更新进度通知函数,将所述更新程序进程的更新进度信息传输至所述目标应用程序的主进程。
第二方面,本发明实施例提供一种更新进度获取装置,应用于客户端,包括:
第一获取单元,用于获得与目标应用程序对应的第一版本控制文件,所述第一版本控制文件为服务器中存储的与所述目标应用程序对应的最新版本的版本控制文件;
第二获取单元,用于获得与所述目标应用程序对应的第二版本控制文件,所述第二版本控制文件为所述客户端中与所述目标应用程序对应的本地安装目录中的版本控制文件;
判断单元,用于基于所述第一版本控制文件与所述第二版本控制文件,判断是否需要对所述目标应用程序进行更新;
更新进度信息获取单元,用于如果所述判断单元的判断结果为是时,在采用隐式更新方式对所述目标应用程序进行更新时,在更新程序进程中加载更新插件,通过所述更新插件,将所述更新程序进程的更新进度信息传输至所述目标应用程序的主进程,其中,所述隐式更新方式为在所述目标应用程序本次启动运行至退出后进行更新的更新方式。
可选的,所述第一获取单元具体用于:
在所述目标应用程序每次启动时,发送下载请求至所述服务器,接收所述基于所述下载请求发送的所述第一版本控制文件;或
在所述目标应用程序启动时,获得启动时刻,如果所述启动时刻距上一次发送下载请求的时刻间的时间间隔满足预设条件,发送下载请求至所述服务器,接收所述基于所述下载请求发送的所述第一版本控制文件。
可选的,所述判断单元具体用于:
获得所述第一版本控制文件中的第一版本号与所述第二版本控制文件中的第二版本号;
判断所述第一版本号是否大于所述第二版本号,如果是,表明需要对所述目标应用程序进行更新。
可选的,所述更新进度获取装置还包括:
更新单元,用于在确定需要对所述目标应用程序进行更新时,获得所述第一版本控制文件中的更新方式字段的值,其中,所述服务器中配置的所述更新方式字段的值可以设置为第一预设值或第二预设值,所述更新方式字段的值为所述第一预设值时,表示所述客户端可以采用显式更新方式进行更新,所述更新方式字段的值为所述第二预设值时,表示所述客户端可以采用隐式更新方式进行更新;如果所述更新方式字段的值为所述第二预设值,采用所述隐式更新方式对所述目标应用程序进行更新。
可选的,所述更新单元具体用于:
获取所述第一版本控制文件中的最低版本要求字段的值,所述最低版本要求字段的值为所述服务器配置的在采用隐式更新方式时,要求客户端中安装目标应用程序的最低版本号;
判断所述第二版本号是否大于所述最低版本要求字段的值,如果是,采用所述隐式更新方式对所述目标应用程序进行更新。
可选的,所述更新单元具体用于:
启动所述目标应用程序的主进程与更新程序进程;
基于所述更新程序进程,下载待更新文件,将所述待更新文件存储至系统的临时目录中的更新文件夹中;
当检测到所述主进程中所述目标应用程序退出时,将所述更新文件夹的路径传递至所述更新程序进程,将所述主进程的标识以命令行方式传递至所述更新程序进程;
在所述更新程序进程中调用打开进程句柄OpenProcess函数,将所述当前进程的进度标识传递至所述OpenProcess函数,基于所述OpenProcess函数,判断所述目标应用程序是否正在运行,如果是,调用结束进程TerminateProcess函数结束所述目标应用程序的运行进程,基于所述更新文件夹的路径,获得所述更新文件夹中的所述待更新文件,并将所述待更新文件拷贝至所述本地安装目录中,将所述第二版本控制文件替换为所述第一版本控制文件;如果否,基于所述更新文件夹的路径,获得所述更新文件夹中的所述待更新文件,并将所述待更新文件拷贝至所述本地安装目录中,将所述第二版本控制文件替换为所述第一版本控制文件。
可选的,所述更新进度信息获取单元具体用于:
在启动所述更新程序进程后,在读取到所述第二版本控制文件的加载插件字段的值为第三预设值时,在所述更新程序进程中加载所述更新插件;
建立所述主进程与所述更新程序进程间的远程过程调用协议连接;
基于所述远程过程调用协议连接,注册更新进度通知函数;
通过所述更新插件能调用所述更新进度通知函数,将所述更新程序进程的更新进度信息传输至所述目标应用程序的主进程。
第三方面,本发明实施例提供一种更新进度获取装置,应用于客户端,所述目标更新进度获取装置包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现如前述第一方面实施例中所述的更新进度获取方法的步骤。
第四方面,本发明实施例提供了一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如前述第一方面实施例中所述的更新进度获取方法的步骤。
本申请实施例中的上述一个或多个技术方案,至少具有如下一种或多种技术效果:
在本发明实施例的技术方案中,服务器与客户端约定有两种应用程序更新方式,一种是显式更新方式,为待所目标应用程序完成更新后目标应用程序才能启动的更新方式。另一种是隐式更新方式,为在应用程序本次启动运行至退出后进行更新的更新方式。进而,客户端在对目标应用程序进行更新时,从服务器中获得与目标应用程序对应的最新版本的第一版本控制文件,并获得目标应用程序对应的本地安装目录中的第二版本控制文件,在基于第一版本控制文件与第二版本控制文件,确定需要对目标应用程序采用隐式更新方式更新时,可在更新程序进程中加载自定义的更新插件,通过该更新插件,获取更新程序进程中的更新进度信息,并将其传输至目标应用程序主进程,以使主进程在运行过程中能实时获知更新程序进程的更新进度。目标应用程序运行时仍能获知更新进度,更符合用户的更新需求,有效提升用户体验。
附图说明
图1为本发明第一实施例中的更新进度获取方法的流程图;
图2为本发明第二实施例中的更新进度获取装置的示意图;
图3为本发明第三实施例中更新进度获取装置的示意图。
具体实施方式
本发明实施例提供了一种更新进度获取方法、装置及可读存储介质,用于提供一种通过插件获取更新进度的方法,有效提升用户体验,该方法包括:获得与目标应用程序对应的第一版本控制文件,所述第一版本控制文件为服务器中存储的与所述目标应用程序对应的最新版本的版本控制文件;获得与所述目标应用程序对应的第二版本控制文件,所述第二版本控制文件为所述客户端中与所述目标应用程序对应的本地安装目录中的版本控制文件;基于所述第一版本控制文件与所述第二版本控制文件,判断是否需要对所述目标应用程序进行更新;如果是,在采用隐式更新方式对所述目标应用程序进行更新时,在更新程序进程中加载更新插件,通过所述更新插件,将所述更新程序进程的更新进度信息传输至所述目标应用程序的主进程,其中,所述隐式更新方式为在所述目标应用程序本次启动运行至退出后进行更新的更新方式。
下面通过附图以及具体实施例对本发明技术方案做详细的说明,应当理解本申请实施例以及实施例中的具体特征是对本申请技术方案的详细的说明,而不是对本申请技术方案的限定,在不冲突的情况下,本申请实施例以及实施例中的技术特征可以相互组合。
本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
实施例
请参考图1,本发明第一实施例提供一种更新进度获取方法,应用于客户端,该更新进度获取方法包括如下步骤:
S101:获得与目标应用程序对应的第一版本控制文件,所述第一版本控制文件为服务器中存储的与所述目标应用程序对应的最新版本的版本控制文件;
S102:获得与所述目标应用程序对应的第二版本控制文件,所述第二版本控制文件为所述客户端中与所述目标应用程序对应的本地安装目录中的版本控制文件;
S103:基于所述第一版本控制文件与所述第二版本控制文件,判断是否需要对所述目标应用程序进行更新;
S104:如果是,在采用隐式更新方式对所述目标应用程序进行更新时,在更新程序进程中加载更新插件,通过所述更新插件,将所述更新程序进程的更新进度信息传输至所述目标应用程序的主进程,其中,所述隐式更新方式为在所述目标应用程序本次启动运行至退出后进行更新的更新方式。
具体的,本实施例中更新进度获取方法,不仅可以应用于例如智能手机、平板电脑之类的移动终端,还可以应用于台式计算机等设备,当然,还可以应用于其它电子设备,在此,本申请不做限制,这些电子设备即为客户端。
客户端内安装有目标应用程序,针对该目标应用程序,服务器与客户端约定有两种应用程序更新方式,一种是显式更新方式,为待目标应用程序完成更新后,目标应用程序才能启动的更新方式。另一种是隐式更新方式,为在目标应用程序本次启动运行至退出后进行更新的更新方式。服务器中通过配置与目标应用程序对应的最新版本的第一版本控制文件,具体的,配置该文件中的更新方式字段的值,更新方式字段的值可以设置为第一预设值或第二预设值,更新方式字段的值为第一预设值时,表示客户端可以采用显式更新方式进行更新,更新方式字段的值为第二预设值时,表示客户端可以采用隐式更新方式进行更新。
进而,客户端在对目标应用程序进行更新时,首先通过步骤S101,从服务器中获得与目标应用程序对应的最新版本的第一版本控制文件,然后通过步骤S102,获得目标应用程序对应的本地安装目录中的第二版本控制文件,然后通过步骤S103,基于第一版本控制文件与第二版本控制文件,判断是否需要对目标应用程序进行更新,如果需要对目标应用程序采用隐式更新方式更新时,通过步骤S104,可在更新程序进程中加载自定义的更新插件,通过该更新插件,获取更新程序进程中的更新进度信息,并将其传输至目标应用程序主进程,以使主进程在运行过程中能实时获知更新程序进程的更新进度。目标应用程序运行时仍能获知更新进度,更符合用户的更新需求,有效提升用户体验。
具体的,在本实施例中,客户端获得第一版本控制文件中的更新方式字段的值,基于更新方式字段的值,对目标应用程序进行更新。具体的,更新方式字段的值为第一预设值时,客户端可以采用显式更新方式进行更新,更新方式字段的值为第二预设值时,客户端可以采用隐式更新方式进行更新。这样,可根据实际情况实现显式更新和隐藏式更新这两种更新方式的动态配置,更符合用户的更新需求,有效提升用户体验。
进一步,在本实施例中,在确定需要对目标应用程序时,会去从服务器中下载第一版本控制文件version1.ini,以及检测目标应用程序的本地安装目录下的第二版本控制文件version2.ini。在版本控制文件version.ini中,有一些非常重要的字段信息,客户端通过读取这些字段的参数来控制更新流程。下面分别介绍version.ini文件中每个字段的意义。version.ini文件包括如下字段:
url字段:该字段用来告诉更新程序进程,从URL地址去下载最新的文件。
version字段:当版本控制文件位于客户端本地的目标应用程序的安装目录时,即前述的第二版本控制文件version2.ini,该字段的值表示当前客户端中所使用的目标应用程序的第二版本号,标记为ClientVersion。当版本控制文件位于服务器上时,即前述的第一版本控制文件version1.ini,该字段的值表示目标应用程序的最新版本号,即第一版本号,标记为ServerVersion。
hide字段:该字段位于服务器中的第一版本控制文件,用于控制目标应用程序的更新程序进程是采用显式更新还是隐式更新的方式,当该字段的值为1时,表示更新程序进程可能会采用隐式更新,当该字段的值为0时,自动更新一定会采用显式更新的方式。服务器可根据实际情况配置该字段的值。
minHideVersion字段:该字段位于服务器中的第一版本控制文件,该字段用来表示可以采取隐式更新时,客户端的目标应用程序的安装目录下,最低要求的版本。该字段与hide字段联合使用,可以最终确定是否采用隐式更新。
进一步,在本实施例中,步骤S101中,获得与目标应用程序对应的第一版本控制文件的时机可采用以下两种中任意一种方式设定:
第一种:在所述目标应用程序每次启动时,发送下载请求至所述服务器,接收所述基于所述下载请求发送的所述第一版本控制文件。
具体的,在本实施例中,在目标应用程序每次启动时,均会检测目标应用程序是否需要更新,向服务器发送下载请求,下载服务器中的第一版本控制文件。首先,需要从与目标应用程序对应的本地安装目录中的第二版本控制文件中获取url字段指示的URL地址,然后基于该字段的值,客户端的目标应用程序的自动更新进程从指示的URL地址去下载该第一版本控制文件。
第二种:在所述目标应用程序启动时,获得启动时刻,如果所述启动时刻距上一次发送下载请求的时刻间的时间间隔满足预设条件,发送下载请求至所述服务器,接收所述基于所述下载请求发送的所述第一版本控制文件。
具体的,在本实施例中,在目标应用程序每次启动时,记录当前的启动时刻T1,并调取上一次发送下载请求的时刻T2,如果T1与T2间的时间间隔大于预设时间间隔,比如:7天、10天等时间间隔,确定向服务器发送下载请求,下载服务器中的第一版本控制文件。首先,需要从与目标应用程序对应的本地安装目录中的第二版本控制文件中获取统一资源定位符URL字段指示的URL地址,然后基于该字段的值,客户端的目标应用程序的自动更新进程从指示的URL地址去下载该第一版本控制文件。在具体实施过程中,预设条件可根据实际情况进行具体设置,在此,本申请不做限制。在此种方式中,目标应用程序按一定的时间间隔去检测是否需要更新,不会每次启动时均去检测是否需要更新,能有效减少客户端的处理负荷。
当然,在具体实施过程中,还可以在检测到用户点击目标应用程序的功能界面中的更新按键时,发送下载请求至服务器,下载该第一版本控制信息。下载获得第一版本控制文件的时机可根据实际需要进行设定,在此,本申请不做限制。
进一步,在本实施例中,步骤S103在具体实施过程中可包括如下步骤:
获得所述第一版本控制文件中的第一版本号与所述第二版本控制文件中的第二版本号;
判断所述第一版本号是否大于所述第二版本号,如果是,表明需要对所述目标应用程序进行更新。
具体的,在本实施例中,首先获得服务器对应的第一版本控制文件中的第一版本号,ServerVersion的值。然后获得本地安装目录中的第二版本控制文件中的第二版本号,ClientVersion的值。当ServerVersion的值大于ClientVersion的值时,就表示客户端上的目标应用程序的版本号小于服务器上的版本号,确定需要对目标应用程序进行更新。
在现有的技术方案中,version.ini文件中只有url和version两个字段,当客户端本地version2.ini文件中ClientVersion的值小于服务器version1.ini文件中ServerVersion的值时,就会采取显式更新的方式,直到更新完成后,用户才能最终启动目标应用程序。
而本实施例中的方案,为了能动态配置客户端目标应用程序的更新方式,服务器通过配置第一版本控制信息的更新方式字段,即前面所提及的hide字段,具体的,基于所述更新方式字段的值,对所述目标应用程序进行更新,在具体实施过程中包括如下步骤:
如果所述更新方式字段的值为所述第一预设值,采用所述显式更新方式对所述目标应用程序进行更新;
如果所述更新方式字段的值为所述第二预设值,采用所述隐式更新方式对所述目标应用程序进行更新。
具体的,在本实施例中,如果从服务器获得的第一版本控制文件中的更新方式字段的值为第一预设值0,即当hide=0时,采用显式更新方式对目标应用程序进行更新。如果从服务器获得的第一版本控制文件中的更新方式字段的值为第二预设值1,即当hide=1时,采用隐式更新方式对所述目标应用程序进行更新。在具体实施过程中,第一预设值与第二预设值可根据实际需要进行设定,在此本申请不做限制。
进一步,在本实施例中,为了不影响用户的应用体验,在客户端启动的目标应用程序的版本较低时,如果启动较低版本的目标应用程序,可能会出现卡顿、资源信息更新不充分等问题,此时不易采用隐式更新方式,而应该采用显式更新方式进行更新,在目标应用程序全部更新完成后启动更新后的目标应用程序。所以,在确定是否采用隐式更新方式时,还可以对客户端本地目标应用程序的最低版本进行限制,具体的,包括如下步骤:
如果所述更新方式字段的值为所述第二预设值,获取所述第一版本控制文件中的最低版本要求字段的值,所述最低版本要求字段的值为所述服务器配置的在采用隐式更新方式时,要求客户端中安装目标应用程序的最低版本号;判断所述第二版本号是否大于所述最低版本要求字段的值,如果是,采用所述隐式更新方式对所述目标应用程序进行更新。
具体的,在本实施例中,服务器中配置有最低版本要求字段,即前面提及的minHideVersion字段,服务器在第一版本控制文件version1.ini中新增了hide字段以及minHideVersion字段。通过version、hide、minHideVersion这三个字段之间的关系,来最终判断是否采用显式更新还是隐藏式更新。
如果从服务器获得的第一版本控制文件中的更新方式字段的值为第一预设值0,即当hide=0时,采用显式更新方式对目标应用程序进行更新。
如果从服务器获得的第一版本控制文件中的更新方式字段的值为第二预设值1,即当hide=1时,客户端中与目标应用程序对应的本地安装目录中第二版本控制文件version2.ini中的ClientVersion小于或等于服务器的第一版本控制文件version1.ini中的minHideVersion,表明客户端中的目标应用程序的版本不满足采用隐式更新的最低版本要求,所以,可以采用显式更新方式对目标应用程序进行更新。
如果从服务器获得的第一版本控制文件中的更新方式字段的值为第二预设值1,即当hide=1时,如果客户端中与目标应用程序对应的本地安装目录中第二版本控制文件version2.ini中的ClientVersion大于服务器的第一版本控制文件version1.ini中的minHideVersion,表明客户端中的目标应用程序的版本满足采用隐式更新的最低版本要求,所以,可以采用隐式更新方式对目标应用程序进行更新。在具体实施过程中,可根据实际情况设定最低版本要求字段的值,在此,本申请不做限制。
进一步,在本实施例中在采用显式更新方式对所述目标应用程序进行更新时,可通过如下步骤实现:
下载待更新文件,将所述待更新文件存储至系统的临时目录中的更新文件夹中;
将所述更新文件夹中的所述待更新文件拷贝至所述本地安装目录中,将所述第二版本控制文件替换为所述第一版本控制文件;
启动所述目标应用程序以完成对所述目标应用程序的更新。
进一步,在本实施例中在采用隐式更新方式对所述目标应用程序进行更新时,可通过如下步骤实现:
启动所述目标应用程序的主进程与更新程序进程;
基于所述更新程序进程,下载待更新文件,将所述待更新文件存储至系统的临时目录中的更新文件夹中;
当检测到所述主进程中所述目标应用程序退出时,将所述更新文件夹的路径传递至所述更新程序进程,将所述主进程的标识以命令行方式传递至所述更新程序进程;
在所述更新程序进程中调用打开进程句柄OpenProcess函数,将所述当前进程的进度标识传递至所述OpenProcess函数,基于所述OpenProcess函数,判断所述目标应用程序是否正在运行,如果是,调用结束进程TerminateProcess函数结束所述目标应用程序的运行进程,基于所述更新文件夹的路径,获得所述更新文件夹中的所述待更新文件,并将所述待更新文件拷贝至所述本地安装目录中,将所述第二版本控制文件替换为所述第一版本控制文件;如果否,基于所述更新文件夹的路径,获得所述更新文件夹中的所述待更新文件,并将所述待更新文件拷贝至所述本地安装目录中,将所述第二版本控制文件替换为所述第一版本控制文件。
具体的,在本实施例中,无论采用隐式更新方式还是显式更新方式,都会采用计算本地安装目录文件中MD5(消息摘要算法第五版)值,然后与服务器中相应文件的MD5值进行比较。所以,需要通过更新程序进程将存储在服务器上的最新版本的目标应用程序对应的所有文件MD5值的数据库文件ProgramData.zdb下载下来,获取ProgrameData.zdb中的所有文件项,该文件项中有一个filename的文件名称字段,以及该文件的MD5值。然后,对ProgramData.zdb数据库中的每一项,根据其filename文件名称,计算该文件在客户端本地安装目录中的MD5值,如果客户端本地的安装目录中,没有该文件项,表示该文件为新增的文件,则需要下载,放到需要更新文件列表FileNeedUpdate中,然后将计算出来的MD5值与ProgramData.zdb中的MD5值进行比较,如果不相等,则说明该文件需要更新,同理将该文件名称放入到FileNeedUpdate列表中。对ProgramData.zdb数据库中的每一项处理完成之后,在FileNeedUpdate列表中,保存有所有的需要下载的待更新文件。最后利用相关的HTTP下载方法,将FileNeedUpdate列表中的所有待更新文件下载到系统临时目录中的更新文件夹UpdateFiles中。
将待更新文件保存至更新文件夹后,进行文件覆盖,采用显式更新方式和隐式更新方式的文件覆盖方式不同,下面分别阐述采用显式更新方式和采用隐式更新方式时的文件覆盖的详细过程。
在采用显式更新方式时,在系统的临时目录的UpdateFiles文件夹中,保存有所有最新的待更新文件。当采用显式更新时,直接将UpdateFiles文件夹内的所有待更新文件拷贝到客户端的安装目录中,并且将最终从服务器下载下来的第一版本控制文件version1.ini覆盖到客户端的安装目录中,即:将客户端本地的第二版本控制文件替换为该的第一版本控制文件version1.ini。最终调用系统的运行外部程序方法ShellExecute,将客户端的目标应用程序重新启动起来,用户才可以使用该目标应用程序进行对应的应用体验。
在采用隐式更新时,不同于显示更新方式中直接将UpdateFiles文件夹内的所有文件直接覆盖到客户端的安装目录中。因为隐式更新方式需要即可启动目标应用程序,目标应用程序已经在运行,从而不能覆盖文件,影响正在运行的目标应用程序。所以,在采用隐式更新方式时,拷贝UpdateFiles文件夹内的所有的待更新文件到客户端安装目录的过程如下所示:
首先调用系统的ShellExecute方法,立即启动客户端的目标应用程序的主进程。当检测到主进程中所述目标应用程序退出时,将将临时保存下载后的UpdateFiles文件夹路径传递给目标应用程序,将主进程的标识以命令行方式传递至所述更新程序进程。
进而,当检测到目标应用程序退出时,比如:检测到目标应用程序的关闭按键被点击时,确定检测到目标应用程序退出。此时调用ShellExecute方法,启动目标应用程序对应的更新程序进程,将UpdateFiles文件夹路径传递给更新程序进程,并且将目标应用程序当前的进程id以命令行方式传递给更新程序进程。
然后,更新程序进程启动后,还需要进一步确认目标应用程序相关进程是否全部关闭,所以,调用OpenProcess系统函数,将应用程序的进度id传入到该函数中,判断目标应用程序是否仍然在运行,如果没有运行则直接将UpdateFiles文件夹内的待更新文件拷贝到客户端的目标应用程序的安装目录中。如果目标应用程序仍然在运行,则调用强制结束进程的TerminateProcess系统函数,将目标应用程序对应的正在运行的相关进程杀死,然后拷贝UpdateFiles文件中的待更新文件到安装目录中。并且将最终从服务器下载下来的第一版本控制文件version1.ini覆盖到客户端的安装目录中,即:将客户端本地的第二版本控制文件替换为该的第一版本控制文件version1.ini。这样,即完成了对目标应用程序的更新。
在采用隐式更新方式时,目标应用程序仍能够立即启动,并将自动更新过程放在后台隐藏式的更新,当用户关闭掉目标应用程序时,将隐藏式更新后下载的所有文件拷贝到目标应用程序的安装目录中,那么当用户下次再重新启动目标应用程序时,所使用的就是更新后最新版本的目标应用程序。由于用户可以立即启动目标应用程序,而不需要等待原有的自动更新完成后,才能启动应用程序的弊端,从而可以提高用户体验。
在具体实施过程中,服务器可动态配置hide字段和minHideVersion字段的值来指示客户端对目标应用程序的更新方式。比如,在通过调研获得用户对显式更新方式更偏好时,可将hide字段的值设定为0。在通过调研获得用户对显式更新方式更偏好时,可将hide字段的值设定为1,并设定相应的minHideVersion字段的值。通过本本实施例中的更新进度获取方法,实现了显式更新与隐藏式更新之间的动态配置,即优化了显式更新时因为更新过程较长,影响用户体验的问题,又解决了隐藏式更新时更新率不如显式更新快的问题。
进一步,在本实施例中,在采用隐式更新方式更新时,需要通过步骤S104,加载更新插件。在本实施例中,在更新程序进程对更新插件的加载也是可选择的。当客户端对应的目标应用程序安装目录的version2.ini配置文件中有plugin这个字段时(该字段用于表示更新插件的存储文件夹,例如plugin=UpdatePlugin,此时更新插件的路径就在客户端安装目录的UpdatePlugin文件夹中),更新程序进程就会在plugin所指示的文件夹中,加载所有的更新插件。本实施例中,对更新插件的格式作了一定限制。由于在Windows操作系统中,插件是以动态链接库dll文件存在的,所以在本实施例的更新插件中,必须导出两个函数,只有存在这两个导出函数时,更新程序进程才会认为该dll是一个合法的更新插件。其中这两个导出函数分别是AutoUpdateLoadPlugin(在加载插件时调用)以及AutoUpdateUnloadPlugin(在卸载插件时调用)。
进而,在更新程序进程中插入更新插件过程包括如下步骤:
步骤1:获取插件加载路径。从客户端安装目录的version2.ini文件中获取plugin字段的值,如果plugin字段不存在,则不需加载插件;否则进入到下面的步骤2。
步骤2:从加载路径中加载所有的插件,包括如下步骤:
步骤2a:获取插件路径中的第一个文件。具体的,调用系统的FindFirstFile获取到一个WIN32_FIND_DATA的结构变量wfd,以及一个HANDLE句柄类型的hFind变量。并进入到下面的步骤2b
步骤2b:获取插件路径中的下一个文件。具体的,调用FindNextFile,将hFile变量传入到该函数的第一个参数中,并且将wfd变量传入到该函数的第二个参数中。并判断该函数的返回值是否为真(true),如果为true,则进入到下面的步骤2c,如果为假(false),则进入到步骤2e
步骤2c:加载dll文件。具体的,判断wfd变量中的cFileName字段的值是否等于”..”(表示上一级目录)或者“.”(表示当前目录),如果是,则表示不是dll文件,则返回至步骤2b开始执行,读取下一个文件。如果是,则调用系统的LoadLibrary方法,将cFileName传入到该函数中,加载该dll,并将该函数的返回值保存到hModule变量中。
步骤2d:判断是否为合法的更新插件。此时调用系统的GetProcAddress函数,判断该dll文件是否导出有AutoUpdateLoadPlugin函数,以及AutoUpateUnloadPlugin函数,如果都存在这两个函数,则表示一个合法的更新插件。此时调用该插件的AutoUpdateLoadPlugin入口函数,并创建一个PluginInfo的结构体,将AutoUpateLoadPlugin保存到该结构的loadPlugin字段中,将AutoUpateUnloadPlugin保存到该结构的unloadPlugin字段中,将hModule保存到该结构的hModule字段中。并将该dll文件的名称cFileName和PluginInfo结构体以键值对的方式保存到字典m_plugins变量中。
如果没有AutoUpdateLoadPlugin或AutoUpdateUnloadPlugin这两个导出函数,则表示该dll是一个普通的dll,并不是更新程序进程的更新插件,则调用系统的FreeLibrary函数,将该dll卸载掉。该步骤完成之后,再次返回至步骤2b开始执行,读取下一个文件。
步骤2e:退出插件加载过程。该过程完成之后,m_plugins变量中就保存有plugin所指示的文件中所有的更新插件。这样就完成所有在更新程序进程中加载所有更新插件的过程。
进而,在通过步骤S104,通过所述更新插件,将所述更新程序进程的更新进度信息传输至所述目标应用程序的主进程,可通过如下步骤实现:
建立所述主进程与所述更新程序进程间的远程过程调用协议连接;
基于所述远程过程调用协议连接,注册更新进度通知函数;
通过所述更新插件能调用所述更新进度通知函数,将所述更新程序进程的更新进度信息传输至所述目标应用程序的主进程。
具体的,在本实施例中,需要利用更新插件实现更新程序进程与目标应用程序的主进程间的数据传递。在更新程序进程中加载完更新插件后,便可以利用更新插件,将更新程序进程中的更新进度信息(包括文件校验状态,文件下载进度状态)传递到主程序中,主程序可将该更新进度信息展示在对应的功能界面中,以提示用户后台更新的状态。
为了在客户端采取隐式更新时,在客户端中展示隐式更新的进度,本实施例中的方法,编写了一个名为AutoUpdatePlugin的更新插件,将该更新插件放在客户端目标应用程序的安装目录的UpdatePlugin目录中,并且在version2.ini文件中增加plugin=UpdatePlugin字段。因为AutoUpdatePlugin是运行在更新程序进程中的,所以它的职责就是把隐式更新的当前的更新状态数据传递到客户端目标应用程序的主进程中。
本实施例中的方法,利用RPC(Remote Procedure Call),即远程过程调用协议连接通信的方式,通过AutoUpdatePlugin更新插件,将更新程序进程和客户端的目标应用程序的主程序进程建立一个RPC通信连接,然后利用该RPC连接,将更新程序进程中的更新状态数据发送到客户端的目标应用程序的主程序中。
具体来说,RPC是一种用于进程间通信的机制,通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP(Transmission Control Protocol传输控制协议)或UDP(User Datagram Protocol用户数据报协议),为通信程序之间携带信息数据。
下面介绍如何通过RPC连接以及更新插件实现将更新程序进程的更新进度信息传输至主进程的详细实现过程。
首先,建立更新程序进程与主进程间的RPC连接。在客户端的目标应用程序的主进程启动后,调用RpcCreateInstace函数,并将更新插件功能“UpdatePluginService”传递到该函数中,从而创建一个名称为“UpdatePluginService”RPC服务器。
然后,在更新程序进程加载AutoUpdatePlugin更新插件之后,会调用到该更新插件中的AutoUpdateLoadPlugin导出函数,然后在该函数中调用RpcCreateInstance函数,创建一个R客户端的目标应用程序的主程序,然后调用RpcStartService函数,将“UpdatePluginService”传入到该函数中,从而连接到上述客户端的RPC服务器。
接着,注册更新进度通知函数notify_update_progress。在客户端的目标应用程序的主程序中,调用RpcRegisterProcedure函数,注册一个名称为notify_update_progress的RPC函数。这样在AutoUpdatePlugin更新插件中,可以通过RPC方式,调用到客户端的目标应用程序的主程序注册的notify_update_process函数,该函数的参数中,携带有更新程序进程中的所有进度信息。
最后,通过AutoUpdatePlugin更新插件调用notify_update_progress函数,将更新进度信息传递到客户端的目标应用程序的主程序中。
具体的,当更新程序进程中调用AutoUpateLoadPlugin插件入口函数时,在该函数的返回值中会返回一个AutoUpdatePluginEntry的结构体,并且在该结构体中包含有一个FILE_UPDATE_CALLBACK的回调函数指针。该回调函数的声明如下:
Typedef void(*FILE_UPDATE_CALLBACK)(const FileUpdateCallbackinfo*param,void*opaque)
FileUpdateCallbackInfo更新状态回调结构
其中该回调函数的第一个参数是一个FileUpdateCallbackInfo的结构体,该结构体中包含有当前更新的进度信息。其中该结构体的定义如下:
Figure BDA0001712782670000211
该结构体中的FileUpdateStatus表示当前更新的状态定义,其定义如下:
Figure BDA0001712782670000212
这样,每当更新程序进程当前的更新状态发生变化时,就会调用到更新程序进程中的DispatchUpdateProgress函数。而在DispathUpdateProcess函数中,会针对m_plugins插件列表中的每一个插件调用AutoUpdatePluginEntry结构中的FILE_UPDATE_CALLBACK回调函数。
在AutoUpdatePlugin更新插件中,当进入到FILE_UPDATE_CALLBACK回调函数时,就调用RpcCallProcedure函数,从而调用客户端的目标应用程序的主程序所注册的notify_update_process RPC函数,将更新状态数据FileUpdateCallbackInfo发送到客户端的目标应用程序的主程序中,从而完成了在AutoUpdatePlugin更新插件中将自动更新的更新进度信息传递到客户端的目标应用程序的主程序中的功能。
最后,当更新过程结束(下载所有文件结束)后,对m_plugins插件列表中的所有插件,调用其AutoUpdateUnloadPlugin函数。从而通知更新插件做一些清理性的工作。
上述的所有步骤,实现了在AutoUpdatePlugin更新插件与客户端的目标应用程序的主程序程序之间,传递自动更新的更新进度信息数据。当客户端的目标应用程序的主程序收到了这些更新进度数据之后,便可以在界面上做成相应的展示或输出与更新进度信息对应的提示信息,用于提示用户对应的更新进度,这样,用户可以及时根据更新进度获知是否完成更新,在确定完成更新后重启目标应用程序,及时体验更新版本的目标应用程序,获得更好的用户体验。
通过本实施例中的更新进度获取方法,对原有更新过程的优化,实现了显示更新与隐藏式更新之间的动态切换,即优化了显示更新时因为更新过程较长,影响用户体验的问题;又解决了隐藏式更新时更新率不如显示更新快的问题。并且利用在隐式更新时,通过可配置加载更新插件的方式,使得可以将自动更新的更新进度信息数据传递到更新插件中,进而增加更新的进度提示功能,有效提高用户体验。
请参见图2,本发明的第二实施例提供了一种更新进度获取装置,应用于客户端,包括:
第一获取单元201,用于获得与目标应用程序对应的第一版本控制文件,所述第一版本控制文件为服务器中存储的与所述目标应用程序对应的最新版本的版本控制文件;
第二获取单元202,用于获得与所述目标应用程序对应的第二版本控制文件,所述第二版本控制文件为所述客户端中与所述目标应用程序对应的本地安装目录中的版本控制文件;
判断单元203,用于基于所述第一版本控制文件与所述第二版本控制文件,判断是否需要对所述目标应用程序进行更新;
更新进度信息获取单元204,用于如果所述判断单元的判断结果为是时,在采用隐式更新方式对所述目标应用程序进行更新时,在更新程序进程中加载更新插件,通过所述更新插件,将所述更新程序进程的更新进度信息传输至所述目标应用程序的主进程,其中,所述隐式更新方式为在所述目标应用程序本次启动运行至退出后进行更新的更新方式。
在一种可选实现方式中,所述第一获取单元具体用于:
在所述目标应用程序每次启动时,发送下载请求至所述服务器,接收所述基于所述下载请求发送的所述第一版本控制文件;或
在所述目标应用程序启动时,获得启动时刻,如果所述启动时刻距上一次发送下载请求的时刻间的时间间隔满足预设条件,发送下载请求至所述服务器,接收所述基于所述下载请求发送的所述第一版本控制文件。
在一种可选实现方式中,所述判断单元具体用于:
获得所述第一版本控制文件中的第一版本号与所述第二版本控制文件中的第二版本号;
判断所述第一版本号是否大于所述第二版本号,如果是,表明需要对所述目标应用程序进行更新。
在一种可选实现方式中,所述更新进度获取装置还包括:
更新单元,用于在确定需要对所述目标应用程序进行更新时,获得所述第一版本控制文件中的更新方式字段的值,其中,所述服务器中配置的所述更新方式字段的值可以设置为第一预设值或第二预设值,所述更新方式字段的值为所述第一预设值时,表示所述客户端可以采用显式更新方式进行更新,所述更新方式字段的值为所述第二预设值时,表示所述客户端可以采用隐式更新方式进行更新;如果所述更新方式字段的值为所述第二预设值,采用所述隐式更新方式对所述目标应用程序进行更新。
在一种可选实现方式中,所述更新单元具体用于:
获取所述第一版本控制文件中的最低版本要求字段的值,所述最低版本要求字段的值为所述服务器配置的在采用隐式更新方式时,要求客户端中安装目标应用程序的最低版本号;
判断所述第二版本号是否大于所述最低版本要求字段的值,如果是,采用所述隐式更新方式对所述目标应用程序进行更新。
在一种可选实现方式中,所述更新单元具体用于:
启动所述目标应用程序的主进程与更新程序进程;
基于所述更新程序进程,下载待更新文件,将所述待更新文件存储至系统的临时目录中的更新文件夹中;
当检测到所述主进程中所述目标应用程序退出时,将所述更新文件夹的路径传递至所述更新程序进程,将所述主进程的标识以命令行方式传递至所述更新程序进程;
在所述更新程序进程中调用打开进程句柄OpenProcess函数,将所述当前进程的进度标识传递至所述OpenProcess函数,基于所述OpenProcess函数,判断所述目标应用程序是否正在运行,如果是,调用结束进程TerminateProcess函数结束所述目标应用程序的运行进程,基于所述更新文件夹的路径,获得所述更新文件夹中的所述待更新文件,并将所述待更新文件拷贝至所述本地安装目录中,将所述第二版本控制文件替换为所述第一版本控制文件;如果否,基于所述更新文件夹的路径,获得所述更新文件夹中的所述待更新文件,并将所述待更新文件拷贝至所述本地安装目录中,将所述第二版本控制文件替换为所述第一版本控制文件。
在一种可选实现方式中,所述更新进度信息获取单元具体用于:
在启动所述更新程序进程后,在读取到所述第二版本控制文件的加载插件字段的值为第三预设值时,在所述更新程序进程中加载所述更新插件;
建立所述主进程与所述更新程序进程间的远程过程调用协议连接;
基于所述远程过程调用协议连接,注册更新进度通知函数;
通过所述更新插件能调用所述更新进度通知函数,将所述更新程序进程的更新进度信息传输至所述目标应用程序的主进程。
请参见图3,本发明的第三实施例提供了一种更新进度获取装置,该实施例的装置包括:处理器301、存储器302以及存储在所述存储器中并可在所述处理器上运行的计算机程序,例如第一实施例中更新进度获取方法对应的程序。所述处理器执行所述计算机程序时实现上述第一实施例中各路径检测中的步骤。或者,所述处理器执行所述计算机程序时实现上述第二实施例的装置中各模块/单元的功能。
示例性的,所述计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器中,并由所述处理器执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述计算机装置中的执行过程。例如,所述计算机程序可以被分割成创建单元、调用单元、处理单元的功能,各单元具体功能如下:
第一获取单元,用于获得与目标应用程序对应的第一版本控制文件,所述第一版本控制文件为服务器中存储的与所述目标应用程序对应的最新版本的版本控制文件;
第二获取单元,用于获得与所述目标应用程序对应的第二版本控制文件,所述第二版本控制文件为所述客户端中与所述目标应用程序对应的本地安装目录中的版本控制文件;
判断单元,用于基于所述第一版本控制文件与所述第二版本控制文件,判断是否需要对所述目标应用程序进行更新;
更新进度信息获取单元,用于如果所述判断单元的判断结果为是时,在采用隐式更新方式对所述目标应用程序进行更新时,在更新程序进程中加载更新插件,通过所述更新插件,将所述更新程序进程的更新进度信息传输至所述目标应用程序的主进程,其中,所述隐式更新方式为在所述目标应用程序本次启动运行至退出后进行更新的更新方式。
所述装置可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,所述示意图3仅仅是计算机装置的示例,并不构成对装置的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述装置还可以包括输入输出设备、网络接入设备、总线等。
所称处理器301可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述计算机装置的控制中心,利用各种接口和线路连接整个计算机装置的各个部分。
所述存储器302可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述计算机装置的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、视频数据等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
进一步,该装置所包括的处理器301还具有以下功能:
在所述目标应用程序每次启动时,发送下载请求至所述服务器,接收所述基于所述下载请求发送的所述第一版本控制文件;或
在所述目标应用程序启动时,获得启动时刻,如果所述启动时刻距上一次发送下载请求的时刻间的时间间隔满足预设条件,发送下载请求至所述服务器,接收所述基于所述下载请求发送的所述第一版本控制文件。
进一步,该装置所包括的处理器301还具有以下功能:
获得所述第一版本控制文件中的第一版本号与所述第二版本控制文件中的第二版本号;
判断所述第一版本号是否大于所述第二版本号,如果是,表明需要对所述目标应用程序进行更新。
进一步,该装置所包括的处理器301还具有以下功能:
在确定需要对所述目标应用程序进行更新时,获得所述第一版本控制文件中的更新方式字段的值,其中,所述服务器中配置的所述更新方式字段的值可以设置为第一预设值或第二预设值,所述更新方式字段的值为所述第一预设值时,表示所述客户端可以采用显式更新方式进行更新,所述更新方式字段的值为所述第二预设值时,表示所述客户端可以采用隐式更新方式进行更新;
如果所述更新方式字段的值为所述第二预设值,采用所述隐式更新方式对所述目标应用程序进行更新。
进一步,该装置所包括的处理器301还具有以下功能:
获取所述第一版本控制文件中的最低版本要求字段的值,所述最低版本要求字段的值为所述服务器配置的在采用隐式更新方式时,要求客户端中安装目标应用程序的最低版本号;
判断所述第二版本号是否大于所述最低版本要求字段的值,如果是,采用所述隐式更新方式对所述目标应用程序进行更新。
进一步,该装置所包括的处理器301还具有以下功能:
采用所述隐式更新方式对所述目标应用程序进行更新时,启动所述目标应用程序的主进程与更新程序进程;
基于所述更新程序进程,下载待更新文件,将所述待更新文件存储至系统的临时目录中的更新文件夹中;
当检测到所述主进程中所述目标应用程序退出时,将所述更新文件夹的路径传递至所述更新程序进程,将所述主进程的标识以命令行方式传递至所述更新程序进程;
在所述更新程序进程中调用打开进程句柄OpenProcess函数,将所述当前进程的进度标识传递至所述OpenProcess函数,基于所述OpenProcess函数,判断所述目标应用程序是否正在运行,如果是,调用结束进程TerminateProcess函数结束所述目标应用程序的运行进程,基于所述更新文件夹的路径,获得所述更新文件夹中的所述待更新文件,并将所述待更新文件拷贝至所述本地安装目录中,将所述第二版本控制文件替换为所述第一版本控制文件;如果否,基于所述更新文件夹的路径,获得所述更新文件夹中的所述待更新文件,并将所述待更新文件拷贝至所述本地安装目录中,将所述第二版本控制文件替换为所述第一版本控制文件。
进一步,该装置所包括的处理器301还具有以下功能:
在启动所述更新程序进程后,在读取到所述第二版本控制文件的加载插件字段的值为第三预设值时,在所述更新程序进程中加载所述更新插件;
建立所述主进程与所述更新程序进程间的远程过程调用协议连接;
基于所述远程过程调用协议连接,注册更新进度通知函数;
通过所述更新插件能调用所述更新进度通知函数,将所述更新程序进程的更新进度信息传输至所述目标应用程序的主进程。
本发明第四实施例提供了一种计算机可读存储介质,其上存储有计算机程序,本发明第二实施例中的所述更新进度获取装置集成的功能单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述第一实施例的更新进度获取方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (10)

1.一种更新进度获取方法,应用于客户端,其特征在于,包括:
获得与目标应用程序对应的第一版本控制文件,所述第一版本控制文件为服务器中存储的与所述目标应用程序对应的最新版本的版本控制文件;
获得与所述目标应用程序对应的第二版本控制文件,所述第二版本控制文件为所述客户端中与所述目标应用程序对应的本地安装目录中的版本控制文件;
基于所述第一版本控制文件与所述第二版本控制文件,判断是否需要对所述目标应用程序进行更新;
如果是,在采用隐式更新方式对所述目标应用程序进行更新时,在更新程序进程中加载更新插件,通过所述更新插件,将所述更新程序进程的更新进度信息传输至所述目标应用程序的主进程,以使所述主进程在运行过程中获知所述更新程序进程的更新进度;
其中,所述隐式更新方式为在所述目标应用程序本次启动运行至退出后进行更新的更新方式;所述采用所述隐式更新方式对所述目标应用程序进行更新,包括:启动所述目标应用程序的主进程与更新程序进程;基于所述更新程序进程,下载待更新文件,将所述待更新文件存储至系统的临时目录中的更新文件夹中;当检测到所述主进程中所述目标应用程序退出时,将所述更新文件夹的路径传递至所述更新程序进程,将所述主进程的标识以命令行方式传递至所述更新程序进程。
2.如权利要求1所述的方法,其特征在于,所述获得与目标应用程序对应的第一版本控制文件,包括:
在所述目标应用程序每次启动时,发送下载请求至所述服务器,接收所述基于所述下载请求发送的所述第一版本控制文件;或
在所述目标应用程序启动时,获得启动时刻,如果所述启动时刻距上一次发送下载请求的时刻间的时间间隔满足预设条件,发送下载请求至所述服务器,接收所述基于所述下载请求发送的所述第一版本控制文件。
3.如权利要求1所述的方法,其特征在于,所述基于所述第一版本控制文件与所述第二版本控制文件,判断是否需要对所述目标应用程序进行更新,包括:
获得所述第一版本控制文件中的第一版本号与所述第二版本控制文件中的第二版本号;
判断所述第一版本号是否大于所述第二版本号,如果是,表明需要对所述目标应用程序进行更新。
4.如权利要求1所述的方法,其特征在于,在确定需要对所述目标应用程序进行更新时,所述方法还包括:
获得所述第一版本控制文件中的更新方式字段的值,其中,所述服务器中配置的所述更新方式字段的值可以设置为第一预设值或第二预设值,所述更新方式字段的值为所述第一预设值时,表示所述客户端可以采用显式更新方式进行更新,所述更新方式字段的值为所述第二预设值时,表示所述客户端可以采用隐式更新方式进行更新;
如果所述更新方式字段的值为所述第二预设值,采用所述隐式更新方式对所述目标应用程序进行更新。
5.如权利要求3所述的方法,其特征在于,所述采用所述隐式更新方式对所述目标应用程序进行更新,包括:
获取所述第一版本控制文件中的最低版本要求字段的值,所述最低版本要求字段的值为所述服务器配置的在采用隐式更新方式时,要求客户端中安装目标应用程序的最低版本号;
判断所述第二版本号是否大于所述最低版本要求字段的值,如果是,采用所述隐式更新方式对所述目标应用程序进行更新。
6.如权利要求4或5所述的方法,其特征在于,所述采用所述隐式更新方式对所述目标应用程序进行更新,还包括:
在所述更新程序进程中调用打开进程句柄OpenProcess函数,将当前进程的进度标识传递至所述OpenProcess函数,基于所述OpenProcess函数,判断所述目标应用程序是否正在运行,如果是,调用结束进程TerminateProcess函数结束所述目标应用程序的运行进程,基于所述更新文件夹的路径,获得所述更新文件夹中的所述待更新文件,并将所述待更新文件拷贝至所述本地安装目录中,将所述第二版本控制文件替换为所述第一版本控制文件;如果否,基于所述更新文件夹的路径,获得所述更新文件夹中的所述待更新文件,并将所述待更新文件拷贝至所述本地安装目录中,将所述第二版本控制文件替换为所述第一版本控制文件。
7.如权利要求6所述的方法,其特征在于,所述在更新程序进程中加载更新插件,通过所述更新插件,将所述更新程序进程的更新进度信息传输至所述目标应用程序的主进程,包括:
在启动所述更新程序进程后,在读取到所述第二版本控制文件的加载插件字段的值为第三预设值时,在所述更新程序进程中加载所述更新插件;
建立所述主进程与所述更新程序进程间的远程过程调用协议连接;
基于所述远程过程调用协议连接,注册更新进度通知函数;
通过所述更新插件能调用所述更新进度通知函数,将所述更新程序进程的更新进度信息传输至所述目标应用程序的主进程。
8.一种更新进度获取装置,应用于客户端,其特征在于,包括:
第一获取单元,用于获得与目标应用程序对应的第一版本控制文件,所述第一版本控制文件为服务器中存储的与所述目标应用程序对应的最新版本的版本控制文件;
第二获取单元,用于获得与所述目标应用程序对应的第二版本控制文件,所述第二版本控制文件为所述客户端中与所述目标应用程序对应的本地安装目录中的版本控制文件;
判断单元,用于基于所述第一版本控制文件与所述第二版本控制文件,判断是否需要对所述目标应用程序进行更新;
更新进度信息获取单元,用于如果所述判断单元的判断结果为是时,在采用隐式更新方式对所述目标应用程序进行更新时,在更新程序进程中加载更新插件,通过所述更新插件,将所述更新程序进程的更新进度信息传输至所述目标应用程序的主进程,以使所述主进程在运行过程中获知所述更新程序进程的更新进度;
其中,所述隐式更新方式为在所述目标应用程序本次启动运行至退出后进行更新的更新方式;所述采用所述隐式更新方式对所述目标应用程序进行更新,包括:启动所述目标应用程序的主进程与更新程序进程;基于所述更新程序进程,下载待更新文件,将所述待更新文件存储至系统的临时目录中的更新文件夹中;当检测到所述主进程中所述目标应用程序退出时,将所述更新文件夹的路径传递至所述更新程序进程,将所述主进程的标识以命令行方式传递至所述更新程序进程。
9.一种更新进度获取装置,应用于客户端,其特征在于,所述目标更新进度获取装置包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现如权利要求1-7中任一项所述的更新进度获取方法的步骤。
10.一种可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-7中任一项所述的更新进度获取方法的步骤。
CN201810691134.0A 2018-06-28 2018-06-28 一种更新进度获取方法、装置及可读存储介质 Active CN108874427B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810691134.0A CN108874427B (zh) 2018-06-28 2018-06-28 一种更新进度获取方法、装置及可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810691134.0A CN108874427B (zh) 2018-06-28 2018-06-28 一种更新进度获取方法、装置及可读存储介质

Publications (2)

Publication Number Publication Date
CN108874427A CN108874427A (zh) 2018-11-23
CN108874427B true CN108874427B (zh) 2022-08-16

Family

ID=64296683

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810691134.0A Active CN108874427B (zh) 2018-06-28 2018-06-28 一种更新进度获取方法、装置及可读存储介质

Country Status (1)

Country Link
CN (1) CN108874427B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109656595A (zh) * 2018-12-10 2019-04-19 北京百家互联科技有限公司 客户端程序更新的方法、装置及系统
CN112068898B (zh) * 2020-09-01 2024-04-19 上海熙菱信息技术有限公司 一种可配置插件式服务集成系统及方法
CN112328283B (zh) * 2020-11-12 2024-08-20 北京字节跳动网络技术有限公司 一种应用程序的更新方法、装置、设备及介质
CN113434211B (zh) * 2021-06-24 2023-02-07 平安国际智慧城市科技股份有限公司 应用程序功能动态化配置方法、装置、设备及存储介质
CN115766681B (zh) * 2022-11-28 2024-08-23 迈普通信技术股份有限公司 程序下载方法、装置、介质及设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107315608A (zh) * 2017-06-22 2017-11-03 上海艾融软件股份有限公司 面向移动端混合模式热更新方法
CN107357613A (zh) * 2017-06-28 2017-11-17 广州酷狗计算机科技有限公司 应用更新方法、装置及计算机可读存储介质
CN107423101A (zh) * 2017-08-01 2017-12-01 武大吉奥信息技术有限公司 一种应用程序插件网格化发布与管理方法及系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107315608A (zh) * 2017-06-22 2017-11-03 上海艾融软件股份有限公司 面向移动端混合模式热更新方法
CN107357613A (zh) * 2017-06-28 2017-11-17 广州酷狗计算机科技有限公司 应用更新方法、装置及计算机可读存储介质
CN107423101A (zh) * 2017-08-01 2017-12-01 武大吉奥信息技术有限公司 一种应用程序插件网格化发布与管理方法及系统

Also Published As

Publication number Publication date
CN108874427A (zh) 2018-11-23

Similar Documents

Publication Publication Date Title
CN108874427B (zh) 一种更新进度获取方法、装置及可读存储介质
CN108874426B (zh) 一种应用程序更新方法、装置及可读存储介质
US9270732B2 (en) System and method for automatically uploading updates
JP5658283B2 (ja) アプリケーションの稼働方法、装置及びシステム
US9569197B2 (en) Method of disseminating updated drivers to mobile computing devices and a dissemination system therefor
CN109413186B (zh) 应用程序更新方法、终端、服务器及系统
US20050289534A1 (en) Method for upgrading software version of mobile terminal using integrated difference files
CN111427596B (zh) 一种软件升级的方法、装置及终端设备
CN110543327B (zh) 业务组件复用方法、装置、计算机设备及存储介质
US20230084369A1 (en) Configuration updating method and apparatus, device and storage medium
KR20060129312A (ko) 시스템 소프트웨어 업데이트 서비스를 신호화하기 위한사용 로더
CN110457049B (zh) 实现插件自动化的方法、装置、电子设备及存储介质
CN112162795B (zh) 一种插件启动方法、装置、计算机设备和存储介质
CN108459868A (zh) 一种软件启动方法、装置、终端和存储介质
CN114937452A (zh) 服务调用方法与系统、调用设备、目标设备及可读存储介质
US11301227B2 (en) Server apparatus, information processing apparatus, and control method for installing application
CN109408116B (zh) 一种业务标识获取方法、装置、设备及存储介质
CN111552537B (zh) 主题切换方法、装置、计算机设备及存储介质
CN111061504B (zh) 多系统版本匹配方法、系统、服务端、客户端、电子设备
CN109976790B (zh) 应用更新方法、装置、终端及存储介质
CN111722994A (zh) 一种任务请求的响应方法及设备
CN115269063A (zh) 进程创建方法、系统、设备及介质
CN112860300A (zh) 分布式sdk热更新处理方法、应用服务器集群
CN109982136B (zh) 音量调节的方法及装置
CN111124795B (zh) 应用启动监控方法、装置及设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20231213

Address after: No. 21032, 9th Floor, Building 2, Micro World, Century Avenue, Liuwu New District, Lhasa, Tibet Autonomous Region, 850000

Patentee after: Tibet Lindong Technology Co.,Ltd.

Address before: 430000 East Lake Development Zone, Wuhan City, Hubei Province, No. 1 Software Park East Road 4.1 Phase B1 Building 11 Building

Patentee before: WUHAN DOUYU NETWORK TECHNOLOGY Co.,Ltd.