著录项信息
专利名称 | 一种基于智能客户端的按需下载实现方法 |
申请号 | CN200910230910.8 | 申请日期 | 2009-11-20 |
法律状态 | 暂无 | 申报国家 | 中国 |
公开/公告日 | 2010-06-02 | 公开/公告号 | CN101719073A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F9/445 | IPC分类号 | G;0;6;F;9;/;4;4;5;;;H;0;4;L;2;9;/;0;6;;;H;0;4;L;2;9;/;0;8查看分类表>
|
申请人 | 浪潮集团山东通用软件有限公司 | 申请人地址 | 山东省济南市浪潮路1036号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 浪潮通用软件有限公司 | 当前权利人 | 浪潮通用软件有限公司 |
发明人 | 王兴山;魏亮;黄伟 |
代理机构 | 暂无 | 代理人 | 暂无 |
摘要
本发明提供一种基于智能客户端的按需下载实现方法,旨在解决低速网络下的智能客户端程序更新问题,并且通过可配置的方式以功能为单位进行程序的更新。提供了可配置和可扩展的下载定义配置,应用程序可以根据实际情况灵活配置。客户端的下载更新过程完全自动化,无需人工干预。部署环节中加强了对异常的处理,发生异常之后,程序在下载启动时会自动更新。下载项可以在使用时下载,变相的降低了网络的流量,降低了新补丁对客户端的影响范围。
1.一种基于智能客户端的按需下载实现方法,其特征在于,通过下载定义、发布部署、下载更新三个部分实现智能客户端的按需下载;具体步骤如下:
1)下载定义
下载定义由下载项定义、下载单元定义和自更新下载项定义三部分组成;
下载项是对智能客户端程序中物理文件的描述,下载单元是对智能客户端中的功能使用到的下载项描述,下载项的结构如下:
下载项的配置信息最终以XML格式存储,并且需要部署到指定的目录下,使其生效;
在定义下载项时需要定义下载项的行为方式,下载项的行为方式是指下载项被下载到客户端之后,执行的动作,这些动作有注册GAC、Activex、COM+;
下载单元的配置信息最终以XML格式存储,并且需要部署到指定的目录下,使其生效;
客户端在下载更新时,下载的最小粒度是下载项,下载项被下载到客户端之后会记录下载项的版本,其它下载单元在下载时,由于下载项客户端版本与服务端版本一致,下载项不用下载,在下载项被多个下载单元引用的情况下,只更新一次;
下载单元包含的下载项被更新之后,会记录下载单元的版本,客户端在执行更新时判断下载单元在客户端与服务端记录的版本是否一致,如果一致下载单元就不需要更新,这样加快了检测更新的速度;
自更新下载项定义了在下载完成之后使用自更新方式进行部署更新的下载项;
2)发布部署
发布部署是生成下载项版本、下载单元版本信息以及下载包的过程,具体的步骤如下:
(1)把下载定义中定义好的下载项、下载单元配置文件部署到服务端指定目录,使其生效;
(2)把下载定义中定义的下载项物理文件部署到系统中,生成下载项版本信息,版本信息采用MD5散列值算法生成,文件的内容不发生变化,文件版本不变,客户端无需更新;
(3)根据下载项配置的“下载时文件名称”使用标准的压缩算法压缩下载项指定的物理文件,形成下载包,物理文件被压缩之后,客户端在下载物理文件时能有效的降低下载量;
(4)复制压缩的下载包到客户端访问到的http路径下,供客户端下载;
(5)在下载单元配置文件中查找所有引用此下载项的下载单元,并为下载单元生成版本信息;
3)下载更新
下载更新包含的组件有版本检测组件、下载组件、部署组件、自更新组件四部分;
步骤一:使用版本检测组件检测更新,客户端通过下载单元ID查找客户端下载单元的版本,并与服务端记录的下载单元版本比较,如果一致则返回为没有下载,如果不一致,从服务器获取所有的下载单元引用的下载项版本信息,并与客户端存储的下载项版本信息比较,如果不一致或者客户端不存在下载项,则记录此下载项需要下载,最后返回下载单元版本信息与需要下载的下载项版本列表,先判断下载单元版本和采用下载单元版本验证和下载项版本验证的双重验证方式,有利于提高版本判断的效率,缩短程序的响应时间;
步骤二:根据版本检测组件返回的结果,如果返回结果为空则说明不需要更新,如果返回下载单元版本和下载项版本列表信息,则启用下载组件执行下载项的下载;
步骤三:启动下载组件执行下载,下载时采用http请求的方式下载下载项中定义的下载文件,单个下载项下载完毕之后,会把下载项版本缓存到客户端临时文件中,待所有的下载项都被下载完毕之后,记录下载单元版本到客户端临时文件中;如果下载过程中出现失败,系统给出提示,由用户确认是否需要重新下载,如果选择否,退出下载,删除下载过程中生成的临时文件;下载项被成功下载之后,记录下载项版本,有利于在程序出现错误时,继续执行文件的更新,增强了程序的健壮性;
步骤四:判断下载的下载项是否存在于自更新下载项列表中,如果不存在,则执行步骤五启用部署组件,如果存在,则执行步骤六启用自更新组件;
步骤五:启动部署组件,下载组件执行完毕之后,使用标准的压缩算法为下载包解包,解包之后,文件的命名按照下载项中定义的文件名称命名,解包的文件存储到临时目录中,待所有的下载包解包完毕之后,根据客户端记录的临时的下载项版本找到下载项在客户端的更新路径和行为方式,如果存在行为方式,需要先执行历史文件的反行为方式,再执行文件的覆盖,最后执行新文件的行为方式;下载项部署更新成功之后,删除在客户端的临时下载项版本信息,并记录到客户端下载项版本信息中,当所有的下载项都更新完毕之后,记录下载单元版本信息到客户端下载单元版本中,并删除客户端的临时下载单元版本信息;如果部署过程中出现错误,系统会提示重启应用程序尝试执行部署,应用程序在重新启动时会首先判断在客户端的临时下载单元版本信息和客户端的临时下载项版本信息是否为空,如果不为空,启动部署组件,执行文件的部署;压缩下载包有利于降低文件在网络的传入量,增强了程序在低带宽下的适应能力;
步骤六:启动自更新组件,下载组件执行完毕之后,使用标准的压缩算法为下载包解包,解包之后,文件的命名按照下载项中定义的文件名称命名,当下载的下载项在自更新下载项列表中时,启动自更新组件,启动自更新组件时,需要关闭当前下载的主进程,并启动新的进程执行自更新,并且所述新的进程所在的程序集要保持独立,不能与版本检查组件、下载组件、部署组件存在直接的引用关系,文件的更新方式与步骤五相同;如果下载的下载项中包含了自更新组件本身使用的下载项,需要先执行自更新组件的部署和更新,然后启动自更新组件,更新程序与自更新程序的分离,能确保客户端所有文件都能够被更新。
2.根据权利要求1所述的方法,其特征在于,只要客户端与服务器端的下载项版本一致,物理文件就不需要更新,不同的下载单元应用相同的下载项时,客户端只更新一次下载项。
3.根据权利要求1所述的方法,其特征在于,根据获取的“下载项”列表获取服务器记录的下载项版本,返回到智能客户端,智能客户端根据获取到的“下载项”版本信息与当前客户端记录的版本信息比较,过滤出版本不一致的“下载项”,并根据下载项下载文件,在智能客户端记录“下载项”版本。
4.根据权利要求1所述的方法,其特征在于根据文件内容获取MD5散列值并做为“下载项”的版本,“下载项”的版本是文件的MD5散列值,只要文件内容发生变化,智能客户端就会下载文件。
一种基于智能客户端的按需下载实现方法\n技术领域\n[0001] 本发明涉及一种计算机互联网的智能客户端(Smart Client)技术领域,特别是涉及一种智能客户端应用的客户端程序文件同步更新的方法。\n背景技术\n[0002] 智能客户端(Smart Client)技术是一种基于互联网(Internet)的富客户端技术。在客户端,采用富客户端(Rich Client)技术,可充分利用客户端机器的本地资源,为用户提供丰富的用户交互体验。与B/S(Browser/Server,浏览器/服务器)应用程序相比,可展现给用户的界面是像安装在本地桌面系统上的GUI(Graphics User Interface,图形用户界面)程序界面,它有很多的复杂界面交互元素如树、菜单、网格等,对用户的友好性和可交互性大大增强,可满足用户界面交互的各种个性化需求,并且可提供本地数据缓存、离线应用等强大功能。而与C/S(Client/Server,客户机/服务器)应用程序对比,智能客户端技术提供客户端程序的自动部署更新,避免了客户端程序维护的各种繁琐和困难。\n[0003] 智能客户端技术采用基于HTTP和XML的网络服务(Web Service)技术传输数据,可基于互联网访问,并且客户端和服务器端仅传递必要的数据信息,这与B/S应用中基于HTML的传输方式(数据信息和界面格式信息混在一起)相比,可有效降低网络数据传输数据量,降低了对网络带宽的要求。\n[0004] 综上所述,智能客户端技术允许应用程序在互联网上以一种像使用Web一样简单的方式来发布和使用富客户端程序。智能客户端技术非常适合开发面向企业应用的管理信息系统,目前在企业管理软件领域已经有多种主流产品基于智能客户端技术搭建。\n[0005] 在基于智能客户端技术的大型企业管理软件中,需要在客户端部署的程序文件总量较大,可能会达到数百兆,在低速网络(传输带宽<1Mb)环境下,客户端下载更新的延迟过长,在某些较差的网络条件(传输带宽<100Kb)下,甚至导致系统不可用,严重影响了系统的可用性。此外,客户端程序文件之间不是彼此孤立的,往往一个功能会同时需要多个程序文件,程序文件之间会产生直接或间接的依赖关系,在部署更新时如果不能正确处理这种程序文件彼此间的依赖关系,会导致程序错误而无法使用系统。本发明涉及到的一种智能客户端应用的客户端程序文件同步更新的方法旨在解决低速网络下的智能客户端程序更新问题,并且通过可配置的方式以功能为单位进行程序的更新。\n发明内容\n[0006] 本发明提供了一种智能客户端程序的下载更新的实现方法,\n[0007] 本发明的方法是按以下方式实现的,通过下载定义、发布部署、下载更新三个部分实现智能客户端的按需下载。\n[0008] 1.下载定义\n[0009] 下载定义由下载项定义、下载单元定义和自更新下载项定义三部分组成。\n[0010] 下载项是对智能客户端程序中物理文件的描述。下载单元是对智能客户端中的功能使用到的下载项描述。\n[0011] 下载项的配置信息最终以XML格式存储,并且需要部署到指定的目录下,使其生效。\n[0012] 在定义下载项时需要定义下载项的行为方式,下载项的行为方式是指下载项被下载到客户端之后,执行的动作,这些动作有注册GAC、Activex、COM+。\n[0013] 下载单元的配置信息最终以XML格式存储,并且需要部署到指定的目录下,使其生效。下载单元结构如下:如图2所示;\n[0014] 客户端在下载更新时下载的最小粒度是下载项,下载项被下载到客户端之后会记录下载项的版本。其它下载单元在下载时,由于下载项客户端版本与服务端版本一致,下载项不用下载,这样可以在下载项被多个下载单元用引用的情况下,只更新一次。客户端记录的下载项的版本信息的结构如图3所示。\n[0015] 下载单元包含的下载项被更新之后,会记录下载单元的版本,客户端在执行更新时判断下载单元在客户端与服务端记录的版本是否一致,如果一致下载单元就不需要更新,这样加快了检测更新的速度。\n[0016] 自更新下载项定义了下载项在下载完成之后,是否使用自更新方式进行部署更新,自更新下载项主要包括版本检测组件、下载组件、部署组件中用到的下载项。\n[0017] 2.发布部署\n[0018] 发布部署是生成生成下载项版本、下载单元版本信息以及下载包的过程,具体的步骤如下:\n[0019] 步骤一:把下载定义中定义好的下载项、下载单元配置文件部署到服务端指定目录,使其生效。\n[0020] 步骤二:把下载定义中定义的下载项物理文件部署到系统中,生成下载项版本信息,版本信息的结构如下。版本信息采用MD5散列值算法生成,好处在于只要文件的内容不发生变法,文件版本不变,客户端就无需更新。与传统的基于文件版本比较的好处在于,物理文件不用在频繁的变化中修改文件版本,并且基于内容的比较更可靠。如下图6所示,下载项版本信息中引用了下载项。\n[0021] 步骤三:根据下载项配置的“下载时文件名称”使用标准的压缩算法压缩下载项指定的物理文件,形成下载包。物理文件被压缩之后,客户端在下载物理文件时可以有效的降低下载量。\n[0022] 步骤四:复制压缩的下载包到客户端可访问到的http路径下,供客户端下载。\n[0023] 步骤五:在下载单元配置文件中查找所有引用此下载项的下载单元,并为下载单元生成版本信息,下载单元的版本信息的结构如下。,\n[0024] 3.下载更新\n[0025] 下载更新包含的组件有版本检测组件、下载组件、部署组件、自更新组件四部分。\n[0026] 下载更新按照流程执行的步骤如下:\n[0027] 步骤一:使用版本检测组件检测更新。客户端通过下载单元ID查找客户端下载单元的版本,并与服务端记录的下载单元版本比较,如果一致则返回为没有下载,如果不一致,从服务器获取所有的下载单元引用的下载项版本信息,并与客户端存储的下载项版本信息比较,如果不一致或者客户端不存在下载项,则记录此下载项需要下载,最后返回下载单元版本信息与需要下载的下载项版本列表。先判断下载单元版本可以提高版本判断的效率,提供程序的响应时间。\n[0028] 步骤二:根据版本检测组件返回的结果,如果为空则说明不需要更新,如果返回下载单元版本和下载项版本列表信息,则启用下载组件执行下载项的下载。\n[0029] 步骤三:启动下载组件执行下载。下载时采用http请求的方式下载下载项中定义的下载文件,单个下载项下载完毕之后,会把下载项版本缓存客户端临时文件中,待所有的下载项都被下载完毕之后,记录下载单元版本到客户端临时文件中。\n[0030] 步骤四:判断下载的下载项是否存在于自更新下载项列表中,如果不存在启用部署组件,如果存在,启用自更新组件。\n[0031] 步骤五:启动部署组件。下载组件执行完毕之后,使用标准的压缩算法为下载包解包,解包之后,文件的命名按照下载项中定义的文件名称命名,解包的文件存储到临时目录中。待所有的下载包解包完毕之后,根据客户端记录的临时的下载项版本临时找到下载项在客户端的更新路径和行为模式,如果存在行为模式,需要先执行历史文件的反行为模式,再执行文件的覆盖,最后执行新文件的行为模式。下载项部署更新成功之后,删除在客户端的临时下载项版本信息,并记录到客户端下载项版本信息中。当所有的下载项都更新完毕之后,记录下载单元版本信息到客户端下载单元版本中,并删除客户端的临时下载单元版本信息。\n[0032] 步骤六:启动自更新组件。下载组件执行完毕之后,使用标准的压缩算法为下载包解包,解包之后,文件的命名按照下载项中定义的文件名称命名。当下载的下载项在自更新下载项列表中时,启动自更新组件。启动自更新组件时,需要关闭当前下载的主进程,并启动新的进程执行自更新,并且自更新的所在的程序集要保持独立,不能与版本检查组件、下载组件、部署组件存在直接的引用关系。文件的更新方式与步骤五相同。\n[0033] 针对步骤三:如果下载过程中出现失败,系统给出提示,由用户确认是否需要重新下载,如果选择否,退出下载,删除下载过程中生成的临时文件。\n[0034] 针对步骤五:如果部署过程中出现错误,系统会提示重启应用程序尝试执行部署。应用程序在重新启动时会首先判断在客户端的临时下载单元版本信息和客户端的临时下载项版本信息是否为空,如果不为空,启动部署组件,执行文件的部署。\n[0035] 针对步骤六:如果下载的下载项中包含了自更新组件本身使用的下载项,需要先执行自更新组件的部署和更新,然后启动自更新组件。\n[0036] 步骤一提到的下载单元版本验证和下载项版本验证双重的方式,有利于提高版本判断的效率,提供程序的响应时间。\n[0037] 步骤三提到的,下载项被成功下载之后,记录下载项版本的功能,有利于在程序出现错误时,继续执行文件的更新,增强了程序的健壮性。\n[0038] 步骤五提到的,下载包压缩的功能,有利于降低文件在网络的传入量,增强了程序在低带宽下的适应能力。\n[0039] 步骤六提到的,更新程序与自更新程序的分离,确保了客户端所有文件都能够被更新。\n[0040] 客户端下载的最小粒度是下载项。不同的下载单元应用相同的下载项时,客户端只更新一次下载项即可。\n[0041] 客户端下载的最小粒度是下载项,只要“下载项”版本一致,物理文件就不需要更新,不同的下载单元应用相同的下载项时,客户端只更新一次下载项。\n[0042] 下载信息通过配置的方式灵活定义,并且根据智能客户端传入的“下载单元”,获取“下载项”以确定功能的依赖的物理文件列表。\n[0043] 根据获取的“下载项”列表获取服务器记录的下载项版本,返回到智能客户端,智能客户端根据获取到的“下载项”版本信息与当前客户端记录的版本信息比较,过滤出版本不一致的“下载项”,并根据下载项下载文件,在智能客户端记录“下载项”版本。\n[0044] 根据文件内容的获取MD5散列值并做为“下载项”的版本,“下载项”的版本是文件的MD5散列值,只要文件内容发生变化,智能客户端就会下载文件。\n[0045] “下载单元”依赖“下载项”,“下载单元”是功能标识,“下载项”是物理文件。\n[0046] “下载项”在用到时再更新下载,用以分散智能客户端文件的下载量。\n[0047] 本发明的方法与现有技术相比,具有以下优点:\n[0048] 提供了可配置和可扩展的下载定义配置,应用程序可以根据实际情况灵活配置。\n客户端的下载更新过程完全自动化,无需人工干预。部署环节中加强了对异常的处理,发生异常之后,程序在下载启动时会自动更新。下载项可以在使用时下载,变相的降低了网络的流量,降低了新补丁对客户端的影响范围。采用MD5散列值算法生成文件版本,只要文件内容不发生变化,文件就不会被更新下载。物理文件被下载到客户端之后,可以执行行为方式,注册为GAC对象、Activex对象,COM+。下载单元的更新判断采用双重判断的机制,提交了更新验证效率。客户端下载的粒度为下载项,只要下载项版本一致,物理文件就不需要更新。\n附图说明\n[0049] 图1是下载项的结构图:\n[0050] 图2是下载单元结构图;\n[0051] 图3是客户端记录的下载项的版本信息的结构图;\n[0052] 图4是客户端记录的下载单元的版本信息的结构图:\n[0053] 图5自更新下载项结构图;\n[0054] 图6是下载项版本信息;\n[0055] 图7是下载单元版本信息;\n[0056] 图8是下载定义中下载项与下载单元的关系图;\n[0057] 图9是下载项版本与下载项、下载单元版本与下载单元的关系图;\n[0058] 图10是下载更新的流程图。\n具体实施方式\n[0059] 以下参照附图对本发明的优选实施例作以下详细描述,使本发明的上述目标、特征和优点更加清晰、易懂。\n[0060] 为了更容易理解本方法的实施方式,以示例进行详细的说明。\n[0061] 示例:\n[0062] 场景:系统定义了三个功能,功能A、功能B、功能C,功能与使用的文件的对应关系如下,其中文件A.dll在客户端需要注册GAC。\n[0063] A.Dll 功能A、功能C\n[0064] B.Dll 功能B、功能C\n[0065] 步骤一:\n[0066] 1.定义下载项配置文件,DownloadItem_Test.xml;文件结构如下:\n[0067]
\n[0068] A.dll\n[0069] \n[0070] \n[0071] A.dll\n[0072] A.zip\n[0073] \n[0074] GAC\n[0075] \n[0076] \n[0077]
\n[0078] B.dll\n[0079] \n[0080] \n[0081] B.dll\n[0082] B.zip\n[0083] \n[0084] None\n[0085] \n[0086] \n[0087] 定义了下载项A、B。\n[0088] 2.定义下载单元配置文件,DownloadUnit_Test.Xml\n[0089]
\n[0090] SYS0102\n[0091] SYS0102
\n[0092] 功能A\n[0093] \n[0094] A.dll\n[0095] \n[0096] \n[0097]
\n[0098] SYS0103\n[0099] SYS0103
\n[0100] 功能B\n[0101] \n[0102] B.dll\n[0103] \n[0104] \n[0105]
\n[0106] SYS0104\n[0107] SYS0104
\n[0108] 功能C\n[0109] \n[0110] A.dll\n[0111] B.dll\n[0112] \n[0113] \n[0114] 定义了三个下载单元SYS0102、SYS0103、SYS0104。其中SYS0102依赖下载项A.dll;SYS0103依赖下载项B.dll;SYS0104依赖下载项A.dll、B.dll。将定义好的下载项、下载单元配置文件部署到服务器指定目录。\n[0115] 步骤二:\n[0116] 3.部署下载项A.dll、B.dll,在服务器端生成下载项版本和下载单元版本信息,并生成下载包:A.zip、B.zip。\n[0117] 步骤三:\n[0118] 4.客户端登录系统之后,点击功能功能A执行SYS0102的下载更新,智能客户端向应用服务器请求SYS0102下载单元下载,应用服务器返回A.dll下载项版本信息,客户端判断下载项不存在或者版本不一致,执行A.dll的下载,并记录A.dll下载项版本信息与功能A的下载单元版本信息到临时文件中。\n[0119] 5.A.dll下载项下载完毕之后,使用zip标准格式解包下载包,并把解包后的文件存储到临时目录。\n[0120] 6.判断A.dll是否需要启动自更新,判断结果为否。执行A.dll的反行为动作,即卸载GAC,接着行为动作注册GAC。\n[0121] 7.记录A.dll下载项的版本信息、功能A的版本信息,并清空临时版本信息,执行功能A的调用。\n[0122] 8.客户端继续点击功能B,执行下载单元SYS0103的下载,智能客户端向应用服务器请求SYS0103下载单元下载,应用服务器返回B.dll下载项版本信息,客户端判断下载项不存在或者版本不一致,执行B.dll的下载。剩余步骤与5、\n[0123] 9.与6、7相同。\n[0124] 10.客户端继续点击功能C,执行下载单元SYS0104的下载,智能客户端向应用服务器请求SYS0104下载单元下载,应用服务器返回A.dll和B.dll下载项版本信息,客户端判断下载项已经存在并且版本一致,不需要下载,直接执行功能的调用。\n[0125] 11.针对6中提到的:如果判断A.dll是否需要启动自更新的结果为是,则退出当前应用程序,并启动自更新进程。自更新程序执行A.zip的解包,并根据记录的下载项版本信息查找更新路径,执行历史文件的反行为动作卸载GAC,再执行A.dll的行为动作注册GAC。\n[0126] 12.记录A.dll的下载项版本信息和功能A的下载单元版本信息,并删除临时文件中记录的A.dll下载项版本信息和功能A的下载单元版本信息。\n[0127] 13.重新启动主程序,执行功能的调用。\n[0128] 综上所述,通过提供可配置和可扩展的下载定义配置,使得应用程序可以根据实际情况灵活配置。客户端的下载更新过程完全自动化,无需人工干预。部署环节中加强了对异常的处理,发生异常之后,程序在下载启动时也会自动更新。下载项可以在使用时再下载,降低了网络的流量,降低了新补丁对客户端的影响范围。采用MD5散列值算法生成文件版本,只要文件内容不发生变化,文件就不会被更新下载。物理文件被下载到客户端之后,可以执行行为方式,注册为GAC对象、Activex对象,COM+等。下载单元的更新判断采用双重判断的机制,提交了更新验证效率。客户端下载的粒度为下载项,只要下载项版本一致,物理文件就不需要更新。
法律信息
- 2014-07-30
专利权人的姓名或者名称、地址的变更
专利权人由浪潮集团山东通用软件有限公司变更为浪潮通用软件有限公司
地址由250014 山东省济南市历下区山大路224号变更为250101 山东省济南市浪潮路1036号
- 2012-10-03
- 2010-07-21
实质审查的生效
IPC(主分类): G06F 9/445
专利申请号: 200910230910.8
申请日: 2009.11.20
- 2010-06-02
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2007-07-04
|
2005-12-28
| | |
2
| |
2008-07-16
|
2008-01-24
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |