详细描述
本发明涉及用于发现、鉴定和激活软件内插附件组件的方法、系统和计算机程序产品。在某些实施例中,计算机系统发现可用于应用程序的内插附件。内插附件组件管理器从应用程序接收对可用内插附件组件的请求。该请求包括指示该应用程序所请求的指定的内插附件组件类型的可选择内插附件组件特性。
该内插附件组件管理器将该可选择内插附件组件特性与用于一内插附件组件的内插附件组件条目的内容进行比较。该内插附件组件条目被包括在一内插附件组件索引中,该索引还包括了用于该计算机系统的其它内插附件组件的内插附件组件条目。该内插附件组件条目包括指示在与内插附件组件管理器的注册期间标识的内插附件组件的功能的一个或多个特性。该内插附件组件管理器基于比较的结果确定该内插附件组件是应用程序所请求的指定类型。该内插附件组件管理器向应用程序指示,该内插附件组件是对该应用程序可用的指定类型的内插附件组件。
在其它实施例中,一计算机系统确定对一应用程序可用的内插附件组件是否有资格用于应用程序。一内插附件组件管理器访问对应用程序可用的候选内插附件组件的一个或多个所标识的特性。该一个或多个所标识的特性指示了与该候选内插附件组件相关联的功能。该内插附件组件在内插附件组件索引中的内插附件条目中表示,该索引还包括用于该计算机系统的其它内插附件组件的内插附件组件条目。
该组件管理器从应用程序接收对满足一个或多个鉴定约束的内插附件组件的请求。每一鉴定约束表示为使该内插附件组件与应用程序适当地操作而要与该内插附件组件相关联的功能。该组件管理器将该一个或多个鉴定约束与一个或多个所标识的特性进行比较。该组件管理器基于将一个或多个鉴定约束与一个或多个所标识的特性进行比较的结果来确定该候选内插附件组件是否有资格用于该应用程序。
在其它实施例中,一计算机系统基于所请求的内插附件组件功能来加载用于应用程序的内插附件组件。一内插附件组件管理器发现计算机系统处为应用程序所请求的指定的内插附件组件类型的一个或多个内插附件组件。该内插附件组件管理器基于满足一个或多个鉴定约束的至少一个所发现的内插附件组件来鉴定该至少一个所发现的内插附件组件。该一个或多个鉴定约束代表为使一内插附件组件以所需方式与应用程序协同操作而要与该内插附件组件相关联的功能。该内插附件组件管理器根据用于该应用程序的一个或多个鉴定约束来激活合格的内插附件组件。
本发明的各实施例可包括如以下更详细讨论的包括计算机硬件的专用或通用计算机。本发明范围内的各实施例还包括用于承载或其上储存有计算机可执行指令或数据结构的计算机可读介质。这一计算机可读介质可以是可由通用或专用计算机访问的任何可用介质。作为示例而非局限,计算机可读介质可包括计算机可读存储介质,诸如RAM、ROM、EEPROM、CD-ROM或其它光盘存储、磁盘存储或其它磁存储设备、或可用于储存计算机可执行指令或数据结构形式的所需程序代码装置并可由通用或专用计算机访问的任何其它介质。
在此说明书和所附权利要求书中,“网络”被定义为允许计算机系统和/或模块之间的电子数据传输的一个或多个数据链路。当信息通过网络或另一通信连接(无论是硬连线、无线还是硬连线或无线的组合)传输或提供给计算机时,该计算机将该连接适当地视为计算机可读介质。由此,作为示例而非局限,计算机可读介质可包括可用于承载或储存计算机可执行指令或数据结构形式的所需程序代码装置并可由通用或专用计算机访问的网络或数据链路。
计算机可执行指令包括,例如使得通用计算机、专用计算机或专用处理设备执行一个或一组特定功能的指令和数据。计算机可执行指令可以是,例如二进制代码、诸如汇编语言等中间格式指令、或甚至是源代码。尽管此处以对结构特征和/或方法动作专用的语言描述了该主题,但是可以理解,所附权利要求书中定义的主题不必限于以上所描述的特征或动作。相反,所描述的特征和动作是作为实现权利要求的示例性形式而公开的。
本领域的技术人员将认识到,本发明可以在具有多种类型的计算机系统配置的网络计算环境中实施,这些计算机系统配置包括个人计算机、膝上型计算机、手持式设备、多处理器系统、基于微处理器或可编程消费电子产品、网络PC、小型机、大型计算机、移动电话、PDA、寻呼机等等。本发明也可在其中任务由通过网络链接(无论是通过硬连线数据链路、无线数据链路、还是通过硬连线和无线数据链路的组合)的本地和远程计算机系统都执行任务的分布式系统环境中实施。在分布式系统环境中,程序模块可以位于本地和远程存储器存储设备两者中。
图1示出了帮助发现、鉴定和激活软件内插附件组件的计算机体系结构100的一个示例。计算机系统结构100中所描绘的是计算机系统的组件。计算机系统可连接到网络,诸如局域网(“LAN”)、广域网(“WAN”)或甚至是因特网。由此,计算机系统和其它网络连接计算机系统可从连接到网络的其它计算机系统接收数据和向其发送数据。因此,计算机以及其它连接的计算机系统(未示出)可创建消息相关数据并通过网络交换消息相关数据(例如,互联网协议(“IP”)数据报和利用IP数据报的其它较高层协议,诸如传输控制协议(“TCP”)、超文本传输协议(“HTTP”)、简单邮件传输协议(“SMTP”)等)。
计算机系统体系结构100包括应用程序101、组件管理器102和存储103。在计算机体系结构100内,驻留在系统存储器内(或与其交互)的项由实线围绕。例如,应用程序101和组件管理器102被加载到系统存储器中。另一方面,驻留在存储103中的项由虚线围绕。例如,组件121、122和123和以及组件索引104的组件条目驻留在存储103中。在不同的时刻,相同的项可驻留在系统存储器和/或存储103中。例如,组件122可被激活,使得组件122的各部分从存储103被加载到系统存储器中(当仍驻留在存储103中)。
一般而言,应用程序101是被配置成利用软件内插附件组件来增强功能的应用程序。例如,应用程序101可以是能够加载外部字典的文字处理应用程序,或能够加载用于特定类型内容的插件的web浏览器。应用程序101可具有用于与软件内插附件组件协同操作的程序接口。应用程序101还可包括允许应用程序101的用户指定软件内插附件组件的类型以及软件内插附件组件为与应用程序101协同操作而要符合的约束的用户界面。
组件管理器102一般被配置成向应用程序提供可用软件内插附件组件。组件管理器102可以被包括在操作系统中,和/或可以是管理用于应用程序的软件内插附件组件的中间件的一部分。组件管理器102包括接收对软件内插附件组件的应用程序请求、标识满足该请求的软件内插附件组件、以及向应用程序返回所标识的软件内插附件组件的功能。
并且,作为注册过程的一部分,当一软件内插附件组件被安装到计算机体系结构100中时,组件管理器102可访问该软件内插附件组件。例如,组件管理器102可访问组件122。组件管理器102可分析所访问的软件内插附件组件(例如,基于安装信息)来标识存储103处要储存组件122的位置,诸如文件路径和文件名。
组件管理器102还可分析所访问的软件内插附件组件来标识(例如,通过反射(reflection))该软件内插附件组件的类型以及该软件内插附件组件的操作能力。例如,组件管理器102可分析组件122上的属性以标识组件122的类型和操作能力。软件内插附件组件类型可包括,例如字典、内容处理程序等。软件内插附件组件操作能力可包括用于软件内插附件组件入口点、软件内插附件组件所需或所支持的隔离边界、以及与软件内插附件组件相关联的安全性设置。
组件管理器102可构造包括指示软件内插附件组件的所标识的功能(即,类型和操作能力)的一个或多个特性的组件条目。例如,组件管理器102可构造用于组件122的至少包括特性141和151的组件条目131。组件条目中的特性可指示软件内插附件组件的类型,诸如字典、内容处理器程序等。组件条目中的特性还可指示储存软件内插附件组件的位置(例如,在文件系统中)。
组件条目中的特性还可指示用于实现用于该软件内插附件组件的接口的合约(或入口点协议)。表示入口点的特性可被包括在可扩展标记语言(“XML”)清单中,该清单遵循指定的清单模式,并且定义了包括在软件内插附件组件中的一个或多个程序集。组件管理器102可分析软件内插附件组件来标识入口点,并在组件条目中的特性中表示该入口点。入口点可以是程序集中的可实例化类。该类可实现由主机应用程序用于软件内插附件组件的初始挂钩(hookup)和控制的标准协议。以下代码示例表示一入口点协议:
Public interface IEntryPoint Protocol:IProtocol
{
void Startup(IProtocol hostObject);
void Shutdown();
}
特性还可指示用于运行软件内插附件组件的位置(或隔离边界)。位置可指示一软件内插附件组件是否与在作出请求的应用程序的进程内或进程外运行或在与作出请求的应用程序相同或不同的应用程序域中运行兼容。所支持或所需的隔离边界可包括本地应用程序域、共享应用程序域、私有应用程序域以及其它进程。
特性还可指示与软件内插附件组件相关联的安全性设置。例如,特性可指示用于运行一软件内插附件组件的一组许可。
组件管理器102可在组件索引104中储存所构造的用于软件内插附件组件的组件条目。组件索引104可以实际上是任何数据存储库,诸如系统注册表、共享的SQL服务器、XML文件、现用目录(Active Directory)服务器、因特网或文件系统目录。
在组件管理器102分析了软件内插附件组件之后或与其并行地,软件内插附件组件可被储存在存储103中。例如,组件122可以连同组件121和123(以及由垂直省略号表示的其它软件内插附件组件)一起储存在存储103处。由此,存储103中的每一软件内插附件组件可具有组件索引104中相应的组件条目(具有指示功能的一个或多个特性)。例如,组件条目131可对应于组件122,组件条目132可对应于组件121等等。
组件管理器102可按照组件管理器102已知的准则,例如内插附件的开发者、应用程序的开发者等,来对组件索引104排序。通过对索引排序,例如在发现期间使用这些准则的索引可以变得更高效。
如上所述,组件条目中的属性指示了对应的软件内插附件组件的功能。由此,特性141和151可指示组件122的功能,而特性142和152可指示组件121的功能。存储103处的组件123以及其它组件还可具有组件索引104中包含一个或多个指示性特性的相应组件条目。尽管组件条目131和132各自描述了两个特性,但是至少部分地基于组件管理器102对相应软件内插附件组件的分析,实际上任何数量的特性可被包括在组件条目中。
图2示出了用于发现对应用程序可用的内插附件组件的方法200的流程图。方法200将参考计算机系统体系结构200中的组件和数据来描述。
方法200包括从应用程序接收对可用内插附件组件的请求的动作(动作201)。该请求包括了指示该应用程序正在请求的指定的内插附件组件类型的可选择内插附件组件特性。例如,组件管理器102可从应用程序101接收包括特性112的请求111。特性112可指示应用程序101所请求的指定的软件内插附件组件类型。在某些实施例中,特性112被预配置到应用程序101中。在其它替换实施例中,应用程序101接收对特性112(或某一其它可选择特性)的用户选择。
方法200包括将该可选择内插附件组件特性与用于内插附件组件的内插附件组件条目的内容进行比较的动作(动作202)。该内插附件组件条目被包括在内插附件组件索引中,该索引还包括了用于计算机系统的其它内插附件组件的内插附件组件条目。该内插附件组件条目包括指示在向内插附件组件管理器的注册期间标识的内插附件组件的功能的一个或多个特性。例如,组件管理器102可发出针对组件索引104中的组件条目的查询113。由此,可以将特性112与组件条目131中的特性141和151(指示组件122的功能)进行比较。
方法200包括基于比较的结果确定内插附件组件是应用程序所请求的指定类型的动作(动作203)。例如,组件管理器102可基于将特性112与特性141(或组件条目131中的某一其它特性)进行比较的结果来确定组件122是应用程序101所请求的软件内插附件组件类型。组件管理器102还可以确定一个或多个其它组件也是指定类型的组件。组件管理器102可编译一标识任何指定类型的组件的列表,例如组件列表114。组件列表114还可包括来自组件条目的其它特性(除了类型之外),诸如指示软件内插附件组件的操作能力的特性。
方法200包括向应用程序指示该内插附件组件是对应用程序可用的指定类型的内插附件的动作(动作204)。例如,组件管理器102可向应用程序101指示组件122是由特性112指示的类型的组件。当编译指定类型的组件的列表,例如组件列表114时,组件管理器可将列表的至少一部分发送给应用程序101。例如,组件管理器102可将部分列表114P发送给应用程序101。
部分列表114P可包括标识指定类型的每一软件内插附件组件的特性。组件管理器102可保留指示软件内插附件组件操作能力的其它特性而不将其发送给应用程序101。或者,组件管理器102可将指示软件内插附件组件操作能力的特性发送给应用程序101。因此,应用程序101可以了解所请求的指定类型的任何可用的软件内插附件组件(以及可能的该软件内插附件组件的其它功能)。
方法200可以对内插附件组件索引中的每一条目(例如,组件索引104中的每一条目)重复,以潜在地标识指定类型的其它内插附件(例如,组件121和123)。由此,可发现指定类型的多个内插附件(即,所有注册内插附件的子集)。因此,可基于在注册内插附件时提供给内插附件管理器(例如,组件管理器102)的信息来标识(发现)内插附件组件。方法200可用于对可能由应用程序用于实现指定功能的内插附件组件进行粗粒度的选择。
图3示出了用于确定可用于一应用程序的内插附件组件是否有资格用于该应用程序的方法300的流程图。方法300将参考计算机系统体系结构100中的组件和数据来描述。
方法300包括访问对应用程序可用的候选内插附件组件的一个或多个所标识的特性的动作(动作301)。该一个或多个所标识的特性指示了与该候选内插附件组件相关联的功能。该内插附件组件在内插附件组件索引中的内插附件组件条目中表示,该索引还包括用于计算机系统的其它内插附件组件的内插附件组件条目。例如,组件管理器102可访问来自组件条目131的特性141和151(指示组件122的功能)。或者,组件管理器102可访问来自先前响应于发现指定类型的软件内插附件组件而编译的组件列表114的特性141和151。
在其它实施例中,组件管理器102访问未储存在组件条目索引104中的与组件122相关联的其它信息。其它相关联的信息可单独访问和/或与包括在组件索引104中的信息组合访问。其它相关联的信息可以对组件122可访问或可用,或可对其不可访问或不可用,并且可以在注册过程中已经或尚未被提供给组件管理器102。此外,组件管理器102可选择丢弃或忽略在注册过程中从组件接收到的信息。由此,即使组件122将相关联的信息提供给组件管理器102,相关联的信息也可以不被包括在组件条目131中(并且可以完全不在组件索引104中)。
方法300包括从应用程序接收对满足一个或多个鉴定约束的内插附件组件的请求的动作(动作302)。每一鉴定约束表示为使一内插附件组件与该应用程序适当地操作而要与该内插附件组件相关联的功能。例如,组件管理器102可从应用程序101接收约束116。约束116可表示为使一软件内插附件组件与应用程序101适当地工作而要与该软件内插附件组件相关联的内插附件组件功能。例如,约束116可指示一软件内插附件组件在与应用程序101操作时要利用指定的入口点协议、在私有应用程序域中运行等等。
在某些实施例中,内插附件组件在组件索引中注册一个或多个约束,该约束指定在应用程序可以与该内插附件组件协同操作之前该应用程序要满足的对应的一个或多个特性。由此,组件122可以注册指示应用程序101为与组件122协同操作而要满足的特性的一个或多个约束。组件管理器102可将关于内插附件组件的约束发送给应用程序。例如,组件管理器可将约束116(例如,关于组件122)发送给应用程序101。
内插附件组件约束可用于检查应用程序的行为,或请求应用程序更改其行为以便与内插附件组件协同操作。例如,应用程序101可以默认为在同一应用程序域中运行所有内插附件组件。然而,组件122可以约束应用程序101在一单独的应用程序域(例如,仅供组件122使用)中运行组件122。由此,在某些实施例中,鉴定过程可被视为应用程序和内插附件组件之间的协商。即,内插附件组件可能需要满足应用程序的约束,而应用程序可能需要满足内插附件组件的约束以便在应用程序和内插附件组件之间的适当的协同操作。对约束116描述的双向箭头表示了协商。
方法300包括将一个或多个鉴定约束与一个或多个所标识的特性进行比较的动作(动作303)。例如,组件管理器102可将约束116与特性141和151进行比较。方法300包括基于将一个或多个鉴定约束与一个或多个所标识的特性进行比较的结果来确定候选内插附件组件是否有资格用于该应用程序的动作(动作304)。例如,组件管理器102可基于将约束116与特性141和151进行比较的结果来确定组件122是否有资格用于应用程序101。
即,组件管理器102可确定由约束116指示的操作能力是可由组件122实现的操作能力(如由特性141和151所指示的)。例如,如果一约束指示一软件内插附件组件要在私有应用程序域中运行并且一软件内插附件组件的特性指示它能够在私有应用程序域中运行,则该软件内插附件组件满足该约束。另一方面,如果一约束指示一软件内插附件组件要实现一指定的入口点协议但是一软件内插附件组件的特性指示它不能实现该指定的入口点协议,则该软件内插附件组件不满足该约束。
方法300可以对多个(先前发现的)内插附件组件重复,以创建有资格用于应用程序的潜在内插附件组件的列表。由此,满足鉴定约束的多个内插附件可以有资格用于一应用程序。如上所述,内插附件组件可基于在注册内插附件时提供给内插附件管理器(例如,组件管理器102)的信息以及内插附件管理器未提供或保留的其它信息来鉴定。方法300可用于对可能被应用程序使用的(先前发现的)内插附件组件进行细粒度的选择。
应当理解,对约束、特性、比较和满足约束的描述仅是示例。本领域的技术人员在仔细阅读了本说明书之后可以清楚,本发明的各实施例可利用其它约束、特性和比较,并且除了所明确描述的之外,约束可以用其它方式来满足。
在某些实施例中,方法200和方法300被组合使用以提供指示内插附件组件和应用程序有资格彼此协同操作来实现指定功能的内插附件组件列表。可使用一粗粒度发现过程通过将一个或多个所接收到的特性与组件索引条目中的特性进行比较来发现可用组件内插附件的子集。当对一组件索引排序时,该发现过程可有效地提供满足一个或多个所接收到的特性的可用内插附件组件的子集。从该所发现的内插附件组件的子集中,一细粒度鉴定过程可鉴定一个或多个内插附件组件和应用程序的协同操作性。鉴定可基于组件索引中的信息和/或与内插附件组件或应用程序相关联的其它信息。鉴定可以是双向的(协商)。即,内插附件组件可能需要满足应用程序约束,而应用程序可能需要满足内插附件组件约束。
合格的软件内插附件组件可被包括在一列表,例如合格组件列表117中,并被发送给应用程序101。在某些实施例中,应用程序101用从合格组件列表中选择一适当的软件内插附件组件的选择逻辑来预配置。在其它实施例中,应用程序101可呈现允许用户从合格组件列表中选择一适当软件内插附件组件的用户界面。
应用程序101可将组件选择,例如组件选择118返回给组件管理器102。作为响应,组件管理器102可激活所选的软件内插附件组件。例如,组件管理器102可向文件系统发送激活119以激活组件122。激活119可包括用于在存储103中定位组件122的标识符,诸如目录路径和名称。激活119可包括根据约束116来激活组件122的命令。例如,如果应用程序101请求了一共享应用程序域,则组件122可在与应用程序101共享的应用程序域中激活。激活119可以使得组件122被加载到存储器中,并根据约束116在应用程序101和组件122之间建立通信路径。
可根据满足的约束建立的一种类型的通信路径是流水线,例如流水线181。流水线可包括一个或多个节点应用程序编程接口(以下称为“API”)、一个或多个适配器以及至少一个流水线协议。这一流水线可包括各种数量和组合的API、适配器和流水线协议,并且不必包括全部的流水线元素。API指的是由应用、程序、函数以及可编程和可执行代码的其它集合体用来指示由诸如操作系统或运行时执行环境等对应的执行环境对过程的执行的一组例程。适配器指的是能够在通信上将一个API适配到另一个API、并且可以被串行链接或经由流水线协议链接的模块或对象。流水线协议指的是对象可通过其进行通信的规范或合约(API是其一个非排他示例)。
由此,流水线(例如,流水线181)可以是从主机API适配器经由流水线协议流入内插附件API适配器以将第一节点应用程序(例如,应用程序101)连接到第二节点应用程序(例如,组件122)的代码模块或对象的链。然而,应当理解,也可根据满足的约束建立其它类型的通信路径。由此,本领域的技术人员在仔细阅读了本说明书之后可以清楚,本发明的各实施例可以利用除了流水线之外的其它类型的通信路径。
在替换实施例中,应用程序101可在请求111中包括约束116以及特性112。在这些替换实施例中,组件管理器102可向组件索引104查询在特性112中指示的类型的并且满足约束116的软件内插附件组件。满足查询的软件内插附件组件可在合格组件列表117中返回给应用程序101。
图4示出了用于基于所请求的内插附件组件功能来加载用于应用程序的内插附件组件的方法400的流程图。方法400将参考计算机系统体系结构100中的组件和数据来描述。
方法400包括发现计算机系统处是应用程序请求的内插附件组件的指定类型的一个或多个内插附件组件的动作(动作401)。例如,通过与组件条目中的特性进行比较,组件模块102可发现为由特性112所指示的指定类型(例如,字典、内容处理程序等)的一个或多个组件121、122和123。
方法400包括基于满足一个或多个鉴定约束的至少一个所发现的内插附件组件来鉴定至少一个所发现的内插附件组件的动作(动作402)。一个或多个鉴定约束代表为使一内插附件组件以所需方式与应用程序协同操作而要与该内插附件组件相关联的功能。例如,组件管理器102可鉴定满足约束116的组件121、122和123中的任一个。满足约束116(例如,通过与组件条目中的特性的比较)表示一组件包括了以所需方式与应用程序101协同操作的功能(例如,具有适当的许可、具有兼容的入口点协议、可在适当的应用程序域中运行等等)。
方法400包括根据用于应用程序的一个或多个鉴定约束来激活合格内插附件组件的动作(动作403)。例如,组件管理器102可根据约束116来激活用于应用程序101的组件122。
本发明的各实施例促进了动态且灵活的软件内插附件组件选择,而无需应用程序包括用于作出这些选择的逻辑。软件内插附件组件即使在该软件内插附件组件被储存在各个不同位置时也可按照类型来发现。软件内插附件组件可在被加载以用于应用程序之前被鉴定其适当的功能。鉴定软件内插附件组件降低了加载不适当地配置的或恶意软件内插附件组件的可能性。因此,本发明的各实施例促进了对软件内插附件组件的高效且安全的使用。
本发明可以用其它具体形式来实施而不脱离其精神或本质特征。所描述的实施例在所有方面都被认为是说明性而非限制性的。因此,本发明的范围由所附权利要求书而非以上描述来指示。落入权利要求书的等效技术方案的意义和范围之内的所有改变都被包含在其范围之内。