首页> 中国专利> 用于管理更新分发系统中软件更新的分发的应用程序编程接口

用于管理更新分发系统中软件更新的分发的应用程序编程接口

摘要

提出了一种用于管理更新服务节点上软件更新的分发的应用程序编程接口(API)。该API提供了多个接口调用,通过这些接口调用,管理员可建立用于分发对更新服务节点可用的软件更新的规则。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-05-20

    专利权的转移 IPC(主分类):G06F15/173 变更前: 变更后: 登记生效日:20150506 申请日:20050311

    专利申请权、专利权的转移

  • 2010-01-13

    授权

    授权

  • 2008-01-02

    实质审查的生效

    实质审查的生效

  • 2007-11-07

    公开

    公开

说明书

发明领域

本发明涉及软件和计算机网络,尤其涉及用于管理更新分发系统中软件更新的分发的应用程序编程接口。

发明背景

几乎所有市场上可购买的软件产品都要经受连续的修订过程以修复或更新软件的特征。软件产品的每一版本经常需要添加新文件、用较新的版本替换现有文件、删除过时的文件、或这些动作的各种组合。替换软件产品的较旧的文件、添加新文件以及删除过时的文件的这一过程在下文中被称为“更新产品”,而更新产品时所使用的数据集合,包括二进制文件、数据文件、更新指令、元数据、数据库数据、系统注册表设置、安全设置等在下文中被简称为“更新”。

一旦软件供应商为软件产品创建了更新,无论该更新是修补问题、增强安全性还是添加新特征,软件供应商都希望使更新广泛地可用于其消费者基础。通常,诸如当更新针对纠正产品中的缺陷或解决关键的安全问题时,软件供应商希望尽可能快地在顾客的计算机上安装更新。实际上,大多数软件供应商都具有将软件更新尽可能快且无麻烦地分发到其消费者的商业动机。

计算机行业在连接到网络,尤其是连接到因特网的计算机的数量上经历了爆炸性的增长。由于这一爆炸性的增长,且由于通过到因特网的连接而变得可用的通信能力,因特网已成为了软件供应商用于向其顾客分发更新的重要且完整的渠道。事实上,因特网已成为了许多软件供应商用于向其顾客提供软件更新的主要分发渠道。软件供应商通常为了其最大的利益而通过因特网来分发软件更新,因为通过因特网的电子更新分发降低了其总成本,且使得顾客能够在软件更新一当可用时就获得它们。这些软件更新越来越频繁地通过因特网自动进行,而无需用户干预。

尽管因特网现在常用作用于从软件供应商分发软件的渠道,但是经常会出现若干问题。两个这样的问题包括(1)与更新分发基础结构/资源有关的效率,以及(2)对软件更新的分发和安装的管理控制。

对于分发资源的效率而言,包括因特网的网络仅拥有有限量的通信资源,通常被称为带宽。有限量的通信带宽经常会导致瓶颈,尤其是对于诸如微软公司的Windows家族操作系统和相关的生产产品等流行软件产品的更新而言。即使在遍及因特网分布的多个下载位置上有软件更新可用的情况下,也存在这样的瓶颈。出现这样的瓶颈的一个原因是因为因特网而变得可用的未结构化访问模型。例如,如果计算机A处的第一用户请求对软件产品的最新下载,则该下载通过第一用户的独立服务供应商(ISP)。此外,该请求作为单个个性化的访问来处理,这意味着该请求与任何其它网络话务和/或请求独立且无关地处理。由此,如果恰巧具有同一ISP的计算机B处的第二用户请求与第一用户相同的下载,则来自第二用户的请求也作为单个个性化的访问来处理。在本示例中,同一下载将通过同一基础结构发送两次,因为每一请求都是孤立地处理的。很清楚,如果用户数量大量增长,则有限的通信带宽将变为瓶颈。在相当常见的这一示例中,如果下载能被高速缓存在本地位置,且每一用户请求都从该本地高速缓存得到满足,则将会有效得多。

对于分发控制,许多公司,尤其是大公司具有合法的原因来控制向其计算机的更新分发。例如,不幸的是某些更新具有或引入通常被称为程序错误的缺陷,这些缺陷会“破坏”软件产品的特征。这些被破坏的特征可能是不重要的,但是它们时常会干扰企业的任务关键特征。由于企业无法承受丢失其任务关键特征,因此负责的企业在将更新发行到其剩余的计算机之前首先在受控环境中评估并测试每一软件更新某一段时间。这一评估时间段准许公司确认更新是否会不利地影响任务关键特征。仅当令人满意地确定更新不会使任何任务关键特征崩溃,才准许将该更新分发到公司的其余计算机。很清楚,大多数公司必须实行对软件更新在其计算机上的安装的控制。

企业和公司通常需要控制软件更新的分发的另一原因是确保公司中计算机之间的一致性。对信息服务部门重要的是具有所有计算机可在其上操作的标准化的目标平台,而不论是用于文字处理程序还是操作系统。如果没有标准,则软件和计算机维护将变得不必要地复杂和困难。

本地控制重要的又一原因是用于记账目的。在大公司中,将软件个别地安装到计算机上或对公司中的每一计算机个别地维护特定软件产品的许可证通常是低效的。相反,单个场地许可证准许公司在多台计算机上运行一个软件产品。由此,可能要求报告在场地许可证下运行产品的计算机的数量,或可能要求公司限制在场地许可证下运行产品的计算机的数量。所有这些原因通常要求对软件更新分发的本地控制。

鉴于上述与软件更新分发有关的各种问题,所需的是一种用于提供对软件更新的分发的控制以及提高其分发效率的可扩展软件更新分发体系结构。本发明解决了现有技术中发现的这些和其它问题。

发明概述

根据本发明的各方面,提出了一种更新服务节点,它具有用于管理该更新服务节点上的软件更新的分发的应用程序编程接口。该更新服务节点包括用于储存软件更新的更新存储。该更新服务节点还包括更新web服务,通过该更新web服务,更新服务节点经由通信网络从父更新服务节点获得软件更新,并且通过该更新web服务,更新服务节点经由通信网络将软件更新分发给子更新服务节点。此外,该更新服务节点包括管理应用程序编程接口(API),通过该API,管理员建立对向子更新服务节点和客户机计算机的软件更新分发的控制,其中该管理API是展现管理员通过其建立所述规则的多个接口调用的对象。

