一种实现PC客户端软件实时修复的方法及装置与流程

文档序号:12463846阅读:190来源:国知局
一种实现PC客户端软件实时修复的方法及装置与流程

本发明涉及软件修复/更新技术领域,具体来讲是一种实现PC(Personal Computer,个人计算机)客户端软件实时修复的方法及装置。



背景技术:

目前,对于PC客户端软件进行修复/更新的方法是从服务器下载一个最新的软件包来进行修复/更新操作。而一些更先进的修复/更新方案是对客户端软件的组件进行修复/更新,从而只需要修复/更新部分修改过的组件,对于没有改动的组件则不需要进行修复/更新。这样很大的减少了带宽,节约了网络流量,提高了用户修复/更新成功率,同时也减少了服务器下载软件的宽带负载。

但在实际使用中发现,现有的修复/更新方法依然存在以下缺陷:

(1)在某些情况下,PC客户端软件仅仅只更新了一个数据或者只更改了一个判断语句(此时只想修改客户端代码中的一个常量配置数据,或者说需要修改某个阈值等),因此只需要更新几个字节的数据即可,但如果按照现有的方法更新整个文件则可能需要消耗比较多的网络流量。

(2)当存在一种情况是用户已经在运行PC客户端软件,但需要修复/更新某个文件的某个数据。此时通常的做法是先让用户关闭客户端软件,再更新客户端软件,然后重新打开客户端软件。这一方式无疑会中断用户的当前操作,影响使用,从而导致用户体验较差。



技术实现要素:

本发明的目的是为了克服上述背景技术的不足,提供一种实现PC客户端软件实时修复的方法及装置,能对PC客户端软件的少量错误进行在线实时修复/更新,不但节省带宽、节约网络流量,而且无需关闭软件中断操作,提高了用户体验。

为达到以上目的,本发明提供一种实现PC客户端软件实时修复的方法,包括以下步骤:

步骤S1:服务器端获取PC客户端软件中出现错误的功能模块文件,将该功能模块文件与服务器端保存的相应的功能模块文件进行对比,找出差异数据并记录;

步骤S2:服务器端根据找出的差异数据,生成配置文件;

步骤S3:服务器端将生成的配置文件下发至PC客户端;

步骤S4:PC客户端根据服务器端发来的配置文件,动态修改PC客户端软件中相应功能模块的内存数据。

本发明还提供一种实现PC客户端软件实时修复的装置,包括设置于服务器端的功能模块文件对比单元、配置文件生成单元、配置文件下发单元;以及设置于PC客户端的内存数据修改单元;

所述功能模块文件对比单元用于:获取PC客户端软件中出现错误的功能模块文件,将该功能模块文件与服务器端保存的相应的功能模块文件进行对比,找出差异数据并记录;所述配置文件生成单元用于:根据功能模块文件对比单元找出的差异数据,生成配置文件;所述配置文件下发单元用于:将生成的配置文件下发至PC客户端;所述内存数据修改单元用于:根据服务器端发来的配置文件,动态修改PC客户端软件中相应功能模块的内存数据。

本发明的有益效果在于:

本发明中,服务器端能获取PC客户端软件中出现错误的功能模块文件,并将该功能模块文件与服务器端保存的相应的功能模块文件进行对比,找到其中的差异,然后将差异生成配置文件下发至PC客户端;PC客户端收到配置文件后,实现动态的修改客户端软件的内存代码数据,来达到实时修复/更新的目的。

与现有技术相比,本发明只需要对出现错误的功能模块文件中的几个字节(即差异数据)进行修复/更新,就可达到实时修复/更新的目的,特别适用于客户端出现错误需要紧急修复/更新,而服务器端又不想重新发布版本的时候。只需要非常小的几个字节改动(如更新某个配置数据或更新某个阈值数据等),即可修复软件,极大的减少了带宽,节约了网络流量。并且,本发明提供的方法可以在不关闭PC客户端软件的同时对PC客户端软件进行修复/更新,不会中断用户的当前操作,不影响使用,用户体验佳。

