具体实施方式
现在参考附图,图1说明了依据本发明某一实施例的具有代表性的计算设备150。计算设备150具有像操作系统152和一个或多个应用程序154这样的软件产品。
操作系统152是用于计算设备150的基础软件控制程序,执行各种功能,包括提供用户接口,管理一个或多个应用程序154的执行,以及控制各种各样输入/输出(I/O)设备的数据输入和数据输出。应用程序154是一个或多个可以在计算设备150上执行的普遍的多样的软件应用程序。这样的应用程序154的例子包括教育程序,参考程序,生产程序(例如,字处理,电子制表软件,数据库),娱乐程序,实用性程序(例如,通信程序)等等。应用程序154可以由用户安装在计算设备150上,或可选择地由计算机设备150的制造商和/或发行人预先安装。
图1的操作系统152将其功能分成像所说明实施例中的部分#1至部分#N这样的若干组件156。每一个组件156各自都具有一个相应的清单158,例如清单#1至清单#N。组件156包括一个或多个文件(或文件标识符)的集合。该文件可以包括像一个可执行文件,一个动态链接库(DLL),或一个组件对象模块(COM)这样的软件指令。该文件也可以包括一个或多个组件156使用的数据。在执行中,对应于操作系统152的特定功能的文件(例如数据和/或指令)被一起分组到相同的组件156中。例如,可以有一个游戏组件,一个通信组件,以及一个文件系统组件。导致组合的文件的分组可以是静态的,或者换句话说是可以随时变化的。在一个例子中,更新操作系统152可以导致选定的文件从某一组件156中删除并添加到其它的组件156中。
请进一步参考图1,每一个清单158包括描述相应部分156的信息。任何一个关于相应的部分156的多种元数据可以被包括在每一个清单158中。在执行中,清单158识别相应的组件156和其它组件156的版本,如有的话任何相应的组件156可以被依赖。举个例子,为了使在组件156中的一个或多个文件更好地执行,来自其它组件的一个或多个其它文件(例如,一个DLL文件)可以被安装在计算机设备150上。在这个例子中,清单158表示组件156依赖于其它的组件。
由于现有操作系统的复杂性和规模,创建满足市场或竞争需要的新产品变得越来越困难。当今的操作系统本质上更加整体化,因而,很难理解各种各样的组件之间的关系。在产品的寿命周期期间,信息的缺乏使得操作系统的维修变得很困难。为了克服这些以及其它问题,本发明的实施例将操作系统组合化。换句话说,本发明允许将一个软件产品表示为一种组件的集合。本发明一个方面涉及用于以组合的方式构造一个操作系统的几个抽象概念以便有助于新产品的创建和对现有产品的维修。这些抽象概念可以被应用于包括应用程序在内的任何软件产品和任何操作系统。
一个组件定义模式说明了本发明引入的若干抽象概念,即,组件(也称作集合),类,特征,插件,产品,和SKUs(库存单位)。在这个例子中,组件156表示分配,维修,和/或绑定的一个可再利用的,可共享的,自我描述的微型单元。它是描述自身组件以及以声明的方式用于安装,维修,和/或绑定到必要资源的所有相关的信息(例如,元数据)的最基本的抽象概念。
下面将详细描述本发明一个具体实施例,一个类对象162(见图4)表示将一系列通用的组件156分类的机制;一个特征对象164(见图5)表示组件156和/或特征164的一个合成物并且被当作创建一个产品对象166(见图7)的构件块使用;以及一个插件对象168(见图6)表示组件156,特征164,类162,和/或其它插件168的合成物。例如,插件对象168用于分类组件156以实现管理的目的。进一步,在本实施例中的产品对象166表示特征164和/或组件156的高级合成物以及一个SKU对象170(见图8)表示产品166的购买机制(例如,一个SKU170可以包含若干产品166)。
这里描述的组件定义可以用于描述通用应用程序而不是专用的操作系统组件。换句话说,任何应用程序可以用组件定义来描述。
依据本发明实施例的组合体系机构定义了在设计期间和运行期间用于管理组件的概念,组件储存库,以及编程模式。组合化的战略好处包括灵敏度,速度,支持能力,以及增大的收入机会。即使是横越用户和服务器线,创建一个用产品或SKU对象表示的新的软件产品变得很容易。选择正确的组件并提供某些附加的配置从而创建一个新产品是一个相对简单的任务。在相对短的时间内创建新产品的灵敏度提供了有效地竞争的能力并避免了失去市场的机遇。例如,提供附加的组件随后加入到一个当前产品是可能的,其允许一个用于升级一个额外产品,其增加许可的综合数量,等等。所有这些附加的能动性会导致产品的附加收入。
组合化也有助于减少产品图象的数量而初始设备制造商(OEM)或公司必须保留,其会节省大量成本。依据至少一个本发明的实施例,多数组件信息是说明性的从而使组件可以以下线方式被安装。这减少了在目标设备上安装整个产品所花费的时间并且为OEM,公司,终端用户等等减少了大量成本也增加了客户的满意度。
本领域的技术人员了解维护作为产品周期一部分的重要性。由于评估基于每一个组件提供的说明性信息上的变化的影响是很容易的,因此维护本发明实施例的一个组合化产品是相对的简单。在一个更加孤立的环境中测试组件以提高测试效率也是很容易的。转而,减少了在软件产品中的所有的弱点。
在这里描述的组件定义图解涉及了组件156为了安装,升级服务,和绑定适当的资源所描述的信息。在这个关系中,图2说明了依据本发明某一具体实施例具有示范性的组件156和相应的清单158。依据本发明的具体实施例,每一个组件156用一个相应的清单158来表示。组件156包括至少一个文件174并且可以任意选择地包括不只一个(n)文件。虽然和在图2中说明的文件一样,组合文件156可以任意选择地包括一个或多个文件174的指示符或其它标识符而不是实际的文件。
组合部分156对应于清单158。在说明的例子中,清单158包括识别组件156的一个组件标识符(例如,通过名称或某些其它唯一的标识符)。这种对应可以任意选择不同的方式被保留,例如包含在组件156中清单158的一个标识符(未示出),以保留在组件156和清单158之间的一个固有对应性中的一个数据结构来存储组件156和清单158(或其标识符),等等。清单158可以是一个可扩展标识语言(XML)文件。
如图2的具有示范性的列表所示,清单158也包括一个识别零或多个组件156所依赖的组件的相关的组件列表。所识别的相关的组件是那些使组件156正常运行所必须的作为操作系统图像的一部分被安装的组件。在这个说明性例子中,标识符识别组件156正常运行所必须的组件,但是可以任意选择应该包括在内的组件(例如,除了那些无需的,由组件156优选的作为操作系统一部分的组件)。除了等同性和从属性,在这个例子中的清单156中也具体描述了组件156的其它细节,即,通用信息(包括所有者,测试者,研发者,描述,等等。),资源(包括文件,注册信息,等等。),设置(配置),成员,和其它信息。
在可选择的实施例中的清单158也可以包括有助于安装和/或升级的一个优先次序和一个版本指示器。
换句话说,保留在清单158中的某些或全部信息可以被保留在不同的位置。举个例子,某些或全部信息可以被合并到图1的组件156中。
APPENDIXA的例子进一步说明了本发明关于清单158的方面。
下面进一步具体说明了关于用于本发明举例说明的组合化机制结构的主要提取部分。
如上所述,涉及作为组件156(或集合)的对象表示分配,服务,和绑定的一个可再利用或可共享的自我描述的基本单元。在图3的实施例中,组件156可以依赖其它的组件156和/或特征164来运行,例如,它们展示了相对于这些其它对象的从属性。组件156也可以是不同开放组的成员,即,类162。在这个例子中,可延伸到一个友好的研发者,涉及作为“自身”的多部分性能“包”识别每一个组件156。组件自身具有下述属性,例如:名字,版本,处理器机制结构,语言(例如,“us-eng”或“jpn”),构造类型(例如,自由或调试),以及发明者的识别。名字属性以地点独立的字符串的形式来描述在一个实施例中的特定组件156。一个四个部分的版本号,例如,其通常允许一个“主要的.次要的.构造.修订”格式,其是由自身的版本属性提供的。密码安全信息允许在自身的发明者的ID属性中出现的组件自身是安全的。
如上所设置的那样,每一个组件156是由一个或多个文件和一个相关的清单158组成的。如图3所示,清单158描述了组件156的详细情况。在图3的具体实施例中,涉及作为组件或集合的对象可以具有和其它的组件156,一个类162,和/或一个特征164有关的从属性。
图4所示的类对象162定义了在用类的成员表示的成员信息中的一个开放组,而不是在一个类清单中表示的成员信息。例如,可以建立一个类162用来将和文本编辑例如Notepad和Wordpad相关的一个或多个组件156归类。类162也使用一个类似于组件156的等同性机制来识别。在一个实施例中,类162具有像等同性,通用信息,以及其它信息这样的具体细节。
现在参考图5,特征对象164表示组件156的构成和/或其它的特征164。特征164被当作软件产品构件块来使用,可以从安装中添加或删除。特征164包含和组件156,其它的特征164,以及类162相关的关系,而不是依赖于其它对象。换句话说,依据本发明实施例特征164不具有从属性。举个例子,表示一个合并的网页浏览器的一个特征对象164和表示一个媒体播放应用程序的其它特征对象164都是以一个操作系统来安装的。特征164由等同性,通用信息(例如所有者,测试者,研发者,描述,等等),成员,成份,和其它信息组成。在本发明的一个实施例中,特征等同性在结构上类似于组件等同性并常用于识别每一个特征164。特征164可以是若干不同的类162(见图4)的成员。
图6图解地说明了插件对象168。如所示,插件168是组件156,特征164,类162,以及其它插件168的组组件。和类162相比,插件168更接近组。插件168主要用于管理目的。例如,一个OS的家用版本可以使用由“cab1”,“cab2”,“cab3”和“cab4”表示的四个不同的插件168来安装。在这个例子中的插件对象168是以组的形式来实现安装目的的。在图6的实施例中插件168只在其它的插件168上确定从属性。在这里依据组合化定义描述的每一个插件168是由像等同性,通用信息,成员,成份,从属性,以及其它信息这样的具体内容组成的。
图7的对象166表示特征164和/或组合部分156的一个高层次的合成。它也具有用于构造组合特征164和组件156的性能。依据本发明的一个实施例,产品设计者选择产品166(见图13)的特征164。产品对象166具体的包括等同性,通用信息,成份,和其它信息。
现在参考图8,SKU对象170表示产品166的安装媒体(例如,包括在磁盘上用于安装的产品)。合适的安装媒体包括软磁盘或压缩磁盘以及网页下载小型文件。SKU170也可以由一个以上的产品164组成(见图13)。本发明至少一个实施例使用SKU设计者工具来创造一个SKU清单。类似于上述的其它提取部分,SKU170包含等同性,通用信息,产品,和其它信息。
图9至图12进一步说明了组件156和其它对象之间具有示范性的关系。特别是,图9所示的组件156可以依赖于出现在一个或多个类162,一个或多个特征164,和/或一个或多个组件156中的一个或多个二进制文件。另外,组件156可以说明在类162中的成员。在图10的示范性关系图表中,类162可以用于将一个或多个特征164,一个或多个组件156,和/或一个或多个插件168分类。如上所述,类对象162将一个开放组表示成其它对象说明的成员。图11说明了特征164包括一个或多个特征164和/或一个或多个组件156并且特征164可以说明在一个或多个类162中的成员。现在参考图12,插件168表示一个或多个插件168,类162,特征164,和/或组件156的分组。在这个例子中,插件168可以属于一个像类162这样的开放组或依赖于像其它插件168这样的关闭组。
图13提供给定义特征164一个将OS二进制文件的各种各样的组件156分类的例子。然后该特征164被分类到定义的产品166,依次被包括用于安装SKU170。不同的计算机可以具有基于同一操作系统上的不同的操作系统图像。例如,不同的OEM可以以不同的方式定义相同的操作系统(例如,由于可以使用不同的预置设置,因此带有初始屏幕的操作系统的开机程序可以识别该OEM)。也可以包括不同的功能(例如,屏幕存储器,背景或题目,像通信程序这样的软件应用程序,游戏,等等)。这些附加的功能可以通过OEM,或可选择的其它制造商或分销商来提供。因而,许多不同的组件可以是实际上安装在一台特定的计算机上作为一个操作系统图像的子设备的操作系统的一部分。另一方面,特定的OEM组件和清单设备包括可以通过OEM作为操作系统图像一部分被安装的附加的组件。
操作系统可以由任何广泛多样的理由被升级。举个例子,错误的安装某一组组件的某一文件可能是有效的,在一个组合部分中的新的功能可以是有效的(例如,更新或添加文件),新的组件可以是有效的,等等。
另外,一个新的组件可以作为操作系统的一部分按照在先的组组件被安装而不是代替在先的组件。这允许不同的应用程序使用它们优选的任何组件的版本(或是编程使用)。
举个例子,一个OEM可以按照家用,商用,服务用,等等提供多样的基本的计算机配置。在这个例子中,除了包括不同的功能外,每一个配置都是基于相同的操作系统。附加的网络和通讯功能可以被包括在服务配置中,但不包括在任何家用或商用配置中,以及附加的游戏或音频播放功能可以包括在家用配置中,但不包括在商用或服务配置中。图13示出了包括基本的家用产品的具有示范性的额外产品。
在一个实施例中,构造软件产品是从产品对象中提及的组件的储存库处创建一个运行时间图像的行为。构造通常是以下线的方式产生,例如计算机X的运行时间图像是在计算机Y上创建出的。从属性完全是从高层次产品中分解出的。一旦从属性被分解,在从属树中的每一个节点被安装到对象。对象表示安装已经以一种下线的方式被创建。每一个组件的安装涉及安装每一种资源(例如,注册码和文件),其是组件的一部分,并且将一条入口放置在安装组件的储存库处以跟踪该安装的组件。
图14依据本发明的实施例示出了编程模式的第一层提取部分。尤其是,例如,该示范性图表说明了使用统一模式语言(UML)的不同的第一层对象(或分类)。在这个例子中,对象涉及使用UML的程序员。每一个接口直接映射到组合化的第一层概念。
操作系统的安装程序通过操作系统的组合化被大大简化了。特定的OEM功能通过包括合适的组件和相应的清单可以被很容易地添加。此外,通过简单地代替相应的组件用于改善性能,错误安装,以及诸如此类的操作系统的更新可以被容易地合并到安装程序中。换句话说,一个附加的更新部分和清单设备对于包括这样更新的操作系统安装配置是有效的。
图15说明了本发明使用的具有示范性的组合化机制结构。图15所示的可扩展机制结构允许构造一个OS安装,包括安装和卸装组件,并启动产品/SKU灵敏度。而且,该体制机构提供用于服务于一个运行的OS和一个OS图像的子结构。该组合化机制结构为组件的创建和管理提供一个通用的结构。它也允许以一种类的方式从配置中构造一个运行时间的图像。一种组件管理接口(CMI)是可以被不同用户使用的用以访问由组合化机制结构陈列的功能。该工具通常可以被划分为下述几类:设计-时间工具;运行-时间工具;以及构造-时间工具。设计-时间工具是用于设计时间的工具(例如,一个组合部分设计者设计或创建组件以及对象设计者设计或创建一个配置)。运行-时间工具是用于在一个运行-时间图象(安装)上管理现有的组件。这可以包括像可选择的组件管理器(OCM)这样的功能,其管理安装在系统上的组件。运行-时间工具的另一个例子可以是一个服务用户,其与一个远程服务器交流从而使组件更新并且更新安装在一个装置上的组件。构造-时间工具是使用在构造实验室中。它们主要用于从一个配置中创建运行-时间图象。
如图15所示,CMI具有一个核心层和一个实用程序性层。CMI核心层由不同的功能部件组成,其通常是作为已知的接口被外露,消耗。该层是由一个核心CMI对象模块,一个储存器和文件存储器,以及串行器/非串行器组成。核心CMI对象模块陈列了易于编程的作为CMI用户接口的多个不同的第一类抽象。它们通常以相对容易地使用格式反映组合化提取部。例如,IAssembly提取“组件”概念。在这个实施例的抽象不具有任何与其相关的功能性。它们是通过在抽象陈列的方法可以被恢复并设定的属性的集合。下述列表包括通过核心CMI对象模块中的一个接口陈列出的一些提取部:IAssembly;IFeature;ICategory;IPackage;IProduct;ISku;IConfiguration;IRepository。
在图15的例子中一个组件储存库用于管理存在一个存储库处的组件。如上所述,每个组件都具有元数据(例如,和数据相关的信息)和实际数据(例如,组件的文件)。元数据通过一个元数据储存库接口(IRepository)是可存储的然而数据通过一个文件储存库接口(IFileRepository)是可存储的。在一个实施例中,元数据储存库接口是使用一个关系数据库来执行存储和索引组件的元数据。文件储存库接口允许用户以一种组合的方式到达组组件数据(文件)。
组件元数据和数据接口在图15中的组件储存库接口下被分离以允许不同的可插元数据储存库基于不同的情况上执行。例如,在一个设计计算机上能够使用SQL元数据的存储库由于有效的存储和存储器不可以被强迫使用除非在一个运行-时间系统的元数据储存库才能通过一个小型的覆盖区数据库(例如,注册)的支持从而处理紧密的存储器请求。
一个串行器和非串行器接口允许在CMI的第一类对象被串行化以及来自文本文件的被非串行化。例如,一个XML串行器和非串行器读写XML文件。串行器和非串行器通常读写如下所述的载体和配置。
以串行化格式传送任何第一类提取部的文件被称作载体或清单。载体提供一种填充组件储存库数据的方式,例如,在一个载体文件中工具创建或编辑一个组件的串行化的例子并且该组件储存库接口允许将载体输入到组件储存库。
使用载体来交换信息的主要优点在于其允许工具从组件储存库分离。另一个优点是当输入载体信息时,数据以一个更加相容的(或完整的)格式被输入到组件储存库。分离的串行器和非串行器接口也允许执行各种各样的载体(例如,INF)。
配置是CMI’s IConfiguration对象的串行化表示,其表示用于构造一个运行一时间影像的组件和设置的集合。配置是在一个单独的文件中而不是在一个载体文件中串行化的原因是配置不能被输入到数据库。
CMI应用程序层由经常变化的功能部件组成。在图15的实施例中功能部件作为已知的接口被外露,消耗。应用程序层包括用于安装装置,升级装置,从属性裁决器,CMI对象模块,和用户的部件。安装装置部件具有用于安装(或构造)和卸装由核心层陈列的一个特定的组合化提取部的逻辑电路。例如,IAssembly以在线或下线的方式从OS装置安装和卸装。安装和卸装组合部件的逻辑电路是出现在部件中。所有的核心提取部使用“IInstallable”接口被安装和卸装。这些方式的执行改变了每个核心提取部。例如,存在一个称作“IAssemblyInstaller”的安装装置提取部用于组合。IAssemblyInstaller集合“IAssembly”接口并执行“IInstallable”用以安装和卸装一个组合部件例子。
和核心提取部绑定的特定功能性类型允许集合部件安装逻辑电路的执行按照所需要的那样改变而不影响核心IAssembly接口。相同的安装对于其它核心提取部也是成立的。
升级器部件具有在一个视窗装置上用于将特定的核心提取部升级和降级的逻辑电路。例如,IAssembly是以一种在线或下线的方式从OS装置中升级或降级的。升级或降级组合的逻辑电路出现在该部件中。所有的核心提取部通过使用“IUpgradable”接口被升级和降级的。
每一个核心提取部单独的执行这些方法。由于在升级过程中需要安装和卸装功能性,因此,“IUpgradable”从“IInstallable”继承以再次使用现有的安装或卸载的功能。例如,该组合具有一个称作“IAssemblyUpgrader”的升级器提取部。IassemblyUpgrader聚集“IAssembly”,“IAssemblyInstaller”并执行“IUpgradable”将在一个视窗装置上的组合例子升级和降级。又,这种绑定允许集合部件升级电路的执行按照所需要的那样改变而不影响核心IAssembly接口和安装或卸装逻辑电路。相同的安装对于其它核心提取部的升级功能性也是成立的。
从属性裁决器部件对一个指定的核心提取部执行从属性裁决逻辑电路。在这个例子中,对于每一个核心提取部该部件都具有依据从属性裁决而不是依据自动或手动的方式的逻辑电路。从属性裁决器对于用户程序而言是可扩展的从而将预置的从属性裁决功能性按照在一个指定的用户环境中所需要的那样扩展。部件的功能性是通过“IDependencyResolver”接口表示出来的。裁决从属性的方法返回一个CMI对象树形或基于使用其的情况下的例子对象。从属性裁决通常和至少一个本发明实施例的一个配置或一个储存库相关。该储存库可以是可安装的或已安装的储存库。
通常,在运行-时间系统上,从属性裁决发生在一个已安装的储存库和现有配置中,然而在一个设计-时间情况下,从属性裁决发生在一个可安装的储存库和一个当前正在编辑的配置中。
CMI对象模式是形成于CMI核心对象模式和在实用程序层陈列的不同的功能性部分的集合。CMI核心对象模式也可被陈列出用于程序设计工具从而直接操作提取部当载体(或清单)串行化和非串行化时。
一个重要的问题是要注意在上述机制结构中,相同的编程模式对于设计-时间,运行-时间和构造-时间情况是有利的。这有助于保持对象模式和相关的不同要求一致并有助于程序设计师的生产率。这也有助于重新使用一个单一执行的CMI,将其用于像设计和运行-时间这样的不同情况并且因此与设计和运行-时间情况不同的执行相比较是更加可维护的。
图16示出了以计算机70的形式的通用目的计算机设备的例子。在本发明的一个实施例中,像计算机70这样的计算机适合作为计算机150来使用。
在举例说明的实施例中,计算机70具有一个或多个处理器或处理单元72和一个系统存储器74。在举例说明的实施例中,一个系统总线76连接包括系统存储器74的各种各样的系统组件到处理器72。总线76表示一种或多种任何型号的总线结构,包括一个存储器总线或存储器控制器,一个外围设备总线,一个加速的图表端口,和一个处理器或使用任何一种总线体系结构的局域总线。举个例子,但不局限于此,这样的体系结构包括工业标准体系结构(ISA)总线,微通道体系结构(MCA)总线,加强型ISA(EISA)总线,视频电子标准协会(VESA)局域总线,和外围设备组合部件相互连接(PCI)总线也称作Mezzanine总线。
有代表性的计算机70至少具有计算机可读媒介的某些类型。计算机可读媒介包括易失性和非易失性媒介,可拆卸和不可拆卸媒介,其可以是被计算机70访问的任何类型的可用的媒介。举个例子,但不局限于此,计算机可读媒介包括计算机存储媒介和通讯媒介。计算机存储媒介包括以任何方法或技术执行的用于存储像计算机可读指令,数据结构,程序模块或其它数据这样的易失性和非易失性,可拆卸和不可拆卸媒介。例如,计算机存储媒介包括RAM,ROM,EEPROM,闪存或其它存储技术,CD-ROM,数字通用磁盘(DVD)或其它磁存储设备,或其它可用于存储期望信息并可以被计算机70访问的媒介。具有代表性的通讯媒介包含计算机可读指令,数据指令,程序模块,或其它在调节数据信号像载波或其它传送机制中的数据,并且包括任何信息传送媒介。本领域技术人员对调节信号是很熟悉的,其具有一种或多种以和信号中编码信息相关的方式设置或改变的自身特性。通讯媒介的例子可以是像有线网络或直接有线连接这样的有线媒介,和像声学,RF,红外线这样的无线媒介,以及其它无线媒介。上述任何结合也包括在计算机可读媒介的范围内。
系统存储器74包括可拆卸和/或不可拆卸,易失性和/或非易失性存储器形式的计算机存储媒介。在说明性的实施例中,系统存储器74包括只读存储器(ROM)78和随机存储器(RAM)80。一个基本的输入/输出系统82(BIOS)包括有助于在计算机70内的元件之间传送信息的基本例行程序,例如在启动期间,其被有代表性地存储在ROM78中。具有代表性的RAM80包括被处理单元72立即访问的和/或立刻运行的数据和/或程序模块。举个例子,但不局限于此,图16图解说明了操作系统84,应用程序86,其它程序模块88,以及程序数据90。
计算机70也可以包括其它可拆卸/不可拆卸媒介,易失性/非易失性计算机存储媒介。例如,图16图解说明了硬盘驱动94对不可拆卸,非易失性磁盘进行读写。图16也示出了磁盘驱动96对可拆卸,非易失性磁盘98进行读写,以及一个光盘驱动100对可拆卸,非易失性光盘102例如CD-ROM或其它光学媒介进行读写。可以被用于示范性操作环境的其它可拆卸/不可拆卸,易失性/非易失性计算机存储媒介包括磁带盒,闪存卡,数字通用磁盘,数字视频磁带,固体状态RAM,固体状态ROM,等等。硬盘驱动84,和磁盘驱动96以及光盘驱动100通常通过一个非易失性存储接口例如接口106连接到系统总线76。
上述并在图16中图解说明的驱动或其它大量的存储设备以及它们相关的计算机存储媒介为计算机70提供了计算机可读指令,数据结构,程序模块和其它数据。在图16中,例如,硬盘驱动94图解的说明了用于存储操作系统110,应用程序112,其它程序模块114,以及程序数据116。要注意的是这些组合部件可以和操作系统84,应用程序86,其它程序模块88,以及程序数据90相同或不同。这里按照说明的那样指定操作系统110,应用程序112,其它程序模块114,以及程序数据116不同的数量,至少,它们是不同的副本。
一个用户可以通过像键盘120和指示设备122(例如,鼠标,跟踪球,笔,或接触垫)这样的输入设备或用户接口选择设备将命令和信息输入到计算机70。其它的输入设备(未示出)可以包括一个麦克风,游戏杠杆,游戏垫,卫星盘,扫描器,等等。这些和其它输入设备通过和系统总线76连接的用户输入接口124连接到处理单元72,也可以通过其它接口和总线结构来连接,例如并行端口,游戏端口,或通用串行总线(USB)。监视器128或其它类型的显示设备也经过像视频接口130这样的接口连接到系统总线76。除了监视器128以外,计算机常常包括像打印机和扬声器这样的其它外围输出设备(未示出),其可以通过一个输出外围接口(未示出)来连接。
计算机70可以在网络环境中运行,使用本地连接到像远程计算机134这样的一个或多个远程计算机。该远程计算机134可以是一台个人计算机,一台服务器,一台路由器,一台网络PC,一台对接设备或其它共同的网络节点,其通常包括上述与计算机70相关的多个或全部元件。在图16中描述的逻辑连接包括一个局域网络(LAN)136和一个广域网络(WAN)138,也可以包括其它网络。LAN136和/或WAN138可以是一个有线网络,一个无线网络,及其组合,等等。这样的网络环境常见于办公室,企业范围的计算机网络,内部网,以及全球计算机网络(例如,因特网)。
当用于局域网络环境时候,计算机70通过网络接口或适配器140连接到LAN136。当用于广域网络环境时,计算机70通常包括一个调制解调器142或其它在WAN138上建立通讯的方式,例如因特网。调制解调器142可以是内部的或外部的,经过用户输入接口134连接到系统总线76或其它合适的机械装置。在一个网络环境中,所描述的与计算机70相关的程序模块,或其部分,可以被存储在远程存储器存储设备中(未示出)。举个例子,但不局限于此,图16图解的说明了驻留在存储器设备中的应用程序144。将明白示出的网络连接是示范性的并且在计算机之间建立通信链接的其它方式可以被使用。
一般地,计算机70的数据处理器通过在计算机的各种各样计算机可读存储媒介中在不同时间存储指令的方式被编程。例如,在软磁盘或CD-ROMs上的程序和操作系统通常是分布式的。从这里它们被安装或载入到计算机的第二存储器。在执行中,它们至少部分地载入到计算机地主电子存储器中。当包含指令或程序这样的媒介用以执行这里描述的连接微处理器或其它数据处理器步骤时,这里描述的发明包括这些和其它各种各样类型的计算机可读存储媒介。当依据这里描述的方法和技术编程时本发明也包括计算机自身。
为了实现图解说明的目的,在这里通过离散部件对像操作系统这样的程序和其它可执行的程序组合部件进行图解说明。然而,应认识到在不同时间驻留在计算机的不同存储部件中这样的程序和组合部件通过计算机的数据处理器被执行。
虽然对包括计算机70的示例性计算系统环境相联系地进行了描述,但是本发明是和大量的其它通用或专用的计算机系统环境或配置一起操作的。计算机系统环境并不易于支持本发明的用途或功能性范围的任何限制。而且,计算机系统环境不可以被解释为具有和在具有代表性的操作环境中图解说明的任何一种或组合部件组合有关的任何从属性或要求。已知的计算机系统,环境,和/或配置的例子可以适合和本发明包括的个人计算机,服务器计算机,便携式或膝上型设备,多处理器系统,基于微处理的系统,机顶盒,包括移动电话的可编程消费者电子设备,网络PC,小型机,大型机,包括任何一个上述系统或设备的分布式计算机环境,等等一起使用,但不限于此。
本发明的实施例可以通过计算机的可执行指令的通用格式来描述,例如通过一个或多个计算机或其它设备执行的程序模块。通常,程序模块包括例行程序,程序,对象,组合部件,和完成指定任务或执行提取数据类型的数据结构,但不限于此。本发明也可以在分布式计算机环境中执行,其中的任务由通过一个通信网络链接的远程处理设备来执行。在分布式计算机环境中,程序模块可以定位在包括存储器存储设备的本地和远程计算机存储媒介。
在操作中,计算机70执行像在下文所描述的那些计算机可执行指令将文件组织成为对象。在这个例子中,至少某些对象是组合部件的描述并且每一个组成对象至少包括一个文件。依据计算机可执行指令,清单识别每一个组合部件并且确定组合部件和其它对象之间的任何从属性。依据清单中确定的从属性归类的对象允许构造软件产品。
本领域技术人员将注意到这里图解说明并描述的方法的执行或运行的顺序不是十分重要的,除非以其它方式确定。也就是说,发明者确定方法的要素可以以任何顺序被执行,除非以其它方式确定,该方法包括的要素可以多于或少于这里公开的那些方法的要素。
在这个文件中的信息易于改变而无须通告,包括统一资源指标器和其它因特网设置索引。除非以其它方式通告,这里例子中描述的公司,机构,产品,域名,电子邮件地址,标识语,人,位置和事件是虚构的,和真实的公司,机构,产品,域名,电子邮件地址,标识语,人,位置和事件无关,是无法从其推知出来的。
当介绍本发明的要素或其实施例时,冠词“a”,“an”,“the”,和“said”意味着存在一个或多个要素。术语“comprising”,“including”,和“having”是指被包含在内的并意味着可以是附加的要素而不是被列举的要素。
从上述来看,可以看到本发明的若干对象被获得并且获得其它有利的结果。
例如,本发明的实施例是可延伸和可扩展的。组合部件存储处能够跟踪在一个运行-时间系统上的相对少的组合部件(例如,成百)到在一个设计-时间系统上相对多的组合部件(例如,成百成千)。本发明包括的范例也是充分的扩展从而附加的元数据和新的组合部件可以由不同的产品部分和三分之一部分被添加。可编程模式是充分的扩展从而人们可以以一种相容的方式扩展它,将功能性添加到核心元件机构中。
未脱离本发明范围的情况下,可以对上述构造和方法中作出的各种各样的变化,所以意指在上述由于描述包括的以及在相应附图中所示的所有的内容将解释为说明性的,所以不是限制性的。
数据存储和格式:程序设计工具创建组合部件,特征,类,插件,产品和SKU。在这个例子中,它们在一个XML文件(被称作一个载体或清单)中被表示。每一个载体包括至少一个实例的特征或类或插件或产品或SKU。一个记录的清单的例子如下:
<?xml version=”1.0 encoding=”UTF-16?>
<!--edited with XML SPY v5 U(http://www.xmlspy.com)by vijayj(ms)-->
<!--edited with XML Spy v4.4 U(http://www.xmlspy.com)by Vijayj Jayaseelan(ms)-->
<assembly manifestVersion=”1.0 authors=”vijayj”company=”Microsoft”
copyright=”Microsoft” displayName=”Notepad”lastUpdateTimeStamp=”2002-07-
31T09:23:00 owners=”none”released=”false”testers=’none
supportInformation=”http://www.microsoft.com”description=”Unicode andnon-
unicode text file editor.”Xmlns=”urn:schemas-microsoft.com:asm.v2>
<assemblyIdentity name=”notepad”version=”1.0.0.0
processorArchitecture=”x86 language=”neutral”buildType=”release”/>
<dependency>
<dependentCategory name=”Notepad Language Category”
version=“1.0.0.0 processorArchitecture=”x86 language=”*”buildType=”release”
selection=”one”/>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity name=”Windows Shell”version=”1.0.0.0
processorArchitecture=”x86 language=”*”buildType=”release”/>
</dependentAssembly>
</dependency>
<file name=”notepad.exe”sourcePath=”%_NTTREE%\”/>
<memberships>
<categoryMembership name=”Text Editors”version=”1.0.0.0
processorArchitecture=”x86 language=”*”buildType=”release”/>
</memberships>
<registryKeys>
<registryKey keyName=”HKCU\Notepad\Settings\”/>
<registryKey keyName=”HKCU\Notepad\Settings\Font\”>
<registryValue name=”Name”value Type=”REG_SZ”
value=”Arial”/>
<registryValue name=”Size”valueType=”REG_DWORD”
value=”10/>
</registryKey>
</registryKeys>
<propertyTypes>
<propertyType name=”DefaultFont”valueType=”string”
access=”public” readOnly=”false” value=”Arial”regularExpression=”(Arial)|(Lucida
Console)|(Courier)”>
<registryLocation keyName=”HKCU\Notepad\Settings\Font\”>
<registryValue name=”Name”valueType=”REG_SZ”
value=”Arial”/>
</registryLocation>
</propertyType>
</propertyType>
</assembly>