根据本发明的其它方面,提出了一种用于管理更新服务节点上的软件更新分发的应用程序编程接口。该API包括获得配置接口调用,它返回用于对更新服务节点读和写软件更新管理配置值的配置接口对象。该API还包括获得定购接口调用,它返回更新服务节点上所定义的定购接口对象。该API还包括获得更新接口调用,它返回对应于传入获得更新接口调用的更新标识符的更新接口对象;以及获得多个更新接口调用,它返回包含对应于传入获得多个更新接口调用的值的多个更新接口对象的更新集合对象。该API还包括获得计算机接口调用,它返回对应于与更新服务节点相关联且在获得计算机接口调用中标识的客户机计算机的客户机计算机对象;以及获得多个计算机接口调用,它返回包括对应于与更新服务节点相关联的客户机计算机的多个客户机计算机对象的计算机集合对象。另外,该API包括获得组接口调用,它返回获得组接口调用中标识的目标组对象;以及获得多个组调用接口,它返回包括对应于更新服务节点上的多个目标组的多个目标组对象的目标组集合对象。

根据本发明的另外一些方面,提出了一种用于分发软件更新的软件更新分发系统。该软件更新分发系统包括一更新服务节点以及与该更新服务节点相关联的管理应用程序编程接口(API)。该管理API是展示用于控制软件更新的分发的多个接口调用的接口对象。该管理API包括获得配置接口调用,它返回用于对更新服务节点读和写软件更新管理配置值的配置接口对象。该API还包括获得定购接口调用,它返回更新服务节点上定义的定购接口对象。该API还包括获得更新接口调用,它返回对应于传入获得更新接口调用的更新标识符的更新接口对象;以及获得多个更新接口调用,它返回包含对应于传入获得多个更新接口调用的值的多个更新接口对象的更新集合对象。该API还包括获得计算机接口调用,它返回对应于与更新服务节点相关联并在获得计算机接口调用中标识的客户机计算机的客户机计算机对象;以及获得多个计算机接口调用,它返回包括对应于与更新服务节点相关联的多个客户机计算机的多个客户机计算机对象的计算机集合对象。另外,该API包括获得组接口调用,它返回获得组接口调用中标识的目标组对象;以及获得多个组接口调用,它返回包括对应于更新服务节点上的多个目标组的多个目标组对象的目标组集合对象。

附图简述

当结合附图参考以下详细描述,本领域的技术人员可以更容易理解且更好地明白本发明的以上方面和许多附加优点,附图中:

图1是根据本发明的各方面形成的一个示例性更新分发系统的图示;

图2是示出根据本发明的各方面形成的更新服务节点的示例性逻辑组件的框图;

图3是示出根据本发明的各方面形成的根更新服务节点的示例性逻辑组件的框图;

图4是示出根据本发明的各方面在从父更新服务节点向子更新服务节点提供软件更新时父更新服务节点和子更新服务节点之间的示例性交换的框图;

图5是示出在子更新服务节点上执行的从其父更新服务节点周期性地获得更新的示例性例程的流程图;

图6是适于在图5的示例性例程中使用的用于从父更新服务节点获得更新目录的示例性子例程的流程图;

图7是适于在图5的示例性例程中使用的用于从父更新服务节点获得软件更新的示例性子例程的流程图;

图8是用于处理来自子更新服务节点的更新请求的示例性例程的流程图;

图9是示出对于配置更新服务节点以向客户机计算机分发软件更新而言如何使用管理API的图示;以及

图10是示出用于管理更新服务节点上的软件更新的分发的某些管理API调用的框图。

较佳实施例的详细描述

根据本发明的各方面,提出了一种以分层结构方式组织的用于分发软件更新的更新分发系统。图1是根据本发明的各方面形成的示例性更新分发系统100的图示。根据本发明,在诸如所示的更新分发系统100等更新分发系统的“顶部”的是根更新服务节点102。诸如软件供应商110等软件供应商通过向根更新服务节点102提交更新,经由更新分发系统100分发其软件更新。根据本发明的各方面,诸如软件供应商110等软件供应商可经由诸如因特网108等网络向根更新服务节点102提交其软件更新。

诸如示例性更新分发系统100等分层结构更新分发系统除根更新服务节点102外还可能包括至少一个其它更新服务节点。如图1所示,示例性更新分发系统100包括根更新服务节点102以及两个其它更新服务节点:更新服务节点104和更新服务节点106。根据本发明,每一分层结构更新分发系统是在根更新服务节点102之下以类树的结构组织的。换言之,更新分发系统中的每一更新服务节点具有零个或多个子更新服务节点。由此,尽管示例性更新分发系统100示出每一父更新服务节点,即根更新服务节点102和更新服务节点104仅有一个子节点,但是这仅仅是为了说明起见,且不应当被解释为对本发明的限制。此外,除了根更新服务节点102之外,更新分发系统中的每一更新服务节点有一个父更新服务节点。因此,如图1所示,更新服务节点104是根更新服务节点102的子节点,而更新服务节点106是更新服务节点104的子节点。如可以看到的,除了根更新服务节点102之外,每一更新服务节点既可以是子更新服务节点又可以是父更新服务节点。

如示例性更新分发系统100中所示的,根更新服务节点102通过因特网108与更新服务节点104通信。然而,应当理解,这仅仅是说明性的,且不应当被解释为对本发明的限制。更新分发系统中的每一更新服务节点只需能够经由某一通信网络与其父和/或子节点通信。由此,尽管更新服务节点104通过因特网108与其父节点通信,但根更新服务节点102可替代地经由局域网124与其子更新服务节点,诸如更新服务节点106通信。

同样如图1所示,更新服务节点106驻留在局域网124的子网126内。作为一个示例,局域网124可对应于组织机构的通用公司网,且更新服务节点104表示公司经由其与父,即根更新服务节点102的连接到更新分发系统100的链路。此外,子网126可对应于公司网内的一组可标识计算机,诸如测试/评估组、远程定位的办公室或任务关键组。如将在以下详细描述的,根据本发明的各方面,更新服务节点104上的管理员能够控制向更新服务节点106以及最终向客户机计算机的更新分发。