附图说明

图1为本发明实施例中实现PC客户端软件实时修复的方法的流程图;

图2为本发明实施例中实现PC客户端软件实时修复的装置的结构框图。

具体实施方式

下面结合附图及具体实施例对本发明作进一步的详细描述。

参见图1所示,本发明实施例提供一种实现PC客户端软件实时修复的方法,包括以下步骤:

步骤S1:当PC客户端软件出现错误需要紧急修复/更新,而服务器端又不想重新发布版本时,服务器端获取PC客户端软件中出现错误的功能模块文件,将该功能模块文件与服务器端保存的相应的功能模块文件进行对比,找出差异数据并记录。

可以理解的是,在将功能模块文件与服务器端保存的相应的功能模块文件进行对比时,可通过二进制文件对比工具来实现。该二进制文件对比工具可以使用第三方的二进制文件对比工具,也可以是开发人员自己编写的二进制文件对比工具,只需要分别读取2个功能模块文件,记录下2个文件不一样的地方即可。具体来说,步骤S1具体包括以下流程:

步骤S101:服务器端获取PC客户端软件中出现错误的功能模块文件,转入步骤S102。

步骤S102:通过二进制文件对比工具将该功能模块文件与服务器端保存的相应的功能模块文件进行对比,查找出两个文件的差异数据(即不一样的地方),转入步骤S103。

步骤S103:记录下差异数据的文件偏移地址FileOffset(相对于文件开始的偏移);并记录下服务器端保存的相应的功能模块文件中的差异数据NewData和差异数据长度。

步骤S2:服务器端根据找出的差异数据,生成配置文件。

可以理解的是,由于一个功能模块文件在磁盘中的文件内容对齐方式和内存中的文件对齐方式是不一样的,而配置文件在用户电脑上(即客户端上)是修改内存的数据,所以需要转换成内存的偏移。因此,服务器端获取到了差异数据的文件偏移地址后,需要将其转换成功能模块的内存偏移。转换方法如下:

(1)找到文件偏移所属功能模块的段的相对内存地址(功能模块文件的组织结构是由多个段组成,每个数据必定属于某个段,如代码段,数据段等)。

(2)根据内存偏移=该段的内存地址+(文件偏移-该段的文件偏移),得到差异数据的内存偏移;

其中,内存偏移就是实际需要修改的内存不一致的内存地址,即差异数据的内存偏移;

该段的内存地址是指实际需要修改的内存地址的段的地址,即文件偏移所属功能模块的段的相对内存地址;

文件偏移是指对比2个功能模块文件得到的文件差异,相对于文件开头的偏移,即差异数据的文件偏移地址;

该段的文件偏移是指文件偏移在该文件的段的偏移。

在上述基础上,实际操作时,步骤S2具体包括以下流程:

步骤S201:服务器端通过将记录的差异数据的文件偏移地址转换成功能模块的内存偏移,得到差异数据的内存偏移,转入步骤S202。具体转换操作见上文详述,此处不赘述。

步骤S202:根据得到的差异数据的内存偏移以及步骤S103中记录的差异数据NewData、差异数据长度,生成PC客户端需要的配置文件,该配置文件的内容包括:功能模块的文件名(即需要修改的模块的文件名)+差异数据的内存偏移(即需要修改的内存偏移)+差异数据长度(即需要修改的数据长度)+差异数据NewData(即需要修改的数据内容)。

步骤S3:服务器端将生成的配置文件下发至PC客户端。

步骤S4:PC客户端根据服务器端发来的配置文件,动态修改PC客户端软件中相应功能模块的内存数据。

具体来说,步骤S4具体包括以下流程:

步骤S401:PC客户端收到服务器端发来的配置文件后,解析出配置文件中的字段;并通过调用Windows的API(Application Programming Interface,应用编程接口)函数HMODULE=GetModuleHandle(“功能模块的文件名”),获取到需要修改的功能模块的内存地址HMODULE,其中,“功能模块的文件名”表示该函数传入的参数,转入步骤S402。

