CN116400945B - 一种动态链接库升级方法、电子设备及存储介质 - Google Patents
一种动态链接库升级方法、电子设备及存储介质 Download PDFInfo
- Publication number
- CN116400945B CN116400945B CN202310675051.3A CN202310675051A CN116400945B CN 116400945 B CN116400945 B CN 116400945B CN 202310675051 A CN202310675051 A CN 202310675051A CN 116400945 B CN116400945 B CN 116400945B
- Authority
- CN
- China
- Prior art keywords
- file
- dll
- update
- function
- files
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 51
- 230000006870 function Effects 0.000 claims description 87
- 238000001514 detection method Methods 0.000 claims description 35
- 230000008569 process Effects 0.000 claims description 12
- 230000009191 jumping Effects 0.000 claims description 2
- 230000009286 beneficial effect Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 239000013307 optical fiber Substances 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000036316 preload Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44557—Code layout in executable memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种动态链接库升级方法、电子设备及存储介质,包括:响应于获取到的启动指令,将DLL文件B加载至内存空间R2;若DLL文件B加载成功,在DLL文件B加载完成后;确定R3中是否存在目标文件,若存在,则执行步骤S220;否则,执行步骤S300;R3中存在目标文件表示R3中包含至少一个更新文件,更新文件在L中具有与其对应的DLL文件A,且每一更新文件的文件名与其对应的DLL文件A的文件名相同;使用每一更新文件对L中与更新文件的文件名相同的DLL文件A进行替换,将L中的各DLL文件A加载至内存空间R2;该方法无需重启目标程序即可完成DLL文件的更新。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种动态链接库升级方法、电子设备及存储介质。
背景技术
在windows系统下的软件开发环境中,最终执行的很多应用程序并不是可独立运行的执行程序,而是被分成许多独立可执行文件,这些文件被称为动态链接库文件,即DLL文件。无论是基于整个系统的功能开发,还是独立模块的SDK开发,DLL的使用都是必不可少的,它拓展了应用程序的特性,并且可以有助于资源共享,跨平台调用,项目管理等;同时,可以封装一些不想暴露的代码,提升项目的安全性。但是,在对于一个系统或功能包的维护上,经常会更新升级一些依赖的动态链接库DLL文件,对于这些DLL文件的升级,通常的做法是,在应用程序运行的过程中,获取到DLL文件的更新文件后,需要终止应用程序的运行,重启应用程序来完成DLL文件的升级。
发明内容
针对上述技术问题,本发明采用的技术方案为:
根据本申请的第一方面,提供了一种动态链接库升级方法,应用于目标程序,目标程序安装于目标设备中,目标设备中存储有目标设备对应的DLL文件A集L=(a1,a2,…,am,…,an)和DLL文件B;其中,m=1,2,…,n;am为第m个DLL文件A,n为DLL文件A的数量;L和B存储于第一预设存储空间R1,am中包括至少一个功能函数,DLL文件B中包含更新检测函数,以及am中每一功能函数对应的调用函数,且每一调用函数的输入输出参数与其对应的功能函数的输入输出参数相同;
该动态链接库升级方法,包括以下步骤:
S100,响应于获取到的启动指令,通过预设的加载函数,将DLL文件B加载至内存空间R2;若DLL文件B加载失败,则终止所述目标程序的启动;若DLL文件B加载成功,则执行步骤S200。
S200,在DLL文件B加载完成后,触发DLL文件B的更新检测函数。
S300,将L中的各DLL文件A加载至内存空间R2。
更新检测函数用于执行以下步骤:
S210,确定第二预设存储空间R3中是否存在目标文件,若存在,则执行步骤S220;否则,执行步骤S300;R3中存在目标文件表示R3中包含至少一个更新文件,更新文件在L中具有与其对应的DLL文件A,且每一更新文件的文件名与其对应的DLL文件A的文件名相同。
S220,使用每一更新文件对L中与更新文件的文件名相同的DLL文件A进行替换,以完成L的更新,并执行步骤S300。
根据本申请的另一方面,还提供了一种非瞬时性计算机可读存储介质,存储介质中存储有至少一条指令或至少一段程序,至少一条指令或至少一段程序由处理器加载并执行以实现上述动态链接库升级方法。
根据本申请的另一方面,还提供了一种电子设备,包括处理器和上述非瞬时性计算机可读存储介质。
本发明至少具有以下有益效果:
本发明的动态链接库升级方法,在目标程序启动时,将DLL文件B加载至内存空间R2,由DLL文件B中的更新检测函数控制后续需要加载的DLL文件A,而在加载DLL文件A之前,首先通过DLL文件B中的更新检测函数获取第二预设存储空间R3中存储的更新文件,将原来待更新的DLL文件A替换为对应的更新文件,同时删除R3中的更新文件和目标文件;这样,在目标程序每次启动时,都能够实现DLL文件的自动更新。
而如果R3中不存在更新文件,则说明目标程序此次启动不需要更新,DLL文件B则将DLL文件A加载至内存空间,由此保证目标程序每次启动时,所加载的DLL文件A都是最新版本的文件,从而实现DLL文件的自动更新;在用户使用目标程序过程中,即使存在更新文件,也不用刻意的终止目标程序运行,来对DLL文件进行更新,用户只需要正常使用目标程序,在目标程序下次启动时,即可完成DLL文件的更新。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的动态链接库升级方法的流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本公开,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。
本发明实施例提供了一种动态链接库升级方法,其特征在于,应用于目标程序,所述目标程序安装于目标设备中,所述目标设备中存储有所述目标设备对应的DLL文件A集L=(a1,a2,…,am,…,an)和DLL文件B;其中,m=1,2,…,n;am为第m个DLL文件A,n为DLL文件A的数量;L和B存储于第一预设存储空间R1,am中包括至少一个功能函数,所述DLL文件B中包含更新检测函数,以及am中每一功能函数对应的调用函数,且每一调用函数的输入输出参数与其对应的功能函数的输入输出参数相同。
本实施例中,所述的方法是基于windows系统平台的动态链接库升级方法,可以理解的是,目标程序指的是windows系统上用户所安装的应用程序,目标设备是指安装有windows系统的终端设备,例如,台式电脑、笔记本电脑以及手持式平板电脑等。DLL文件A为可执行文件,其中封装了至少一个调用方需要的功能函数,每个功能函数具有各自的输入和输出参数;DLL文件B则是在DLL文件A的基础上将DLL文件A的各功能函数进行的二次封装,且只存在一个DLL文件B,DLL文件B对应于所有的DLL文件A,DLL文件B中包含的更新检测函数具有网络请求在线更新标志的功能,多线程下载更新文件的功能以及加载和释放DLL文件A的功能。
下面将参照图1所述的动态链接库升级方法的流程图,对一种动态链接库升级方法进行介绍。
该动态链接库升级方法包括以下步骤:
S100,响应于获取到的启动指令,通过预设的加载函数,将DLL文件B加载至内存空间R2;若DLL文件B加载失败,则终止所述目标程序的启动;若DLL文件B加载成功,则执行步骤S200。
本实施例中,用户执行目标程序的打开操作,例如,双击目标程序;目标程序根据预设的加载规则,首先将DLL文件B加载至内存空间R2,若DLL文件B加载至R2失败,则表示DLL文件B存在问题,此时将终止目标程序的启动;而如果DLL文件B能够成功加载至R2,则表示DLL文件B不存在问题,将执行下一步骤;对DLL文件B加载成功与否的判断,能够检测DLL文件B的完整性,避免将不完整的DLL文件B加载至R2,导致目标程序后续运行出现错误的现象发生。
S200,在所述DLL文件B加载完成后,触发所述DLL文件B的更新检测函数。
本实施例中,在DLL文件B成功加载至R2后,基于预先设置的触发机制,DLL文件B首先会首先触发更新检测函数的运行,而在更新检测函数运行时会执行以下步骤:
S210,确定第二预设存储空间R3中是否存在目标文件,若存在,则执行步骤S220;否则,执行步骤S300;R3中存在所述目标文件表示R3中包含至少一个更新文件,所述更新文件在L中具有与其对应的DLL文件A,且每一更新文件的文件名与其对应的DLL文件A的文件名相同。
本实施例中,更新检测函数具有检测R3中是否存在目标文件以及对DLL文件A进行替换的功能;在R3中如果存在一个或多个更新文件,则会相应存在唯一一个目标文件,该目标文件用于记录各个更新文件的信息。例如,R3中存在更新文件a1和a2,以及目标文件succeed.dat,那么,succeed.dat文件中会记录a1和a2的文件名以及版本号;那么,在R3中是否存在目标文件的判断,可以采用以下方法:
获取R3中存在的各文件的文件名,遍历获取到各文件名,如果存在与预设的文件名相同的文件名,则判断为R3中存在目标文件,否则,判断为R3中不存在目标文件。
S220,使用每一更新文件对L中与更新文件的文件名相同的DLL文件A进行替换,以完成L的更新,并执行步骤S300。
上述步骤S210中检测到R3中存在更新文件,那么,更新检测函数则会根据文件名,使用各更新文件对R1中的DLL文件进行替换;同时,更新检测函数还需要将R3中的更新文件以及目标文件删除,以免目标程序下次启动时,又检测到已经替换过DLL文件A的更新文件,进而再次对DLL文件进行替换,降低目标程序运行效率;而若将R3中的目标文件和各个更新文件删除,目标程序再次启动时,则判断为R3中不存在更新文件,直接执行步骤S300。可以理解的是,每一更新文件都对应于R1中的一个DLL文件A,且二者的文件名完全相同;至此,L完成更新。
S300,将L中的各DLL文件A加载至内存空间R2。
更新检测函数此时加载至R2的各DLL文件A均为最新版本的DLL文件,即,目标程序在启动的过程中完成了动态链接库的更新。
本实施例的动态链接库升级方法,在目标程序启动时,将DLL文件B加载至内存空间R2,由DLL文件B中的更新检测函数控制后续需要加载的DLL文件A,而在加载DLL文件A之前,首先通过DLL文件B中的更新检测函数获取第二预设存储空间R3中存储的更新文件,将原来待更新的DLL文件A替换为对应的更新文件,同时删除R3中的更新文件和目标文件;这样,可以在目标程序每次启动时,都能够实现DLL文件的自动更新。
而如果R3中不存在更新文件,则说明目标程序此次启动不需要更新,DLL文件B则将DLL文件A加载至内存空间,由此保证目标程序每次启动时,所加载的DLL文件A都是最新版本的文件,从而实现DLL文件的自动更新;在用户使用目标程序过程中,即使存在更新文件,也不用刻意的终止目标程序运行,来对DLL文件进行更新,用户只需要正常使用目标程序,在目标程序下次启动时,即可完成DLL文件的更新。
在本申请的一种示例性实施例中,所述更新检测函数还用于执行以下步骤:
S230,向服务器发送更新查询请求,所述更新查询请求用于查询服务器上是否存在所述更新文件。
本实施例中,更新检测函数还具有从服务器查询及获取更新文件的功能,在检测函数运行时,会向服务器发送更新查询请求,查询服务器上的更新文件标识S1,例如,updataFlag标志位,updataFlag为1或0,1表示服务器上存在更新文件,0表示服务器上不存在更新文件;服务器接收到更新查询请求后会将updataFlag标志位的值返回至目标程序。
S240,接收来自服务器返回的更新文件标识S1,若S1=0,则执行步骤S210或跳出当前处理;若S1=1,则执行步骤S250。
更新检测函数接收到来自服务器返回的S1的状态,若S1=0,即表示服务器上不存在更新文件,此时,根据更新检测函数向服务器发送更新查询请求的时机,选择执行步骤S210或跳出当前处理;具体的,如果向服务器发送更新查询请求在步骤S210之前,则跳转步骤S210;如果向服务器发送更新查询请求在步骤S210之后,则直接跳出当前处理。
若S1=1,服务器还会返回服务器上的更新文件对应的下载地址。
S250,接收来自服务器返回的更新文件下载地址。
S260,根据所述更新文件下载地址建立更新文件下载线程。
更新检测函数接收到更新文件下载地址后,会根据更新文件的个数以及当前空闲线程的数量建立若干个文件下载线程,具体建立方法如下:
若j≤k,则建立一个更新文件下载线程下载所有的更新文件;其中,j为更新文件的数量,k为预设的单个线程下载更新文件最大数量阈值。
若j>k,则建立d+1个更新文件下载线程同时下载所有的更新文件;其中,d为j/k取整数。
该下载方法能够充分利用单个线程下载的能力,且能够避免单个线程承载过多更新文件的下载任务,造成下载时间较长的问题;如果不考虑更新文件的数量以及单个线程所能承载的最大下载数量,那么,当更新文件较多时,依然采用一个线程进行下载,更新文件需要排队下载,会导致下载时间较长。
S270,通过所述更新文件下载线程将所述更新文件下载至R3,并在R3中生成所述目标文件。
将所有的更新文件下载至R3,更新检测函数会根据各个更新文件的信息,例如,文件名、文件大小以及版本号等,生成目标文件,例如,succeed.dat文件,该文件记录有所有的更新文件的信息。
对于上述步骤S230-S270的执行时机,会存在以下两种情况:
第一种情况为:在步骤S210之前执行步骤S230,即在检测R3中是否存在更新文件之前从服务器上获取更新文件;在这种情况下,如果从服务器上获取到更新文件,那么使用从服务器上获取到更新文件替换掉R3中与其文件名相同的更新文件,然后使用替换后的更新文件对DLL文件A进行替换,以完成后续DLL文件A的加载。
该种情况下,步骤S230-S270执行时机具有以下优点:
在检测R3中是否存在更新文件之前,能够使用从服务器下载的最新的更新文件对R3中的更新文件进行更新,目标程序所加载的DLL文件A为从服务器下载的更新文件,从而能够使得目标程序在本次启动时,即可实现采用从服务器下载的更新文件对动态链接库的更新,无需重新启动目标程序来完成动态链接库的更新,具有较好的便利性。
第二种情况为:在步骤S210之后执行步骤S230,即在检测R3中是否存在更新文件之后从服务器上获取更新文件;在这种情况下,目标程序使用R3中已经存在的更新文件对DLL文件A进行替换,以完成后续DLL文件A的加载。
该种情况下,步骤S230-S270执行时机具有以下优点:
目标程序在使用R3中的更新文件对DLL文件A进行替换以及加载时,无需考虑服务器上是否存在更新文件,不用等待从服务器上查询以及下载更新文件的过程;对于服务器上的更新文件,更新检测函数可以在目标程序后续的运行过程中随时查询和下载,因此,目标程序的启动时间较短,启动效率较高。
步骤S220包括以下步骤:
S221,将每一更新文件加载至R2。
更新检测函数在查询到R3中的更新文件后,首先将每一更新文件预加载至R2,判断每一更新文件是否能够成功加载至R2,若能够成功加载至R2,则表示该更新文件为DLL文件;否则,该文件为非DLL文件。
S222,将加载成功的更新文件从R2释放,并将加载失败的更新文件删除。
若R3中的更新文件能够成功加载至R2,那么,在R2中直接对能够成功加载的更新文件执行释放操作;对于加载失败的更新文件,则需要将其在R3中删除,避免DLL文件A的替换使用未能成功加载的更新文件,造成目标程序运行错误。
S223,使用加载成功的更新文件对L中对应的DLL文件A进行替换;其中,被替换的DLL文件A的文件名与其对应的更新文件的文件名相同。
获取已经释放至R2中的更新文件的文件名,将L中与该文件名相同的DLL文件A删除,并将R3中释放至R2中的更新文件复制到R2中,并将R3中的所有更新文件以及目标文件删除。
本实施例中,预设的加载函数为windows系统自带的LoadLibrary函数。
本实施例中,对更新文件执行预加载操作具有以下有益效果:
第一,更新文件采用首先加载至R2中,如果更新文件不存在问题,那么可以直接释放至R2,无须先替换R1中的DLL文件A;如果先替换R1中的DLL文件A,后续加载过程中一旦发现更新文件存在问题,那么,需要重新找回原来的DLL文件,一方面,找回原来的DLL文件耗时较长;另一方面,如果无法找回原来的DLL文件,那么将导致目标程序无法启动;而实际操作中,更新文件出现问题的概率较小,因此,该方法能够提高DLL文件的加载速度。
第二,更新文件采用首先加载至R2中,根据更新文件是否能够成功加载至R2,来验证各个更新文件,将有问题的更新文件预先删除,避免后续过程使用到有问题的更新文件,而导致目标程序运行出错。
本实施例中,所述目标程序通过所述DLL文件B中的调用函数g调用功能函数g’;其中,g’为与DLL文件B对应的DLL文件A的功能函数, g的输入输出参数与g’的输入输出参数相同;调用函数为GetProcAddress函数。
采用一个DLL文件B对应于多个DLL文件A的结构,在对各个DLL文件A中的功能函数调用时,只需要访问DLL文件B中的相应的调用函数即可,无须在各个DLL文件A之间频繁切换,提高目标程序整体的运行效率。
在本申请的一种示例性实施例中,所述目标设备中存储有q个DLL文件B,每一个DLL文件B都对应一个DLL文件A集L’,L’中至少包含一个DLL文件A,仅在其中一个DLL文件B中包含更新检测函数,且该DLL文件B包含与其对应的L’中各DLL文件A的功能函数对应的调用函数;其余的各DLL文件B只包含与其对应的L’中各DLL文件A的功能函数对应的调用函数,且每一调用函数的输入输出参数与其对应的功能函数的输入输出参数相同。
该种方式具有以下效果:
对于数量较多的DLL文件A,将预设数量的DLL文件A分为q个L’,关联至每一个DLL文件B,由DLL文件B通过调用函数统一调用其关联的DLL文件A中的功能函数,无须在各个DLL文件A之间频繁切换,提高目标程序整体的运行效率;而将更新检测函数封装至其中一个DLL文件B中,在执行更新检测时,只需要访问一个DLL文件B即可完成所有DLL文件A的更新操作;而如果将更新检测函数封装至多个DLL文件B中,那么,在执行DLL文件A的更新时,需要多个DLL文件B同时执行,占用资源较多;因此,将更新检测函数封装至一个DLL文件B中,能够提高DLL文件A更新的执行效率。
本申请中,所述的方法步骤适用于程序开发阶段,目标设备为测试人员所使用的用于测试程序性能的测试设备,由测试人员所使用;而服务器上的更新文件的上传是由本申请方法的开发人员负责。
此外,尽管在附图中以特定顺序描述了本公开中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
本发明的实施例还提供了一种非瞬时性计算机可读存储介质,该存储介质可设置于电子设备之中以保存用于实现方法实施例中一种方法相关的至少一条指令或至少一段程序,该至少一条指令或该至少一段程序由该处理器加载并执行以实现上述实施例提供的方法。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本申请操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
本发明的实施例还提供了一种电子设备,包括处理器和前述的非瞬时性计算机可读存储介质。
根据本申请的这种实施方式的电子设备。电子设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
电子设备以通用计算设备的形式表现。电子设备的组件可以包括但不限于:上述至少一个处理器、上述至少一个储存器、连接不同系统组件(包括储存器和处理器)的总线。
其中,所述储存器存储有程序代码,所述程序代码可以被所述处理器执行,使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本申请各种示例性实施方式的步骤。
储存器可以包括易失性储存器形式的可读介质,例如随机存取储存器(RAM)和/或高速缓存储存器,还可以进一步包括只读储存器(ROM)。
储存器还可以包括具有一组(至少一个)程序模块的程序/实用工具,这样的程序模块包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线可以为表示几类总线结构中的一种或多种,包括储存器总线或者储存器控制器、外围总线、图形加速端口、处理器或者使用多种总线结构中的任意总线结构的局域总线。
电子设备也可以与一个或多个外部设备(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备交互的设备通信,和/或与使得该电子设备能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口进行。并且,电子设备还可以通过网络适配器与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。网络适配器通过总线与电子设备的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理器、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开实施方式的方法。
本发明的实施例还提供一种计算机程序产品,其包括程序代码,当所述程序产品在电子设备上运行时,所述程序代码用于使该电子设备执行本说明书上述描述的根据本发明各种示例性实施方式的方法中的步骤。
虽然已经通过示例对本发明的一些特定实施例进行了详细说明,但是本领域的技术人员应该理解,以上示例仅是为了进行说明,而不是为了限制本发明的范围。本领域的技术人员还应理解,可以对实施例进行多种修改而不脱离本发明的范围和精神。本发明开的范围由所附权利要求来限定。
Claims (7)
1.一种动态链接库升级方法,其特征在于,应用于目标程序,所述目标程序安装于目标设备中,所述目标设备中存储有所述目标设备对应的DLL文件A集L=(a1,a2,…,am,…,an)和DLL文件B;其中,m=1,2,…,n;am为第m个DLL文件A,n为DLL文件A的数量;L和B存储于第一预设存储空间R1,am中包括至少一个功能函数,所述DLL文件B中包含更新检测函数,以及am中每一功能函数对应的调用函数,且每一调用函数的输入输出参数与其对应的功能函数的输入输出参数相同;
所述动态链接库升级方法,包括以下步骤:
S100,响应于获取到的启动指令,通过预设的加载函数,将DLL文件B加载至内存空间R2;若DLL文件B加载失败,则终止所述目标程序的启动;若DLL文件B加载成功,则执行步骤S200;
S200,在所述DLL文件B加载完成后,触发所述DLL文件B的更新检测函数;
S300,将L中的各DLL文件A加载至内存空间R2;
所述更新检测函数用于执行以下步骤:
S210,确定第二预设存储空间R3中是否存在目标文件,若存在,则执行步骤S220;否则,执行步骤S300;R3中存在所述目标文件表示R3中包含至少一个更新文件,所述更新文件在L中具有与其对应的DLL文件A,且每一更新文件的文件名与其对应的DLL文件A的文件名相同;
S220,使用每一更新文件对L中与更新文件的文件名相同的DLL文件A进行替换,以完成L的更新,并执行步骤S300;
步骤S220包括:
S221,将每一更新文件加载至R2;
S222,将加载成功的更新文件从R2释放,并将加载失败的更新文件删除;
S223,使用加载成功的更新文件对L中对应的DLL文件A进行替换;其中,被替换的DLL文件A的文件名与其对应的更新文件的文件名相同;
在步骤S210之前,所述更新检测函数还用于执行以下步骤:
S230,向服务器发送更新查询请求;所述更新查询请求用于查询服务器上是否存在所述更新文件;
S240,接收来自服务器返回的更新文件标识S1,若S1=0,则执行步骤S210或跳出当前处理;若S1=1,则执行步骤S250;
S250,接收来自服务器返回的更新文件下载地址;
S260,根据所述更新文件下载地址建立更新文件下载线程;
若j≤k,则建立一个更新文件下载线程下载所有的更新文件;其中,j为更新文件的数量,k为预设的单个线程下载更新文件最大数量阈值;
若j>k,则建立d+1个更新文件下载线程同时下载所有的更新文件;其中,d为j/k取整数;
S270,通过所述更新文件下载线程将所述更新文件下载至R3,并在R3中生成所述目标文件。
2.根据权利要求1所述的动态链接库升级方法,其特征在于,所述目标程序通过所述DLL文件B中的调用函数g调用功能函数g’;其中,g’为与DLL文件B对应的DLL文件A的功能函数,g的输入输出参数与g’的输入输出参数相同。
3.根据权利要求1所述的动态链接库升级方法,其特征在于,所述目标设备中存储有q个DLL文件B,每一个DLL文件B都对应一个DLL文件A集L’,L’中至少包含一个DLL文件A,仅在其中一个DLL文件B中包含更新检测函数,且该DLL文件B包含与其对应的L’中各DLL文件A的功能函数对应的调用函数;其余的各DLL文件B只包含与其对应的L’中各DLL文件A的功能函数对应的调用函数,且每一调用函数的输入输出参数与其对应的功能函数的输入输出参数相同。
4.根据权利要求1所述的动态链接库升级方法,其特征在于,所述预设的加载函数为LoadLibrary函数。
5.根据权利要求1所述的动态链接库升级方法,其特征在于,所述调用函数为GetProcAddress函数。
6.一种非瞬时性计算机可读存储介质,所述存储介质中存储有至少一条指令或至少一段程序,所述至少一条指令或所述至少一段程序由处理器加载并执行以实现如权利要求1-5中任意一项的所述的动态链接库升级方法。
7.一种电子设备,其特征在于,包括处理器和权利要求6中所述的非瞬时性计算机可读存储介质。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310675051.3A CN116400945B (zh) | 2023-06-08 | 2023-06-08 | 一种动态链接库升级方法、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310675051.3A CN116400945B (zh) | 2023-06-08 | 2023-06-08 | 一种动态链接库升级方法、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116400945A CN116400945A (zh) | 2023-07-07 |
CN116400945B true CN116400945B (zh) | 2023-10-27 |
Family
ID=87014630
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310675051.3A Active CN116400945B (zh) | 2023-06-08 | 2023-06-08 | 一种动态链接库升级方法、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116400945B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012086948A2 (ko) * | 2010-12-21 | 2012-06-28 | 현대중공업 주식회사 | 에이엠 캐드용 디엘엘의 실시간 로딩 사용방법 |
CN110275722A (zh) * | 2019-06-21 | 2019-09-24 | 北京百度网讯科技有限公司 | 用于升级应用的方法、装置、设备和存储介质 |
CN110471690A (zh) * | 2019-06-25 | 2019-11-19 | 珠海格力电器股份有限公司 | 动态链接库so文件的加载方法、装置及存储介质 |
CN113419766A (zh) * | 2021-07-21 | 2021-09-21 | 厦门市易联众易惠科技有限公司 | 智能更新程序逻辑的方法、装置、设备及存储介质 |
CN115640037A (zh) * | 2022-09-09 | 2023-01-24 | 北京畅游创想软件技术有限公司 | 程序更新方法和装置 |
-
2023
- 2023-06-08 CN CN202310675051.3A patent/CN116400945B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012086948A2 (ko) * | 2010-12-21 | 2012-06-28 | 현대중공업 주식회사 | 에이엠 캐드용 디엘엘의 실시간 로딩 사용방법 |
CN110275722A (zh) * | 2019-06-21 | 2019-09-24 | 北京百度网讯科技有限公司 | 用于升级应用的方法、装置、设备和存储介质 |
CN110471690A (zh) * | 2019-06-25 | 2019-11-19 | 珠海格力电器股份有限公司 | 动态链接库so文件的加载方法、装置及存储介质 |
CN113419766A (zh) * | 2021-07-21 | 2021-09-21 | 厦门市易联众易惠科技有限公司 | 智能更新程序逻辑的方法、装置、设备及存储介质 |
CN115640037A (zh) * | 2022-09-09 | 2023-01-24 | 北京畅游创想软件技术有限公司 | 程序更新方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN116400945A (zh) | 2023-07-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108399132B (zh) | 一种调度测试方法、装置及存储介质 | |
US7207047B2 (en) | System and method for recovering applications | |
JPWO2009078285A1 (ja) | 無線端末、無線端末の不揮発性メモリ、および診断情報のフェイルセーフ保存方法 | |
CN110851204B (zh) | 应用启动的方法及装置、应用打包的方法及装置 | |
CN113050984A (zh) | 资源调取方法、装置、电子设备及存储介质 | |
CN113986402A (zh) | 函数调用方法、装置、电子设备及存储介质 | |
CN114860327B (zh) | 一种安卓兼容环境中安卓应用的快速启动方法 | |
CN110765394A (zh) | so文件加载方法、装置、存储介质及终端设备 | |
CN116400945B (zh) | 一种动态链接库升级方法、电子设备及存储介质 | |
CN113127329B (zh) | 脚本调试方法、装置及计算机存储介质 | |
CN114490103A (zh) | 一种操作系统接口调用方法、装置以及电子设备 | |
CN111352644A (zh) | 小程序更新方法、装置、服务器及存储介质 | |
CN112486517B (zh) | 应用程序的安装方法、系统、电子设备及存储介质 | |
CN116382713A (zh) | 构建应用镜像的方法、系统、设备和存储介质 | |
CN112947956B (zh) | 一种应用软件升级方法 | |
CN113986744A (zh) | 一种分库分表组件的测试方法、装置及存储介质 | |
CN114510334A (zh) | 类实例的调用方法、装置、电子设备及自动驾驶车辆 | |
CN113515299A (zh) | 软件开发工具包sdk热升级方法、装置、设备及存储介质 | |
CN112612474A (zh) | 产品移植方法、装置、存储介质和电子设备 | |
CN108023966B (zh) | 通用网关接口请求处理方法、设备和存储介质 | |
KR20200084294A (ko) | 핫스팟 추출을 이용하여 코드 블록을 탐색하는 운용 서버 및 이를 포함하는 운용 플랫폼 시스템 | |
US20040216140A1 (en) | Method and system for accessing system operations through an interface layer | |
CN112486421B (zh) | 一种数据存储方法、装置、电子设备及存储介质 | |
CN116382796B (zh) | 一种h5小程序运行器的插件管理方法、装置及电子设备 | |
CN114253615B (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 |