应当理解,每一更新服务节点,包括根更新服务节点102和更新服务节点104和106都被配置成同时向子更新服务节点以及客户机计算机两者分发软件更新。如图1所示,示例性更新分发系统100包括客户机计算机112-122。每一更新服务节点,包括根更新服务节点102根据本地配置信息向子更新服务节点和客户机计算机分发更新。根据一个实施例,管理员定义多个组,并将更新分发规则与这些组相关联。每一更新服务节点具有至少一个分发组。

作为示出更新分发系统如何操作的一个示例,假定局域网124对应于企业组织的公司网。根据本发明的一个实施例,更新服务节点104上的管理员可为公司网124定义多个分发组,包括对应于包括更新服务节点106和客户机计算机120和122的子网126的评估组,用于为通用公司网124评估更新的合适性;以及包括更新服务节点104和客户机计算机114-118的通用公司组。

对于评估组,管理员包括更新服务节点106作为成员,并将规则与该组相关联,以使在更新变为可用时立即将其分发到评估组的成员。或者,对于通用公司组,管理员添加客户机计算机114-118,并关联一规则,以使在管理员特别授权的情况下更新仅被分发到通用公司组成员。还假定子更新服务节点106的管理员创建由评估子网126内的客户机计算机120和122构成的默认组,可立即向该默认组分发任何新的软件更新。

继续以上示例,软件供应商110向根更新服务节点102提交软件更新。根据在根更新服务节点102处建立的规则,更新最终被分发到公司更新服务节点104。在接收到更新之后,按照由管理员建立的规则,公司更新服务节点104将更新分发到评估组的成员(被定义为仅仅是子更新服务节点106),但保留来自通用公司组的更新,从而使向该组分发更新的特定授权待决。

继续以上示例,在接收到更新之后,评估更新服务节点106对于每一定义的组处理更新。在该示例中,评估更新服务节点106仅有一个组。然而,如先前所提到的,在实际的实现中,可能定义多个组,每一组具有一组唯一的相关联分发规则。对于本示例,评估更新服务节点106立即使更新可用于分发到客户机计算机120和122。客户机计算机120和122现在可被更新,并且评估时段/处理可以开始。

仍继续以上示例,当公司更新服务节点104上的管理员对更新适用于通过整个公司网124分发感到足够满意时,管理员然后明确地授权将更新分发到通用公司组的成员。公司更新服务节点104相应地使更新对客户机计算机114-118可用。应当理解,评估更新服务节点106也可被包括在通用公司组中。然而,由于评估更新服务节点106已被更新,因此无需另外的更新相关动作来将更新分发到评估子网126。

如可通过以上示例见到的,本发明在本地分发控制和下载效率方面提供了显著的益处。除上述本地分发控制方面之外,也实现了通信带宽的显著节省。例如,尽管图1所示的示例性公司网124包括5个客户机计算机,但是软件供应商的更新仅从根更新服务节点102下载到公司更新服务节点104一次。因此,很清楚,当更新服务节点服务的客户机计算机的数量增加时,父更新服务节点和子更新服务节点之间的通信带宽使用率保持恒定,由此实质上减少了本应使用的通信带宽量。另外,更新分发系统既是可扩展又是可伸缩的。更新分发系统按以下至少两种方式是可扩展的:可向父更新服务节点添加任何数量的子更新服务节点,以及子更新服务节点也可以是父更新服务节点。更新分发系统的每一子树因此可被剪裁以满足个别需求。

图2是示出根据本发明的各方面形成的更新服务节点200,诸如公司更新服务节点104(图1)或评估更新服务节点106(图1)的示例性逻辑组件的框图。如图2所示,更新服务节点200包括更新web服务202、客户机更新模块204、子更新模块206以及报告模块208。示例性更新服务节点200还包括认证/授权模块210、管理应用程序编程接口(API)212、更新内容存储214、管理用户界面218以及更新信息存储216。

更新web服务202提供一组公共的web服务,通过该组web服务,客户机计算机、子更新服务节点以及父更新服务节点可与更新服务节点通信。例如,参考图1,为了使子/评估更新服务节点106能够从父/公司更新服务节点104获得软件更新,客户机通过父节点的更新web服务202通信。类似地,当诸如根更新服务节点102等父更新服务节点有包括更新的信息要传递到其子更新服务节点104时,父更新服务节点通过子节点的更新web服务202通信。

在本发明的一个实际的实施例中,由更新web服务202提供的一组公共的web服务,通常称为web服务接口包括以下调用:GetServerAuthConfig(获得服务器认证配置),用于从父更新服务节点获得认证配置信息;GetConfigData(获得配置数据)以及GetServerConfigData(获得服务器配置数据),用于获得父更新服务节点的配置信息和属性;GetServerCookie(获得服务器cookie),用于从父更新服务节点获得授权令牌;GetRevisionIdList(获得修订ID列表),用于从父更新服务节点获得更新列表;GetUpdateData(获得更新数据),用于从父更新服务节点获得更新元数据和更新有效载荷;以及ReportEvents(报告事件),用于向其父更新服务节点报告发生在更新服务节点上的更新活动。

客户机更新模块204处理客户机计算机和更新服务节点200之间关于储存在更新服务节点上的更新和更新信息的通信。更新相关通信包括但不限于,响应于客户机请求分发更新以及为客户机计算机提供可用软件产品和相关联更新的列表。客户机更新模块204还负责根据相关联分发规则来确定客户机计算机是否被授权获得特定更新,并用客户机计算机被授权访问的更新相关信息来响应客户机计算机。

子更新模块206处理父更新服务节点与其子更新服务节点之间的更新相关通信。更新相关通信包括但不限于,标识对子更新服务节点可用的软件产品和相关联更新的列表,以及响应来自子更新服务节点的更新请求。下游更新模块206负责根据相关联分发规则来确定子更新服务节点是否被授权获得特定更新,并用子更新服务节点被授权访问的更新相关信息来响应子更新服务节点。

报告模块208生成更新相关报告,诸如哪些组已接收到或尚未接收到特定更新,哪些客户机计算机已下载/安装或尚未下载/安装更新,什么更新在更新服务节点上可用等等。这些报告可诸如由管理员内部使用,并且还可经由父节点的更新服务接口202提交给父更新服务节点。如上所述,公司通常必须确定哪些客户机计算机已安装了特定更新,诸如出于记账目的或出于维护目的。由报告模块208生成的信息/报告可以是这些报告的基础。