步骤S402:根据实际需要修改的内存地址=需要修改的功能模块的内存地址HMODULE+需要修改的内存偏移(即差异数据的内存偏移),得到实际需要修改的内存地址,转入步骤S403。

步骤S403:通过调用Windows的API函数VirtualProtect,将实际需要修改的内存地址的内存属性设置为可改写,转入步骤S404。

具体来说,调用的VirtualProtect函数具体为:

BOOL WINAPI VirtualProtect(LPVOID lpAddress,SIZE_T dwSize,DWORD flNewProtect,PDWORD lpflOldProtect);

其中,lpAddress填入得到的实际需要修改的内存地址;

dwSize填入需要修改的数据长度,即差异数据长度;

flNewProtect填入“PAGE_READWRITE”,用来设置为可改写;

lpflOldProtect用来保存内存块原先的内存属性。

步骤S404:待内存属性设置完成后,将服务器下发的差异数据拷贝到实际需要修改的内存地址处,即实现了对PC客户端软件的实时修复/更新。

步骤S405:待差异数据拷贝完成后,再次调用Windows的API函数VirtualProtect将设置的内存属性改回原来的内存属性值(即不可改写),结束。

参见图2所示,本发明实施例还提供一种实现PC客户端软件实时修复的装置,包括设置于服务器端的功能模块文件对比单元、配置文件生成单元、配置文件下发单元;以及设置于PC客户端的内存数据修改单元。

其中,功能模块文件对比单元用于:获取PC客户端软件中出现错误的功能模块文件,将该功能模块文件与服务器端保存的相应的功能模块文件进行对比,找出差异数据并记录。其具体流程为:获取PC客户端软件中出现错误的功能模块文件;通过二进制文件对比工具将该功能模块文件与服务器端保存的相应的功能模块文件进行对比,查找出两个文件的差异数据;记录下差异数据的文件偏移地址,并记录下服务器端保存的相应的功能模块文件中的差异数据和差异数据长度。

配置文件生成单元用于:根据功能模块文件对比单元找出的差异数据,生成配置文件。其具体流程为:将功能模块文件对比单元记录的差异数据的文件偏移地址转换为功能模块的内存偏移,得到差异数据的内存偏移;根据得到的差异数据的内存偏移以及功能模块文件对比单元记录的差异数据、差异数据长度,生成PC客户端需要的配置文件。

更进一步地,所述配置文件生成单元得到差异数据的内存偏移的具体流程为:找到文件偏移所属功能模块的段的相对内存地址;根据内存偏移=文件偏移所属功能模块的段的相对内存地址+(差异数据的文件偏移地址-文件偏移在该文件的段的偏移),得到差异数据的内存偏移。

配置文件下发单元用于:将生成的配置文件下发至PC客户端。

内存数据修改单元用于:根据服务器端发来的配置文件,动态修改PC客户端软件中相应功能模块的内存数据。其具体流程为:所述内存数据修改单元收到服务器端发来的配置文件后,解析出配置文件中的字段;并通过调用Windows的API函数HMODULE=GetModuleHandle(“功能模块的文件名”),获取到需要修改的功能模块的内存地址;根据实际需要修改的内存地址=需要修改的功能模块的内存地址+差异数据的内存偏移,得到实际需要修改的内存地址;通过调用Windows的API函数VirtualProtect,将实际需要修改的内存地址的内存属性设置为可改写;将服务器下发的差异数据拷贝到实际需要修改的内存地址处;再次调用Windows的API函数VirtualProtect,将设置的内存属性改回原来的内存属性值。

需要说明的是:上述实施例提供的装置在进行操作时,仅以上述各功能单元的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元完成,即将装置的内部结构划分成不同的功能单元,以完成以上描述的全部或者部分功能。

本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。

本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1