一种软件安装的检测方法和装置 【技术领域】
本发明涉及计算机技术领域,特别涉及一种软件安装的检测方法和装置。
背景技术
随着计算机技术的发展,客户端软件越来越多,遍及即时通信、音视频播放、资源下载、网页浏览、输入法、系统辅助等各个门类。随着互联网的普及,客户端软件已经从十年前通过光盘分发为主的方式,转变成通过网络下载为主的方式,这大大方便了用户获取客户端软件。同时,客户端软件的版本升级速度也从十年前的半年或者一年一次,变成了现如今的每月一次甚至几天一次。客户端软件的更新版本会增加新功能,并解决旧版本中的缺陷和漏洞,用户使用最新版本可以体验最新功能,并避免软件的已知漏洞对电脑带来的安全威胁。因此,目前有软件管理器相关的应用程序,可以让用户获取已装客户端软件的升级版本。在软件管理器中,一个基础且核心的功能就是如何准确的检测用户机器上某一款软件是否安装,并获得其版本号,从而判断该软件是否需要升级等。
在现有技术中,软件管理器可以利用如下技术进行软件是否安装的检测:例如图1所示的Windows的添加删除程序中,各个已安装的软件及其版本信息都是从注册表的
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall下的键值扫描获取的。参见图2,扫描获取到软件名称为QQ2009已安装,且该软件的版本为1.41.1451.0。
在实现本发明的过程中,发明人发现现有技术至少存在以下缺点:
由于现有技术中软件安装的检测只会检测注册表的Uninstall节点下的软件,对于没有正常注册到系统中的软件、或者注册表信息被部分破坏、或者绿色软件等都不能正常的检查;另外,注册表Uninstall节点下软件版本号的格式可能会不规范,不适合与软件升级版本的对比等,导致现有的软件安装的检测技术方式单一、进而容易出现误判、适应性不好等问题。
【发明内容】
为了准确地检测出软件是否已经安装到计算机中,本发明实施例提供了一种软件安装的检测方法和装置。所述技术方案如下:
一种软件安装的检测方法,所述方法包括:
在客户端保存的检测策略文件中获得待检测软件及其对应的检测策略,所述待检测软件对应的检测策略至少为一条;
根据所述待检测软件的检测策略判定所述待检测软件是否已安装。
所述检测策略文件的获得方法包括:服务器为其搜集到的软件分配的ID和配置的检测策略;将所述ID及其对应的检测策略发送至所述客户端;所述客户端将接收到的ID及其对应的检测策略保存在检测策略文件中。
所述根据所述待检测软件的检测策略判定所述待检测软件是否已安装,具体包括:
根据所述待检测软件的检测策略,检测所述待检测软件的版本号;
如果检测到所述待检测软件的版本号,则判定所述待检测软件已安装;
如果未检测到所述待检测软件的版本号,则判定所述待检测软件为未安装。
所述检测策略至少包括:
获得待检测软件的指定PE文件,从所述指定PE文件的属性中获得所述待检测软件的版本号;
和/或
从注册表中获得所述待检测软件的版本号。
所述获得待检测软件的指定PE文件,具体包括:
通过注册表获取所述待检测软件的安装路径,并根据所述安装路径获得所述待检测软件地指定PE文件;
或
根据所述待检测软件的快捷方式获得所述待检测软件的安装路径,并根据所述安装路径获得所述待检测软件的指定PE文件。
所述从注册表中获得所述待检测软件的版本号,具体包括:
获取注册表中本地计算机和CurrentUser下的卸载节点的版本号的值。
当所述检测策略为多条时,所述根据所述待检测软件的检测策略,检测所述待检测软件的版本号,具体包括:
在所述待检测软件的多条检测策略中,获得一条未被执行过的检测策略作为当前检测策略,并根据所述当前检测策略检测所述待检测软件的版本号;
如果无法获得未被执行过的检测策略作为当前检测策略,则检测结果为未检测到所述待检测软件的版本号。
当判定所述待检测软件已安装时,输出所述版本号。
一种软件安装的检测装置,所述装置包括:
获得模块,用于在所述检测装置所在的客户端保存的检测策略文件中获得待检测软件及其对应的检测策略,所述待检测软件对应的检测策略至少为一条;
检测模块,用于根据所述获得模块获得的所述待检测软件的检测策略判定所述待检测软件是否已安装。
所述检测装置还包括:
检测策略文件获得模块,用于接收服务器下发的所述服务器为其搜集到的软件分配的ID和配置的检测策略,并将其保存在检测策略文件中。
所述检测模块具体包括:
版本号检测单元,用于根据所述获得模块获得的所述待检测软件的检测策略检测所述待检测软件的版本号;
判定单元,用于如果所述版本号检测单元的检测结果为检测到所述待检测软件的版本号,则判定所述待检测软件已安装;如果所述版本号检测单元的检测结果为未检测到所述待检测软件的版本号,则判定所述待检测软件为未安装。
当所述检测策略为多条时,所述版本号检测单元包括:
获得子单元,用于在所述待检测软件的多条检测策略中,获得一条未被执行过的检测策略作为当前检测策略;
检测子单元,用于根据所述获得子单元获得的当前检测策略检测所述待检测软件的版本号;
判定子单元,用于如果所述获得子单元无法获得未被执行过的检测策略作为当前检测策略,则检测结果为未检测到所述待检测软件的版本号。
所述装置还包括:
输出模块,用于当所述判定单元判定所述待检测软件已安装时,输出所述检测模块检测到的版本号。
本发明实施例提供的技术方案带来的有益效果是:
通过服务器统一发送软件及其对应的检测策略给客户端,并由客户端保存在检测策略文件中,客户端将检测策略文件中记录的每一个软件作为待检测软件,按照检测策略文件中针对该待检测软件所提供的检测策略进行检测,用以判定该待检测软件是否已安装,可以提供准确、可靠的软件安装的检测;同时,由服务器统一发送软件及其对应的检测策略给客户端,一个服务器可以为多个客户端发送上述信息,省去了客户端自行配置的时间,提高了软件安装的检测效率,避免了资源的浪费。
【附图说明】
图1是现有技术中Windows的添加删除程序的示意图;
图2是现有技术中Windows的添加删除程序的扫描位置的示意图;
图3是本发明实施例1中提供的软件安装的检测方法的流程图;
图4是本发明实施例2中提供的软件安装的检测方法的准备方法流程图;
图5是本发明实施例2中提供的软件主EXE的属性的示意图;
图6是本发明实施例2中提供的从注册表中获取软件安装路径的示意图;
图7是本发明实施例2中提供的通过快捷方式获取软件的安装路径的示意图;
图8是本发明实施例2中提供的通过注册表Uninstall节点中获取软件的版本号的示意图;
图9是本发明实施例2中提供的从注册表其他路径中获取软件的版本号的示意图;
图10是本发明实施例2中提供的软件安装的检测方法的流程图;
图11是本发明实施例3中提供的软件安装的检测装置的结构示意图。
【具体实施方式】
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例1
为了更加准确地检测出已安装的软件及其版本信息,本发明实施例提供了一种软件安装的检测方法,参见图3,该方案包括:
301:在客户端保存的检测策略文件中获得待检测软件及其对应的检测策略,其中,待检测软件对应的检测策略至少为一条;
其中,检测策略文件的获得方法包括:服务器为其搜集到的软件分配的ID和配置的检测策略;将上述ID及其对应的检测策略发送至客户端;客户端将接收到的ID及其对应的检测策略保存为检测策略文件。
302:根据待检测软件的检测策略,判定该待检测软件是否已安装;
其中,步骤302具体可以为:根据待检测软件的检测策略,检测待检测软件的版本号;
如果检测到待检测软件的版本号,则判定待检测软件已安装;
如果未检测到待检测软件的版本号,则判定待检测软件为未安装。
其中,待检测软件的检测策略至少可以包括:
获得待检测软件的指定PE文件,从指定PE文件的属性中获得该待检测软件的版本号;
和/或,从注册表中获得待检测软件的版本号。
具体的,获得待检测软件的指定PE文件,具体包括:
通过注册表获取待检测软件的安装路径,并根据安装路径获得待检测软件的指定PE文件;或
获得待检测软件的快捷方式,在快捷方式的属性中获得待检测软件的安装路径,并根据安装路径获得待检测软件的指定PE文件。
具体的,从注册表中获得待检测软件的版本号,具体包括:
获取注册表中LocalMachine(本地计算机)和CurrentUser(当前用户)下的Uninstall(卸载)节点的DisplayVersion(版本号)的值。
需要说明的是,当检测策略为多条时,步骤302具体包括:
在待检测软件的多条检测策略中,获得一条未被执行过的检测策略作为当前检测策略,并根据当前检测策略检测待检测软件的版本号;
如果无法获得未被执行过的检测策略作为当前检测策略,则检测结果为未检测到待检测软件的版本号。
其中,当判定待检测软件已安装时,输出所述版本号。
本发明实施例提供了一种软件安装的检测方法,通过服务器统一发送软件及其对应的检测策略给客户端,并由客户端保存在检测策略文件中,客户端将检测策略文件中记录的每一个软件作为待检测软件,按照检测策略文件中针对该待检测软件所提供的检测策略进行检测,用以判定该待检测软件是否已安装,可以提供准确、可靠的软件安装的检测;同时,由服务器统一发送软件及其对应的检测策略给客户端,一个服务器可以为多个客户端发送上述信息,省去了客户端自行配置的时间,提高了软件安装的检测效率,避免了资源的浪费;并且,对于每一个待检测软件都提供了至少一种的检测策略,丰富了软件管理器对于软件安装的检测选择。
实施例2
为了更加准确地检测出已安装的软件及其版本信息,本发明实施例提供了一种软件安装的检测方法,以常用的软件管理器作为执行主体为例进行说明,但并不用以限制本发明的保护范围。具体的,该方法可以包括准备工作部分和方法实体部分。
参见图4,首先介绍准备工作部分:
401:软件管理器服务器搜集各类软件的相关信息;
其中,搜集过程可以通过网络渠道进行、也可以通过各个服务器之间相互交换信息等方式进行。
进一步的,服务器的搜集过程可以是定时的或者事件触发的,这样做的好处在于,一旦某一软件发布了一个新的版本,或者软件新版本的注册表位置与老版本的不同,或者新出了一种软件或者消失了一种软件等软件的检测策略就有可能发生变化,而服务器就可以及时地搜集到上述信息。例如,设定服务器每隔一天(或者其他)的某一固定时间搜集上述信息、或者服务器的操作人员触发搜集软件功能等。
402:服务器为每一个搜集到的软件分配ID号并保存;
为每一个搜集到的软件所分配的ID号码在服务器(或服务器系统)中是可以唯一标识一个软件。分配的ID号码可以是数字、字母、符号、或者上述一种或几种的组合等。
服务器分配ID号的过程可以是人工操作、也可以是服务器自动执行的。
需要说明的是,步骤402和步骤403的执行顺序可以进行交换,或同时进行。
403:为每一个搜集到的软件提供其相应的检测策略;
需要说明的是,对于软件安装的检测,实际是为了检测计算机上所安装的软件及其版本号,所以,提供软件相应的检测策略即可以认为是提供如何检测出计算机上所安装的软件,并提供如何检测出软件的版本号。由于在本发明实施例中,如何检测出计算机上所安装的软件是由软件管理器所在的客户端去完成的,因此,在本步骤403中,提供软件相应的检测策略即为提供如何检测软件的版本号。
具体的检测策略可以依据不同的软件进行提供,这里以几种简便的检测策略为例进行说明,但不用以限制本发明的保护范围。
1、参见图5,可以通过软件的指定PE文件获得软件的版本号:
其中,对于指定PE文件需要说明的是,PE文件指的是软件的EXE(可执行)文件或DLL(动态链接库)文件等文件。指定的PE文件适用于一个软件包含多个EXE文件或DLL文件的情况,服务器会在下发的检测策略中对获得软件的版本号的PE文件进行指定。
其中,一般软件的PE文件的属性中都会有一项为此款软件的版本,因此,可以通过获得软件的指定PE文件的存储路径,并从指定PE文件的属性中获得软件的版本号。
具体的,获取软件的指定PE文件(以软件的主EXE为例)的存储路径可以包括:
(1)通过注册表获取主EXE的存储路径
由于注册表中可能含有软件的安装路径,如图6所示,如果能够在注册表中获取到软件的安装路径,则可以根据安装路径获得软件的主EXE文件的存储路径。
(2)通过快捷方式获取
由于可以通过快捷方式的属性定位到软件的主EXE路径,如图7所示,所以可以直接通过快捷方式获取软件的主EXE的存储路径。
其中,需要说明的是,软件的主EXE的快捷方式的位置,包括但不限于如下几个:
a)开始-程序菜单快捷方式,当前用户下
b)开始-程序菜单快捷方式,所有用户下
c)桌面快捷方式,当前用户下
d)桌面快捷方式,所有用户下
e)快速启动栏快捷方式,当前用户下
f)快速启动栏快捷方式,所有用户下
当然,通过快捷方式获得软件的主EXE存储路径还可以支持:相对快捷方式文件相对路径合成。
2、可以通过注册表获得软件的版本号
(1)如图8所示,获取注册表中LocalMachine和CurrentUser下的Uninstall节点的DisplayVersion的值,注册表路径为:
HKEY_LOCAL_MACHINE\Software\Microsoft\WindoWs\CurrentVersion\Uninstall
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall
(2)如图9所示,根据不同软件的不同设置,获取注册表的其他路径中包含的软件版本号的信息,例如:
HKEY_LOCAL_MACHINE\SOFTWARE\TENCENT\QQDownload\\Version
即注册表路径为
HKEY_LOCAL_MACHINE\SOFTWARE\TENCENT\QQDownload下键名为Version中获取软件版本号的信息。
3、根据软件的不同,可以在软件的安装目录下的某数据文件中,获取软件的版本号
404:服务器将软件ID号及其对应的检测策略下发给各个软件管理器所在的客户端;
其中,首次下发时,可以利用通知消息或其它常用的消息体将上述信息发送给各个软件管理器所在的客户端;非首次下发时,可以通过更新消息或其它常用的消息体将上述信息下发给各个软件管理器所在客户端。在非首次下发时,需要说明的是,可以选择采用全量更新或者增量更新的方式下发上述信息。
例如,在非首次下发的情况下,服务器默认客户端已经具有其最近一次下发时的数据,则,服务器可以采用增量更新的方式,将最近一次下发的数据中没有包括的数据、或者发生变化的数据下发给客户端,而未发生变化的数据不下发给客户端;或者,服务器可以采用全量更新的方式,将全部(包括发生变化的和未发生变化的)数据下发给客户端。
数据的下发时间可以是定时的,也可以是即时的。定时的情况可以是每隔一天(或者其他)的固定时间将上述数据进行下发,即时的情况可以是在服务器每搜集到新的软件、或软件的新版本版本、或软件的任何变化而导致的检测策略的配置发生变化时,即开始进行数据的下发。下发的数据可以被客户端解释并执行。
其中,服务器下发给客户端的数据可以通过xml结构进行表示。
405:客户端接收到服务器下发的软件ID及其检测策略,对其进行解释和保存。
需要说明的是,客户端接收到服务器下发的软件ID号及其对应的检测策略,使用一个数据文件来保存上述数据,本实施例中将该数据文件称之为检测策略文件(或者,特征库文件)。之所以使用数据文件保存软件ID号及其对应的检测策略,而不是硬编码在软件管理器的程序代码中,是因为软件的检测策略可能会是实时更新的,如果硬编码在程序代码中,就需要修改软件管理器的程序代码,而数据文件修改起来非常方便快捷、而且可以保存多种软件的多种检测策略。客户端保存的检测策略文件的基本结构可以如表1所示,其中,需要说明的是,检测策略文件中,依次描述针对每一款软件进行配置的检测策略,每一款软件的检测策略可以包括一种或多种。
表1
软件ID1: 策略1 策略2 策略3...... 软件ID2: 策略1 策略2 策略3...... ......
以客户端接收到服务器下发的数据,解析出软件ID及检测策略,并保存在检测策略文件中为例,可以参考表2所示的检测策略文件,仅供说明方便之用,不用以做实际文件的参考。
表2
软件ID1(QQ2009): 策略1:到注册表的路径为 HKEY_LOCAL_MACHINE\S oftware\Microsoft\Windows\CurrentVersion\Uninstal 1\{052CFB79-9D62-42E3-8A15-DE66C2C97C3E}文件夹下获得键名为 InstallLocation对应的值,该值对应着QQ2009的安装路径,到QQ2009安装路径 的文件夹bin下获得QQ2009的指定PE文件QQ.exe,并从QQ.exe的属性中获得软 件的版本号; 策略2:找到腾讯软件\QQ2009\腾讯QQ2009.lnk的快捷方式,并根据快捷方式中 的属性获得软件的安装路径,并根据安装路径获得指定的PE文件QQ.exe,并从 QQ.exe的属性中获得软件的版本号。 软件ID2(QQ影音): 策略1:到注册表的路径 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall 下的文件夹QQPlayer获得键名为DisplayIcon对应的值,该值对应着QQ影音的安 装路径,到QQ影音的安装路径下获得软件的指定PE文件QQ影音.exe,并从QQ 影音.exe的属性中获得软件的版本号; 策略2:找到腾讯软件\QQ影音\QQ影音.lnk的快捷方式,并根据快捷方式中的属 性获得软件的安装路径,并根据安装路径获得指定的PE文件QQ影音.exe,并从 QQ影音.exe的属性中获得软件的版本号; 策略3:找到Tencent\QQPlayer\QQPlayer.lnk的快捷方式,并根据快捷方式中的属 性获得软件的安装路径,并根据安装路径获得指定的PE文件QQPlayer.exe,并从 QQPlayer.exe的属性中获得软件的版本号; 策略4:到注册表的路径为HKEY_LOCAL_MACHINE的文件夹SOFTWARE下的 文件夹TENCENT下的文件夹QQPlayer下获得键名为Version的值,该键值对应着 QQ影音的版本号。
在步骤401至步骤405作为本方法的准备工作部分的前提下,本发明实施例提供的软件检测的方法的根本目的即为:为其检测策略文件中的每一个软件检测出软件名称及其版本号。由于在流程上每一个软件的检测方法均是类似的,故在本实施例中,以检测策略文件中的任一个软件的检测为例进行本方法的说明。参见图10,本实施例提供的软件安装的检测方法具体可以包括:
1001:客户端的软件管理器接收到软件检测的触发信号;
其中,软件检测的触发信号可以但不限于包括:软件管理器检测到软件启动运行、用户启动软件检测功能、软件管理器检测到定时检测软件的时间到、检测策略文件中的某一个(非最后一个)软件执行完检测等。
1002:软件管理器在检测策略文件中获得待检测软件ID所对应的未被执行的一条检测策略,并根据获得的检测策略对该待检测软件是否已安装进行检测;
例如,以步骤405中给出的表2为例,将软件ID2所代表的QQ影音软件作为待检测软件为例,软件管理器获得ID2所对应的未被执行的检测策略,如策略1,根据策略1,到注册表中路径为
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall下的文件夹QQPlayer下获取键名为DisplayIcon的值,通过该键值获得ID2软件的主exe,并从主exe的属性中获得软件的版本号。
其中,需要说明的是,未被执行的检测策略可以是软件管理器按照检测策略文件的保存顺序逐个获得,也可以是软件管理器从中随机获取的。
1003:判断是否检测到该待检测软件的版本号;
如果是,则执行步骤1006;
如果否,则执行步骤1004。
1004:判断检测策略文件中该待检测软件是否还有检测策略没有被执行;
如果是,则执行步骤1002;
如果否,则执行步骤1005。
1005:检测完毕,判定该待检测软件为未安装软件;
1006:检测完毕,判定该待检测软件为已安装软件,版本号为步骤1002中获得的版本号。
需要说明的是,软件管理器可以对于检测策略文件中保存的每一个软件执行上述步骤1001至步骤1006所示的方法,本发明不做赘述。
还需要说明的是,步骤1005和步骤1006均存在一个特例。
其中,步骤1005的特例即为:软件管理器没有检测到软件的版本号,但软件确实已经安装到了客户端,为了克服上述特例的问题,本实施例的步骤1005可以表示为:
判断该待检测软件的指定PE文件是否存在;
如果存在,则检测完毕,判定该待检测软件为已安装软件,版本号采用自定义的形式,如0.0.0.0等等;
如果不存在,则检测完毕,判定该待检测软件为未安装软件。
步骤1006中存在一个特例,即软件管理器检测到软件的版本号,但该版本号可能是由于某些特殊操作(如删除软件时发生错误)而遗留下的版本号,为了克服上述特例的问题,本实施例的步骤1006可以表示为:
判断该待检测软件的指定PE文件是否存在;
如果存在,则检测完毕,判定该待检测软件为已安装软件,版本号为步骤1002中获得的版本号;
如果不存在,则检测完毕,判定该待检测软件为未安装软件。
本发明实施例提供了一种软件安装的检测方法,通过服务器统一发送软件及其对应的检测策略给客户端,并由客户端保存在检测策略文件中,客户端将检测策略文件中记录的每一个软件作为待检测软件,按照检测策略文件中针对该待检测软件所提供的检测策略进行检测,用以判定该待检测软件是否已安装,可以提供准确、可靠的软件安装的检测;同时,由服务器统一发送软件及其对应的检测策略给客户端,一个服务器可以为多个客户端发送上述信息,省去了客户端自行配置的时间,提高了软件安装的检测效率,避免了资源的浪费;并且,对于每一个待检测软件都提供了至少一种的检测策略,丰富了软件管理器对于软件安装的检测选择。
实施例3
参见图11,本发明实施例提供了一种软件安装的检测装置,需要说明的是,该检测装置的工作方法可以参见实施例1和实施例2中提供的方法部分,此处不做赘述。该装置包括:
获得模块1101,用于在检测装置所在的客户端保存的检测策略文件中获得待检测软件及其对应的检测策略,其中,待检测软件对应的检测策略至少为一条;
检测模块1102,用于根据获得模块1101获得的待检测软件的检测策略,判断待检测软件是否已安装。
进一步的,检测装置还包括:
检测策略文件获得模块,用于接收服务器下发的服务器为其搜集到的软件分配的ID和配置的检测策略,并将其保存在检测策略文件中。
其中,检测模块1102具体包括:
版本号检测单元,用于根据获得模块1101获得的待检测软件的检测策略检测待检测软件的版本号;
判定单元,用于如果版本号检测单元的检测结果为检测到待检测软件的版本号,则判定待检测软件已安装;如果版本号检测单元的检测结果为未检测到待检测软件的版本号,则判定待检测软件为未安装。
其中,当检测策略为多条时,版本号检测单元包括:
获得子单元,用于在待检测软件的多条检测策略中,获得一条未被执行过的检测策略作为当前检测策略;
检测子单元,用于根据获得子单元获得的当前检测策略检测待检测软件的版本号;
判定子单元,用于如果获得子单元无法获得未被执行过的检测策略作为当前检测策略,则检测结果为未检测到待检测软件的版本号。
进一步的,检测装置还包括:
输出模块,用于当判定单元判定待检测软件已安装时,输出版本号检测单元检测到的版本号。
本发明实施例提供了一种软件安装的检测装置,通过服务器统一发送软件及其对应的检测策略给客户端,并由客户端保存在检测策略文件中,客户端将检测策略文件中记录的每一个软件作为待检测软件,按照检测策略文件中针对该待检测软件所提供的检测策略进行检测,用以判定该待检测软件是否已安装,可以提供准确、可靠的软件安装的检测;同时,由服务器统一发送软件及其对应的检测策略给客户端,一个服务器可以为多个客户端发送上述信息,省去了客户端自行配置的时间,提高了软件安装的检测效率,避免了资源的浪费;并且,对于每一个待检测软件都提供了至少一种的检测策略,丰富了软件管理器对于软件安装的检测选择。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。