认证/授权模块210负责认证,即确定特定客户机计算机或子更新服务节点的身份,并确定客户机计算机或子更新服务节点是否被授权访问更新服务节点200上的可用更新。对于被认证和授权访问更新服务节点上的更新的那些客户机计算机和子更新服务节点,认证/授权模块210签发必须结合获得更新所使用的授权令牌。授权令牌的签发和使用在下文参考图4A和4B更详细描述。

管理API 212表示应用程序接口,通过该接口实行对更新服务节点200的控制,且通过该接口最终储存和分发更新。当更新web服务202从客户机计算机和子更新服务节点接收各种更新相关请求时,这些请求最终被分解成经由客户机更新模块204和子更新模块206对管理API 212的直接或间接调用。结合管理用户界面218或安装在更新服务节点200上被适当地配置成使用管理API 212的某一其它程序,管理员最终为该更新服务节点以及任何子更新服务节点和客户机计算机控制所有的更新处理方面。管理API的一个实际的实施例作为附录附加到本说明书,且将参考图9-XX来更详细描述。

通过管理用户界面218,管理员可经由管理API 212配置并维护更新服务节点200。由此,通过管理用户界面218,管理员创建、修改和删除各个组,以及为每一组关联规则。此外,使用管理用户界面218,管理员建立客户机计算机或子更新服务节点所属的组。通过管理用户界面218,管理员也可明确地授权向客户机计算机或子更新服务节点分发更新,将更新服务节点200配置成向其父更新服务节点周期性地查询新更新,配置报告参数以及查看内部报告等等。如上所述,尽管管理用户界面218允许管理员实行对更新服务节点200各方面的控制,但是可使用驻留在更新服务节点200上、适用于与管理API 212一起操作的的另一应用程序来代替管理用户界面218。

如上所述,根据本发明的一个实施例,更新服务节点200包括更新内容存储214和更新信息存储216。更新内容存储214储存表示软件更新的实际文件,诸如二进制文件和补丁文件。相反,更新信息存储216储存对应于更新服务节点200上可用的更新,包括储存在更新内容存储214中的更新文件的信息和元数据。根据一个实施例,更新内容存储214和更新信息存储216都是关系型数据库。尽管示例性更新服务节点200被示出为具有两个数据存储,本发明不应如此限制。在一个替换实施例中,更新内容存储214和更新信息存储216可被组合成单个信息存储。

根据本发明的各方面,即使更新未物理地储存在更新内容存储214中,软件更新也可对客户机计算机和子更新服务节点呈现为在更新服务节点200上“可用”。更具体地,并非直接下载和储存更新服务节点200上的实际更新文件,可作为替代在更新服务节点上储存引用父更新服务节点或别处的更新文件的链接。由此,如果客户机计算机请求更新,或者子更新服务节点请求实际更新,则从父更新服务节点带下更新,并储存在更新内容存储214中,以准备将其递送到客户机计算机或子更新服务节点。本领域的技术人员将认识到,这类更新访问被称为即时(just-in-time)下载。以此方式,“可用”更新在它被实际请求之前无需经由各种网络信道分发。根据本发明的各方面,更新服务节点200的管理员可选择性地确定是否以即时方式获得软件更新。

尽管图2的以上描述示出了示例性更新服务模块200的各种组件,但是应当理解,更新服务模块的其它组件也可存在。此外,上述组件应当被理解成是逻辑组件,而不必是实际的组件。在一个实际实现中,根据实现判定,上述组件可被组合在一起和/或与其它组件组合。另外,应当理解,尽管更新服务节点200可被视为网络上的服务器计算机,但在一个实际实现中,更新服务节点可被实现为任意数量类型的计算设备。例如,每一更新服务节点200可在单个独立计算机系统上,或者在包括多个计算设备的分布式计算系统上实现和/或安装。

图3是示出根据本发明的各方面形成的根更新服务节点300,诸如图1所示的根更新服务节点102的示例性逻辑组件的框图。与更新服务节点200的逻辑组件(图2)相类似,根更新服务节点300包括更新web服务202、子更新模块206、以及认证/授权模块210。另外,示例性根更新服务节点300还包括管理API 212、更新内容存储214、更新信息存储216。可任选地,根更新服务节点300还可包括客户机更新模块204、报告模块208、以及管理用户界面218。

客户机更新模块204对于根更新服务节点300是可任选组件,取决于根更新服务节点是否直接向客户机计算机提供软件更新。例如,参考图1,根更新服务节点102包括可任选客户机更新模块204,因为该根更新服务节点直接服务客户机计算机112。然而,如果根更新服务300不直接服务客户机计算机,则客户机更新模块204可被省略。

报告模块208对于根更新服务节点300是可任选的,因为根更新服务节点没有向其提供更新报告的父更新服务节点。然而,在根更新服务节点的管理员需要更新报告的意义上,可任选地包括报告模块208。

除包括更新服务节点200中所包括的逻辑组件(图2)之外,根更新服务节点300还包括软件供应商接口302。软件供应商接口302提供软件供应商110(图1)用于直接向根更新服务节点300提交软件更新,并间接向示例性更新分发系统100提交软件更新的通信接口。

与图2的更新服务节点200相类似,图3的以上描述示出了示例性根更新服务模块300的各种组件。然而,应当理解,根更新服务模块的其它组件也可存在。此外,上述组件应被理解为是逻辑组件,而不必是实际组件。在一个实际的实现中,根据实现判定,上述组件可被组合在一起和/或与其它组件组合。另外,应当理解,尽管根更新服务节点200可被视为网络上的服务器计算机,但是在一个实际的实现中,更新服务节点可在任何数量的计算设备上实现。例如,根更新服务节点300可在单个独立计算机系统上,或者可在包括多个计算设备的分布式计算系统上实现和/或安装。

为了更好地理解如何遍及更新分发系统100从根更新服务节点分发更新,给出父更新服务节点和子更新服务节点之间的示例性交换的图示。图4是示出根据本发明的各方面,在将软件更新从父更新服务节点传播到子更新服务节点时,父更新服务节点402和子更新服务节点404之间的示例性交换400。如可以见到的,示例性图400被分成两半,其左半部分对应于父更新服务节点402的动作和事件,其右半部分对应于子更新服务节点404的动作和事件。

出于相对于图4进行讨论的目的,还应理解,父更新服务节点402可以是或不是更新分发系统100中的根更新服务节点。另外,出于本讨论的目的,假定父更新服务节点402由管理员配置成使子更新服务节点404在未被管理员明确授权的情况下可以不接收软件更新。

如示例性交换400中所示的,在事件406处开始,如果父更新服务节点402是根更新服务节点102,则它从软件供应商100直接接收软件更新,或者通过更新分发系统100间接接收软件更新。在父更新服务节点402从软件供应商100接收软件更新之后的某一点,子更新服务节点400开始从父更新服务节点获得软件更新的过程。

根据一个实施例,子更新服务节点404可被配置成在周期性的基础上从父更新服务节点202自动获得可用的软件更新。更具体地,管理员经由管理用户界面218可选择性地将子更新服务节点404配置成在周期性的基础上自动获得父更新服务节点402上可用的最新软件更新。作为一个示例,管理员可将子更新服务节点404配置成在每日和/或每小时的基础上从其父更新服务节点402获得最新软件更新,以及指定自动更新过程开始的时刻。也可使用其它周期性时间表和准则。类似地,管理员可通过管理用户界面218手动启动更新过程。

为开始更新过程,在事件408处,子更新服务节点404向父更新服务节点402认证和授权其自身。向父更新服务节点402认证和授权提供了对软件更新分发的控制元素,从而限制了对授权更新服务节点的更新分发。认证和授权技术在本领域中是已知的,且可采用任意数量的这种技术来向父更新服务节点402认证和授权子更新服务节点404。本发明不限于任何一种技术。

在正确地向父更新服务节点402认证和授权之后,在事件410处,父更新服务节点402向子更新服务节点404返回授权令牌。根据一个实施例,授权令牌是向子更新服务节点404提供在一有限量的时间内与父更新服务节点进行进一步的更新活动的授权的时间敏感令牌。由此,如果子更新服务节点404未向父更新服务节点正确地认证和授权,则不返回授权令牌,且子更新服务节点除认证和授权之外无法执行任何其它更新相关活动。类似地,在更新令牌过期之后,子更新服务节点404除重新认证和重新授权之外无法与父更新服务节点402执行任何进一步的更新相关活动。

在接收到授权令牌之后,在事件412处,子更新服务节点404向父更新服务节点提交对产品更新目录的请求以及授权令牌。产品更新目录表示父更新服务节点402为其分发软件更新的软件产品的清单或内容表。

根据本发明的各方面,不要求子更新服务节点404传播其父更新服务节点402上可用的所有软件更新。例如,参考图1的示例性更新分发系统,公司更新服务节点104可具有仅用于根更新服务节点102上可用的一小部分软件产品的场地许可证。因此,公司更新服务节点104不必获得根更新服务节点102上可用的所有软件更新,因为大多数更新从不被使用。因此,更新服务节点上的管理员可选择性地确定哪些软件产品更新在更新服务节点上可用。

根据本发明的一方面,从父更新服务节点402获得的更新产品目录标识了更新对其可用的所有软件产品,而不论子更新服务节点404是否被配置成为每一产品分发更新。然而,根据本发明的一个替换方面,从父更新服务节点402获得的更新产品目录仅标识了请求的子更新服务节点被配置成为其分发更新的那些软件产品。例如,限制在产品更新目录中列出哪些软件产品可根据子更新服务节点404所属的一个或多个组来确定。

在事件414处,父更新服务节点402向子更新服务节点404返回产品更新目录。在事件416处,子更新服务节点404从产品更新目录中选择当前需要最新更新的那些产品。应当注意,即使产品更新目录可能仅列出子更新服务节点404分发的那些软件产品,但子更新服务节点可被配置成在不同的时间或在不同的周期性调度表上为不同的软件产品获得更新。

在事件418处,子更新服务节点404提交更新同步请求以及标识子更新服务节点当前正在寻求其更新的所选择产品的授权令牌。同步请求中包括标识对子更新服务节点404上的产品可用的最新更新的信息。标识产品的最新更新的信息在下文中称为“更新定位点”。每一软件产品的更新定位点通常储存在更新信息存储216(图2)中。在一个实施例中,更新定位点包括修订号以及与修订号相关联的日期。

响应于更新同步请求,在事件420处,父更新服务节点402确定对子更新服务节点404有哪些(如果有)新的更新可用。如上所述,该确定基于与特定软件更新以及子更新服务节点404作为其成员的一个或多个组相关联的特定规则以及更新定位点。对于本示例,如先前所提到的,先前接收的软件更新对子更新服务节点404而言未被明确地授权。因此,在事件406处接收到的软件更新不被确定为对子更新服务节点404“可用”。因此,在事件422处,向子更新服务节点404返回更新列表,而不标识出事件406处接收到的软件更新。根据本发明的各方面,更新列表根据同步请求标识了父更新服务节点402上“可用”的所有更新。在一个实施例中,更新列表用与更新相关联的唯一标识符标识了每一“可用”更新信息。

在事件424处,由于更新列表为空,即父更新服务节点402上当前没有更新“可用”,则子更新服务节点404的更新过程简单地延迟或睡眠预定量的时间。根据当前示例,在这一延迟时间段中,在事件426处,父更新服务节点402处的管理员授权事件406处接收到的软件更新被分发到子更新服务节点404。

在事件428(图4B)处,子更新服务节点404通过向父更新服务节点402认证和授权其自身再次开始自动更新过程。作为响应,在事件430处,父更新服务节点402向子更新服务节点404返回授权令牌。

在事件432处,子更新服务节点404向父更新服务节点402提交对产品更新目录的请求以及授权令牌。在事件434处,父更新服务节点402向子更新服务节点404返回产品更新目录。在事件436处,子更新服务节点404在更新目录中选择需要更新的产品。在事件438处,子更新服务节点404提交标识具有授权令牌的那些所选择产品的更新同步请求。

由于子更新服务节点404已被授权获得先前在事件406处接收的软件更新,因此在事件440处,父更新服务节点402确定该软件更新是否对子更新服务节点“可用”,并在更新列表中包括对应的更新信息。之后,在事件442处,父更新服务节点402向子更新服务节点404返回现在标识在事件406处接收的软件更新的更新列表。

有了标识父更新服务节点402上的“可用”更新的更新列表,子更新服务节点404现在具有获得软件更新所需的信息。根据本发明的一个实施例,子更新服务节点404以以下两部分从父更新服务节点402获得软件更新:获得更新元数据,以及获得更新内容或文件,下文称为更新有效载荷。根据本发明的其它方面,更新元数据描述了软件更新的相关方面,包括但不限于:唯一地标识更新的更新标识符、与软件更新相关联的修订号信息、软件更新是否应考虑优先级、语言专用信息、与其它软件更新的关系、用于下载目的的更新有效载荷的位置、安装处理器例程等等。

以两部分,即更新元数据和更新有效载荷来下载整个软件更新通常是有益的某些原因是更新有效载荷通常比更新元数据要大得多,且即使曾经是需要的,更新有效载荷也并非总是立即需要的,即需要安装到客户机计算机上。由此,根据本发明的一个实施例,更新有效载荷与更新元数据分开下载,且仅当需要时才下载。本领域的技术人员可将这一下载技术认为是惰性下载(lazy downloading),或者即时下载。根据本发明的各方面,管理员可将更新服务节点配置成以即时方式获得更新有效载荷,或者在获得更新元数据之后立即获得更新有效载荷。此外,在一个替换实施例中,更新元数据和更新有效载荷可被一起下载。

如图4B所示,有了更新列表中所标识的更新,在事件444处,子更新服务节点404根据更新列表中其唯一标识符请求用于“可用”软件更新的更新元数据。如同与父更新服务节点402的大多数其它通信交换一样,更新请求与授权令牌一起提交。应当注意,尽管在所示示例中,所有更新元数据是在一次访问中下载的,但根据本发明的替换方面(未示出),更新元数据可在一次以上的访问中下载。例如,在第一次访问中,首先仅下载确定软件更新是否适用和/或需要所需的更新元数据的元素,诸如适用性规则和对其它软件更新的依赖性。然后,在确定更新适用和/或需要之后,可获得其余的更新元数据。作为响应,在事件446处,父更新服务节点402向子更新服务节点404返回用于软件更新的元数据,子更新服务节点404进而将该更新元数据储存到更新信息存储216中。

在一个实施例中,更新元数据包括但不限于:与特定更新相关联的唯一标识符;更新的描述,诸如更新的大小、更新所解决的问题、修订/定位点信息等等;更新适用性规则,诸如更新是否要求安装前一更新、更新是否必须被单独安装、更新是否取代其它可用更新等等;最终用户许可证同意数据;以及在更新有效载荷未储存在父更新服务节点402上的情况下用于定位和/或访问该更新有效载荷的URL。

可任选地,在事件448处,子更新服务节点404提交从父更新服务节点402下载更新有效载荷的请求。作为响应,在事件450处,父更新服务节点402向子更新服务节点404返回更新有效载荷,子更新服务节点404进而将其储存在更新内容存储214中。

由于更新活动现在发生在子更新服务节点404上,因此在事件452处,子更新服务节点生成并向父更新服务节点402提交列出最近刚发生的更新活动的更新报告。之后,更新服务节点404再次延迟,直到下一次更新过程被调度运行(未示出)。

本领域的技术人员可以理解,上述事件仅用于说明的目的,且反映了一组特定的示例性事件和情况。和清楚,根据导致对上述事件的某些变化的具体细节和情况,也可发生其它事件。另外,应当理解,尽管子更新服务节点404从父更新服务节点402获得最新的“可用”软件更新,但是子更新服务节点可同时处理来自其子更新服务节点的请求。因此,以上事件序列应被视为仅仅是说明性的,而非对本发明的限制。

图5是示出在子更新服务节点上,诸如图1的公司更新服务节点104上执行的,用于从其父更新服务节点周期性地获得更新的示例性例程500的流程图。在框502处开始,子更新服务节点从父更新服务节点获得“可用”更新的同步的更新列表。从父更新服务节点获得“可用”更新的同步的更新列表将在下文参考图6来描述。

图6是适于在图5的示例性例程500中使用的用于从父更新服务节点获得“可用”更新的同步的更新列表的示例性子例程600的流程图。在框602处开始,如先前对于图4A和4B所讨论的,子更新服务节点向父更新服务节点认证和授权其自身,并响应于正确的认证和授权,接收授权令牌。在框604处,结合授权令牌,子更新服务节点建立与父更新服务节点的通信参数。建立通信参数允许父和子更新服务节点正确地建立父和子节点都理解的公共基础。通信参数包括,但不限于:通信更新协议或版本;产品分组;等等。

在建立了与父更新服务节点的通信参数之后,在框606处,子更新服务节点获得描述父更新服务节点为其提供/分发更新的软件产品的产品更新目录。在框608处,子更新服务节点选择当前寻求其更新的那些软件产品更新。在框610处,子更新服务节点向父更新服务节点提交更新同步请求,包括授权令牌和与所选择的软件产品相关联的“定位点”,该定位点标识了子更新服务节点上已有的当前修订和更新。

响应于更新同步请求,在框612处,子更新服务节点依照当前储存在子更新服务节点上的内容从父更新服务节点获得根据父更新服务节点上“可用”的软件更新同步的更新列表。如上所述,该更新列表用唯一标识符标识了父更新服务节点上对子更新服务节点“可用”的那些软件更新。之后,示例性子例程600终止。

再次参考图5,在从父更新服务节点获得了同步的更新列表之后,在判别框504,判断当前是否有任何软件更新“可用”于从父更新服务节点下载。这一判断是根据同步的更新列表中是否列出了任何更新标识符来作出的。如果当前没有任何软件更新“可用”于下载,则示例性例程500前进到延迟框510,其中示例性例程延迟/睡眠,直到下一更新时间段发生。或者,如果有更新“可用”于从父更新服务节点下载,则在框506处,子更新服务节点从父更新服务节点获得更新。从父更新服务节点获得“可用”更新在下文参考图7来描述。

图7是示出适于在图5的示例性例程500中使用的用于从父更新服务节点获得“可用”软件更新的示例性子例程700的流程图。在框702处开始,选择更新列表中的第一个更新标识符。在框704处,子更新服务节点从父更新服务节点获得对应于所选择的更新标识符的更新元数据,并将其储存在更新信息存储216中。

根据一个实施例,在框706处,子更新服务节点从父更新服务节点获得对应于所选择的更新标识符的更新有效载荷,并将该更新有效载荷储存在更新内容存储212中。可任选地,更新内容无需直接下载在子更新服务节点。如先前所提到的,子更新服务选择节点可被选择性地配置成以即时方式从父更新服务节点下载更新。根据该可任选处理,如图7所示,并非从框704前进到框706,而是示例性子例程700从框704前进到判别框708。

在判别框708处,在获得了所选择的更新标识符的更新元数据并可任选地获得了更新有效载荷之后,判断更新列表中是否有任何其它的更新标识符。如果有其它的更新标识符,则在框710处,选择更新列表中的下一更新标识符,并且子例程700返回到框704以进行另外的处理。例程700继续,直到在判别框708处确定更新列表中没有更新标识符,此时示例性子例程700终止。

再次返回到图5,在从父更新服务节点获得了“可用”更新之后,在框508处,子更新服务节点向父更新服务节点报告更新活动。之后,在延迟框510,示例性例程500延迟/睡眠预定量的时间,直到下一更新时间段,然后前进到框502以重复上述更新过程。

如图5所示,在判别框504,即使父更新服务节点上没有任何更新“可用”,子更新服务节点也可被可任选地配置成向父更新服务节点报告其更新活动。根据该替换配置,当没有更新可用时,示例性例程500可前进到框508以报告更新活动。

图8是在父更新服务节点上实现的用于响应于来自子更新服务节点的更新同步请求生成标识“可用”更新的同步的列表的示例性例程800的流程图。在框802处开始,父更新服务节点从子更新服务节点接收对标识“可用”更新的更新列表的更新同步请求。在框804处,选择更新同步请求中标识的第一个软件产品。

在判别框806处,判断对所标识的软件产品是否有任何可用更新。该判断是根据储存在更新信息存储216中的软件产品、根据由子更新服务节点提供的更新定位点、以及根据与子更新服务节点所属的组相关联的分发规则来作出的。根据该判断,如果有更新“可用”,则在框808处,将与“可用”更新相关联的唯一更新标识符写入更新列表中。在将“可用”更新的唯一更新标识符写入更新列表中之后,在判别框810,判断更新同步请求中是否还标识了其它的软件产品。如果更新同步请求中有其它的更新软件产品,则在框814处,父更新服务节点选择更新同步请求中标识的下一软件产品,并返回到判别框806以判断对所选择的软件产品是否有“可用”更新。或者,如果更新同步请求中没有标识其它软件产品,则在框814中,向子更新服务节点返回更新列表。之后,示例性子例程800终止。

如上所述,通过管理API 212,经由管理用户界面218或某一其它类似地配备的模块管理了更新服务节点。为更好地理解管理API 212如何操作,图9是示出如何对将更新服务节点配置成向客户机计算机分发软件更新利用管理API的图示。

如图9所示,管理员使用管理API来生成订阅904和组906。在更新过程908期间,更新服务节点使用对该更新服务节点可用的更新902以及订阅904和组906来向诸如客户机计算机921-922等客户机计算机分发更新。

如本领域的技术人员所理解的,管理员生成对特定产品或产品家族的更新以及更新类别的订阅。例如,产品可以是微软公司的Internet Explorer产品,而订阅指示该产品正在等待可用更新。类似地,产品家族通常指示多个产品,诸如微软公司的Office作为一个产品家族,它包括多个可标识产品。订阅通常也标识被批准下载到客户机计算机的更新的类型。例如,更新的类型可以是关键的、严重的、一般的等等。

根据本发明的一个实施例,客户机计算机被组织成组,而订阅和更新被应用于组。在一个实际的实施例中,每一客户机计算机属于两个组:所有计算机组以及一个其它组。根据该实际实施例,更新服务节点定义了所有计算机组和一个其它的、未分配计算机组。通过管理API 212,管理员能够自由地定义任何数量的其它组,并向组分配客户机计算机。无法向组分配客户机计算机将客户机计算机保留在未分配组中。简言之,根据该实施例,客户机计算机属于所有计算机组和一个其它组。组可包括任何数量的客户机计算机。用于应用软件更新的客户机计算机的组在图9中被示为框910、924和926。

根据一个实际的实施例,管理API 212是通过其来配置和管理微软公司的Windows软件更新服务的接口。在该实施例中,管理API 212一般由接口对象IUpdateServer(更新服务器)实现或通过其来访问。IUpdateServer接口对象的一个实际实施例的描述在本节的末端作为表1列出。该IUpdateServer接口对象是作为2004年3月12日提交的美国临时申请第60/553,042号的一部分包括的管理API文档的一部分,该申请通过引用包含于此。然而,表1中标识的各种接口调用一般在下文参考图10来描述。

图10是示出用于管理更新服务节点上的软件更新的分发的某些管理API调用的框图。有了对IUpdateServer 1002对象的访问,调用者可作出用于获取更新服务节点配置信息1004、当前订阅信息1006、当前批准规则1008、更新服务节点状态信息1010、获得更新1012、获得客户机计算机1014和获得组1016的接口调用。

配置信息接口调用1004提供对更新服务节点的可配置(且可读)值的访问,包括但不限于可用语言、谁是父更新服务节点以及该父更新服务节点的位置、代理服务器和地址、更新服务节点与其父更新服务节点同步更新的模式等等。在一个实际实施例中,如附录中所描述的,配置信息接口调用1004是IUpdateServer对象上的“GetConfiguration”(获得配置)接口调用,它返回更新服务节点的IConfiguration(配置)接口对象的实例。IConfiguation接口对象在所包含的临时申请的API中有更详细的描述。

订阅信息接口调用1006提供了对订阅信息的访问,包括但不限于最新订阅工作的状态、下一订阅工作(例如,将特定更新下载到客户机计算机)何时完成、订阅同步的频率等等。在一个实际实施例中,有至少两个获得订阅信息的不同接口调用。IUpdateServer对象上的“GetSubscription”(获得订阅)接口调用返回对应于更新服务节点上的特定订阅的ISubscription(订阅)接口对象,而“GetSubscriptions”(获得多个订阅)接口调用返回ISubscription接口对象的集合。另外,订阅是使用“CreateSubscription”(创建订阅)接口调用来创建的,该接口调用创建更新服务节点上的空订阅。ISubscription接口对象的细节在所包含的临时申请的API中有描述。

更新服务节点状态接口调用1010提供对更新服务节点状态的访问,包括但不限于当前部署的更新、可用更新等。在一个实际的实施例中,“GetUpdatesSummary”(获得更新概述)接口调用返回描述更新服务节点的整体更新概述信息的概述集合对象。关于该接口调用的细节在所包含的临时申请的API中有描述。

获得更新接口调用1012提供对关于可用软件更新的信息的访问。更具体地,该接口调用提供对系统中可用的所有软件更新的访问。在一个实际的实施例中,有若干获得更新信息的接口调用。“GetUpdate”(获得更新)接口调用返回提供关于系统上的特定更新的信息的IUpdate(更新)对象。另外,“GetUpdates”(获得多个更新)接口调用返回对系统可用的IUpdates(多个更新)对象的集合。关于这些接口调用的其它细节在所包含的临时申请的API中提供。

获得计算机接口调用1014提供对与更新服务节点相关联的客户机计算机的访问。在一个实际的实施例中,有至少两个访问关于各种客户机计算机的信息的接口调用,包括但不限于“GetComputer”(获得计算机)接口调用,它返回对应于接口调用中标识的客户机计算机的IComputer(计算机)对象,以及“GetComputers”(获得多个计算机)接口调用,它返回IComputer对象的集合,该集合包括与更新服务节点相关联的所有客户机计算机。如上所述,关于IUpdateServer对象上的该接口调用的其它细节在所包含的临时申请的API中有描述。

获得组接口调用1016提供对更新服务节点上定义的组的访问。如上所述,在一个实际的实施例中,每一客户机计算机属于所有计算机组和一个其它组。如果客户机计算机未被分配给一个组,则给客户机计算机默认属于未分配组。至少在该实际实施例中,有多个接口调用可用,包括但不限于“GetTargetGroup”(获得目标组)接口调用,它返回对应于传入该接口调用的组标识符的ITargetGroup(目标组)对象,以及“GetTargetGroups”(获得多个目标组)接口调用,它返回对应于更新服务节点上定义的所有组的ITargetGroup对象的集合。

本领域的技术人员可以理解,尽管描述了某些接口调用,但它们不是一组穷举的接口调用。实际上,如附录中所示的,管理API的一个实际实施例包括众多接口调用,其中大部分都未具体描述。

关于下表,即表1,缩写WUS是Windows更新服务器的首字母缩写词。

表1

IUpdateServer使用该接口来访问更新服务器组件。IUpdateServer接口从System.Object类导出。
公有方法IUpdateServer接口具有以下公有方法。方法描述 CancelAllDownloads()  CreateComputerTargetGroup(String)  Equals(Object)  GetComponentsWithErrors()  GetComputersNotContactedSinceCount(DateTime) GetComputerTarget(String)GetComputerTargetGroup(Guid) GetComputerTargetGroups()  GetComputerTargets() GetConfiguration()取消当前被下载到WUS服务 器的更新。创建用于为更新定客户机计 算机目标的目标组。确定指定的Object(对象)是 否等于当前Object。检索当前处于出错状态的服 务器组件的列表。自从指定时间以来未向WUS 报告其状态的客户机个数。检索指定的客户机计算机。检索指定的目标组。检索WUS服务器上的所有目 标组的集合。检索WUS服务器已知的所有 客户机计算机的集合。检索用于配置WUS服务器的
  GetContentDownloadProgress()  GetDatabaseConfiguration()  GetDownstreamServer(String)  GetDownstreamServers()  GetHashCode()  GetInstallApprovalRule()  GetRootUpdateCategories()  GetScabApprovalRule()  GetStatus() IUpdateServerConfiguration。检索当前正在下载的所有更 新的进展。检索用于确定数据库配置的 IDatabaseConfiguration。检索对指定下游WUS服务器 的接口。检索向该WUS服务器注册的 下游WUS服务器的集合。用作特定类型的散列函数。GetHashCode适用于散列算法以及如散列表的数据结构。检索用于自动下载并在目标计算机上安装更新的批准规则。检索WUS服务器上的顶层目 录的集合。检索用于自动扫描目标计算机以确定更新是否适用的批准规则。检索概括WUS服务器、更新 和客户机计算机的当前状态
  GetSubscription()  GetSubscriptionEvent(Guid)  GetSynchronizationInfo(Guid) GetType()GetUpdate(UpdateRevisionId)GetUpdateApproval(Guid) GetUpdateCategories()  GetUpdateCategories(DateTime,DateTime)  GetUpdateCategory(Guid) GetUpdateClassification(Guid) GetUpdateClassifications() 的统计量。检索用于管理同步过程的订 阅实例。检索标识对订阅的改变的订 阅事件。检索与特定同步过程有关的 信息。检索当前实例的类型。检索指定的更新。检索指定的批准。检索WUS服务器已知的所有 更新类别的列表。检索指定日期范围内添加的 更新类别。检索给定标识符的更新的类 别。检索所请求的更新分类。检索WUS服务器已知的更新 分类的集合。
 GetUpdateClassifications(DateTime,DateTime)  GetUpdateEventHistory(DateTime,DateTime) GetUpdateEventHistory(DateTime,DateTime,IComputerTarget) GetUpdateEventHistory(Datetime,DateTime,IUpdate) GetUpdateEventHistory(DateTime,DateTime,IUpdate,WusEventSource,WusEventld[]) GetUpdates() GetUpdates(ApprovedStates,DateTime,DateTime,UpdateCategoryCollection,UpdateClassificationCollection) LogMessage(LogLevel,String,params Objectp[])  RegisterComputer(Striong)  ResetAndVerifyContentState() 检索指定日期范围内添加的 更新分类。检索指定日期范围内所有客 户机的所有安装事件。检索指定日期范围内由指定客户机引发的所有安装事件。检索对指定更新和日期范围由所有客户机引发的所有安 装事件。基于指定准则检索事件。 检索每一更新的最新修订的 集合。基于指定准则检索更新集合。  将消息记入软件分发日志文 件。向WUS服务器注册客户机计 算机。强制WUS服务器上的所有更 新元数据同步,并验证WUS
  ResumeAllDownloads() SearchComputerTargets(String)  SearchUpdates(String) ToString()公有属性IUpdateServer接口具有以下公有属性属性 PreferredCulture 服务器上的所有更新文件有效。标识要下载的更新。检索其全域名包含给定串的 目标计算机的集合。检索其元数据包含给定串的 更新的集合。检索表示当前对象的串。  描述检索或设置希望WUS服务器 在返回串时使用的语言代码。

尽管示出并描述了本发明的各种实施例,包括较佳实施例,但可以理解,可在不脱离本发明的精神和范围的前提下对其进行各种改变。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号