CN102460381A - 软件扩展分析 - Google Patents
软件扩展分析 Download PDFInfo
- Publication number
- CN102460381A CN102460381A CN2010800260259A CN201080026025A CN102460381A CN 102460381 A CN102460381 A CN 102460381A CN 2010800260259 A CN2010800260259 A CN 2010800260259A CN 201080026025 A CN201080026025 A CN 201080026025A CN 102460381 A CN102460381 A CN 102460381A
- Authority
- CN
- China
- Prior art keywords
- registration
- data
- namespace
- classification
- registry repository
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/77—Software metrics
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
可以获得多个结构化扩展定义,每个结构化扩展定义对应于一个或者多个类别,并且每个结构化扩展定义用软件扩展语言来编写。可以访问表示按照注册存储库本地的格式维护的一个或者多个注册的数据,并且至少部分基于多个结构化定义来分析这个数据。在其它方面中,获得按照软件扩展语言编写的结构化扩展定义。注册存储库包括按照注册存储库本地并且与软件扩展语言不同的格式存储的注册,并且基于获得的结构化扩展定义来修改注册存储库。
Description
背景技术
计算机通常运行提供各种功能(包括允许在计算机上安装和运行其它应用)的操作系统。这样的操作系统经常提供如下位置,各种应用以及操作系统可以在该位置存储将在应用的多次执行期间持续的各种类型的信息。然而当存储这样的信息时,由于多个可以访问和修改所存储的数据的不同程序而可能出现问题。这样的信息的存储方式可以随时间改变,并且这样的改变经常未恰当地传送给存储和/或取出数据的不同程序。因而信息可能容易存储不当,这可能造成致使程序和/或操作系统无法恰当操作的不稳定性。
发明内容
提供这一发明内容来以简化形式介绍下文在具体实施方式中进一步描述的概念选集。这一发明内容并非旨在于标识要求保护的主题的关键特征或者必需特征,它也并未旨在于限制要求保护的主题的范围。
根据一个或者多个方面,获得多个结构化扩展定义。每个结构化扩展定义对应于一个或者多个类别,并且按照软件扩展语言编写每个结构化扩展定义。访问表示按照注册存储库本地的格式而维护的一个或者多个注册的数据,并且至少部分基于多个结构化定义来分析这个数据。
根据一个或者多个方面,获得按照软件扩展语言编写的结构化扩展定义。基于结构化扩展定义来修改注册存储库。注册存储库包括按照注册存储库本地的并且与软件扩展语言不同的格式存储的注册。
附图说明
相同标号在所有附图中用来指代相似特征。
图1图示了实现根据一个或者多个实施例的软件扩展分析的示例计算设备。
图2图示了根据一个或者多个实施例的用于结构化扩展定义的示例格式。
图3是图示了根据一个或者多个实施例的用于实现软件扩展分析的示例处理的流程图。
图4是图示了根据一个或者多个实施例的用于分析软件扩展的示例处理的流程图。
图5是图示了根据一个或者多个实施例的用于将软件扩展注册插入到注册存储库中的示例处理的流程图。
图6是图示了根据一个或者多个实施例的用于从注册存储库移除软件扩展注册的示例处理的流程图。
图7是图示了根据一个或者多个实施例的用于标识在特定位置处代表的注册类别的示例处理的流程图。
图8图示了可以根据一个或者多个实施例使用的用于结构化扩展定义的特里结构(trie)的示例。
图9图示了可以被配置成实现根据一个或者多个实施例的软件扩展分析的示例计算设备。
具体实施方式
这里讨论软件扩展分析。本地注册具有以按照软件扩展语言编写的结构化扩展定义所描述的关联类别。在设备的存储库中维护本地注册并且可以作为管理设备中的软件扩展的一部分来分析本地注册。这个管理可以包括各种功能、比如检测本地注册中的问题、生成在存储库中表示的注册清单、按照注册的本地注册格式将注册插入到存储库中以及从存储库移除所有或者部分注册。此外,在存储库中的特定位置和存储库中的至少部分数据给定时,结构化扩展定义可以用来确定在该位置处表示的特定注册类别。
图1图示了实现根据一个或者多个实施例的软件扩展分析的示例计算设备100。计算设备100可以是能够运行软件和/或固件程序的多种不同设备。例如计算设备100可以是桌面型计算机、膝上型计算机、移动站、娱乐装置、与显示设备耦合的机顶盒、电视机、蜂窝或者其它无线电话、个人数字助理(PDA)、游戏控制台、车载计算机等。因此,计算设备100的范围可以从具有大量存储器和处理器资源的全资源设备(例如个人计算机、游戏控制台)到存储器和/或处理资源有限的低资源的设备(例如传统机顶盒、手持游戏控制台)。
计算设备100包括扩展注册调停器102、注册存储库104和操作系统106。操作系统106管理软件和/或固件(包括一个或者多个消费方程序108和一个或者多个提供方程序110)在计算设备100上的操作。操作系统106本身也通常用软件和/或固件来实现。操作系统106管理和维护注册存储库104,从而允许程序108和110在注册存储库104中存储各种信息以及从注册存储库104取出各种信息。一个或者多个实施例操纵的一个这样的注册存储库104为操作系统注册表。
注册存储库104可以存储用于程序108和110的、将在程序的多次执行期间持续的各种数据和设置信息。这个数据或者设置信息可以包括程序108和110在运行使用的设置、标识将响应于某些事件而运行的特定程序110的数据、描述将在程序108或者110运行时显示或者以别的方式呈现的控制或者其它信息的数据等。虽然在图1中图示了一个注册存储库104,但是作为选择可以在计算设备100中包括两个或者更多注册存储库104。程序108和110可以直接或者作为选择经由操作系统106访问注册存储库104。
在注册存储库104中包括的一个特定类型的数据为本地注册(以及如上文讨论的、也可以在注册存储库104中包括的其它非注册数据)。提供方程序110能够在运行时提供各种功能,从而实质上允许程序110扩展由消费方程序108提供的功能。可以使用不同类型的类别以各种不同方式扩展功能。当提供方程序110安装于计算设备100上时,通报由程序110提供的软件扩展功能的本地注册存储于注册存储库104中。这些本地注册可以由提供方程序110(或者将程序110安装于计算设备100上的安装程序)直接或者作为选择经由操作系统106存储于注册存储库104中。
例如,提供方程序110可以指示它可以解释和提供用于管理特定类型文件(例如按照特定格式的音乐文件、按照特定格式的图像文件等)的功能。在提供方程序110安装于计算设备100上期间,指示程序110可以解释和提供用于管理该特定类型文件的功能的注册可以按照本地注册格式存储于注册存储库104中。在安装了提供方程序110之后,消费方程序108(或者作为选择为操作系统106)可以激活注册以获得由提供方程序110提供的用途。消费方程序108可以使用操作系统106来执行依赖于软件扩展的任务。例如网络浏览器程序可以显示指向电子邮件地址的链接。当用户点击链接时,网络浏览器程序要求操作系统106打开用于电子邮件地址的统一资源定位符(URI)(例如“mailto://namedomain.com”)。作为响应,操作系统106激活“协议”类别中的“mailto”注册。
应当注意的是,虽然将消费方程序108和提供方程序110图示为单独程序,但是单个程序可以既为提供方程序又为消费方程序。此外还应当注意的是,操作系统106也可以是消费方程序和/或提供方程序。
扩展注册调停器102也可以访问注册存储库104中存储的本地注册并且分析这些本地注册以便软件扩展管理。扩展注册调停器102获得描述注册符合的一个或者多个类别的结构化扩展定义112。可以从诸如消费方程序108、消费方程序108的开发者或者分发商、代表消费方程序108的行动方或者其它实体等之类的多种不同来源获得这些结构化扩展定义112。
每个结构化扩展定义112将一个或者多个类别描述为它们可以由消费方程序108激活。使用扩展注册调停器102已知的格式或者语言来实现结构化扩展定义112。然而这一格式或者语言不同于注册存储库104在存储注册时使用的本地格式。因而,调停器102可以访问在结构化扩展定义112中表示的多种类别并且基于那些类别来分析注册存储库104中的本地注册。扩展注册调停器102因此可以比较提供方程序(或者提供方程序的开发者)发布的并且存储于注册存储库104中的内容与消费方程序108预期的内容(如定义112所标识的),并且确定本地注册是否符合。扩展注册调停器102也可以基于类别分析注册存储库104中的本地注册并且生成注册清单。
在一个或者多个实施例中,每个结构化扩展定义112为根据软件扩展语言编写的可扩展标记语言(XML)文档。这个软件扩展语言描述将如何编写结构化扩展定义112,以使得定义112可以由扩展注册调停器102使用。
图2图示了根据一个或者多个实施例的用于结构化扩展定义的示例格式200。格式200是示例软件扩展语言使用的、定义用于软件扩展语言的特定元素和属性的格式。格式200包括可扩展性元素202、类别元素204、根元素206、参数元素208、约束元素210、使用元素212、变化元素214、合并根元素216和文档说明元素218。结构化扩展定义包括一个可扩展性元素202。每个可扩展性元素202可以包括一个或者多个类别元素204。每个类别元素204可以包括零个或者更多类别根元素206、一个或者多个参数元素208、零个或者更多约束元素210以及零个或者更多合并根元素216。可扩展性元素202也可以包括零个或者更多使用元素212、零个或者更多变化元素214以及零个或者更多文档说明元素218。将理解,在结构化扩展定义为XML文档的实施例中,这些元素202-218也可以称为标记。
可扩展性元素202是将一个或者多个类别(通常为逻辑上彼此有关的一个或者多个类别)分组或者聚集在一起的聚集元素。每个元素202也可以定义诸如元素202被设计成与之兼容的一个或者多个特定程序的指示、元素202被设计成与之兼容的操作系统版本范围等之类的各种属性。
类别元素204定义注册的内容和如何在注册存储库中形成本地注册。类别元素204包括一个或者多个参数元素,这些参数元素定义注册可以具有的数据、它存储于何处以及它可以是什么类型。每个类别元素204也可以包括各种属性。表I包括可以在类别元素中包括的属性的示例。将理解,表I中的属性为示例,并且作为选择可以在类别元素中包括其它属性和/或可以从类别元素排除表I中的一个或者多个属性。此外,(这里和在本说明书中的别处讨论的)各种属性也可以嵌套在一起并且作为子标记的元素来包括而不是作为属性来包括。
表I
属性 | 描述 |
Name | 类别的名称。 |
aggregated | 指示该类别的注册是可以共同存在(聚集)还是每个命名空间仅存在一个注册。 |
instancesAre | 指示这个类别的注册按照这些注册的本地格式是注册存储库中容器还是叶。叶具有与它们关联的数据,而容器聚集叶和/或其它容器。 |
store | 标识维护类别的注册存储库104。 |
blittable | 指示注册是否可以由简单发布逻辑存储为本地注册。这类似于“blittable”或者“plain old data(老式朴素数据)”类型的编程概念,其中可以预期“blittable”注册在不同类型的系统上看起来相同。 |
architecture | 指示该类别被设计成与之兼容的一个或者多个操作系统架构(例如32位架构、64位架构、当前操作系统的架构、提供方的架构、程序等) |
根元素206是存储库(例如图1的注册存储库104)中的如下位置的指示,可以在注册存储库104中的该位置发现用于该类别的注册。注册在注册存储库104之内采用的格式称为本地注册。根元素206例如是标识注册表中的、存储用于这个类别的本地注册的位置的路径名称。在一个或者多个实施例中,单个本地注册可以存在于注册存储库中的一个或者多个命名空间中,每个存储库贡献零个或者更多注册参数。在这种情况下,合并根元素216可以标识协作以形成注册的命名空间集。
参数元素208为类别参数。参数元素208包括标识特定类别参数的数据、对应注册参数要符合的数据类型、对被允许作为注册参数的数据的附加约束以及用于如何根据本地注册导出这个参数的指令。在一个或者多个实施例中,规则用来在指令省略了时推断这些指令。不同参数元素标识类别的注册可以包含的数据类型。例如工具栏按钮类别可以具有用于‘resource(资源)’类型的buttonIcon(按钮图标)的参数和用于‘description(描述)’类型的buttonText(按钮文本)的参数。然后允许用于工具栏按钮的注册包括buttonIcon(按钮图标)‘myIcon.ico’和buttonText(按钮文本)‘click here(点击此处)’。
参数元素208包括描述参数的名称属性以及指示对元素的使用是否可选的使用属性。如果对参数的使用可选,则可以从注册中省略这个参数。如果对参数的使用并非可选,则注册必须具有与该类别参数符合的注册参数以便为有效注册。参数元素208也可以可选地包括用于注册参数的默认值。
每个参数元素208包括一个如下参数类型,该参数类型为注册参数要被解释的方式。表II包括可以在参数元素中包括的参数类型的示例。将理解,表II中的参数类型为示例,并且作为选择可以在参数元素中包括其它参数类型。
表II
参数类型 | 描述 |
boolean | 布尔变量。 |
resource | 用于对应注册参数的数据是到二进制文件的路径和要加载的资源的ID。 |
description | 用于对应注册参数的数据可以是串或者简单串类型的资源。如果注册参数具有资源形式,则数据的所有操作或者约束在加载的资源上执行。 |
commandLine | 用于对应注册参数的数据是到程序的路径以及将在调用程序时向程序提供的零个或者更多参数。 |
string | 用于对应注册参数的数据为字符串。可选地,值可以被约束成符合由类别参数类型定义的特定模式。 |
integer | 用于对应注册参数的数据为十进制、十六进制或者八进制形式的整数。可选地,可以强制最小和/或最大值。 |
fileRef | 用于对应注册参数的数据为到文件或者文件夹的路径。 |
instance | 用于对应注册参数的数据为另一整个注册。这个受约束的注册的类别由类别参数指定。 |
reference | 用于对应注册参数的数据为系统上的另一注册的名称。这个引用的注册的类别由类别参数指定。 |
set | 用于对应注册参数的数据为内部类型的零个或者更多值。内部类型由类别参数指定。 |
enumeration | 用于对应注册参数的数据为任何预先排序值之一。允许值集由类别参数指定。 |
约束元素210是为了成为该类别的有效注册注册参数将遵循的一个或者多个附加规则的集合。约束元素210包括描述约束的名称属性、指示约束严重性的严重性属性以及指示约束规则的规则元素。约束的严重性指示约束有多么重要。规则作用于注册参数和其它规则以产生值。约束的规则产生为了使注册为有效而为真的值。如下文更具体讨论的那样,可以在日志中记录在分析注册存储库104中的本地注册时(或者在其它时间、比如在将注册插入到注册存储库104中时)对这些规则或者约束的违规。这个记录允许管理员或者其他用户随后响应于这些违规采取他们认为合适的适当动作。
使用元素212允许对另一页面中的定义(例如另一结构化扩展定义)进行引用。使用元素包括标识包括该定义的另一页面的顶端子元素。使用元素也包括可以在这一页面中引用的一个或者多个类别标记(例如包括在这一结构化扩展定义中)作为子元素。
变化元素214允许覆盖特定类别。变化元素包括标识被覆盖类别的属性以及一个或者多个如下参数元素,这些参数元素定义注册可以具有的数据、它存储于何处以及它将是什么类型(类似于类别元素204)。
合并根元素216允许注册存储库中的每个命名空间的副本。合并根元素216允许多个命名空间组合或者合并形成注册。合并根元素216包括标识被组合的多个命名空间的多个子元素。
文档说明元素218为父元素的子代并且描述父元素,而且可以是各种元素202-216的子代。例如作为类别元素204的子代,文档说明元素描述类别的目的。又例如,作为参数元素208的子代,文档说明元素描述参数的目的。又例如,作为约束元素210的子代,文档说明元素描述约束的目的/约束检查什么。
回到图1,应当注意,虽然图示为相同计算设备100的部分,但是扩展注册调停器102、注册存储库104和结构化扩展定义112中的一个或者多个可以作为选择在分离的设备上实现。例如扩展注册调停器102可以在一个计算设备上实现而注册存储库104和操作系统106在另一计算设备上实现。在这一示例中,结构化扩展定义112可以在这些计算设备上或者作为选择在又一计算设备上。又例如,注册存储库104可以实现为扩展注册调停器102访问的虚拟映像或者注册存储库104可以实现为如果将执行某动作则对实际注册存储库产生的结果。
扩展注册调停器102可以用多种不同方式获得结构化扩展定义112。在一个或者多个实施例中,使用如下静态发现技术,在该技术中,在将扩展注册调停器102编译成可执行代码时将结构化扩展定义112并入到调停器102中。在这样的实施例中,将结构化扩展定义112并入到调停器102中,并且每当新的结构化扩展定义112变得可用时重新编译调停器102。
在其它实施例中,使用如下动态发现技术,在该技术中,扩展注册调停器102直接或者通过数据源访问特定命名空间以标识结构化扩展定义112所位于的位置。这个命名空间本身可以是使用上段中描述的技术而发现的类别的根,或者作为选择可以采用另一形式。在操作期间,扩展注册调停器102访问这个特定命名空间以标识结构化扩展定义112位于的位置、然后从标识的位置获得结构化扩展定义112。将理解,调停器102也可以用类似方式访问多层或者多级命名空间,比如访问标识第二命名空间的第一命名空间、该第二命名空间标识第三命名空间、以此类推直至访问结构化扩展定义112所在的命名空间。在这样的实施例中,调停器102在执行期间获得结构化扩展定义112,因而无需每当新的结构化扩展定义112变得可用时重新编译调停器102。
此外,在一个或者多个实施例中,包括作为在扩展注册调停器102与注册存储库104之间的接口来操作的接口模块。可以包括这个接口模块(也称为数据源)作为扩展注册调停器102的部分、作为注册存储库104的部分或者作为选择作为单独模块或者部件。这个接口模块被配置成接受来自扩展注册调停器102的按照通用或者统一形式的命令或者请求并且将那些命令或者请求转换成按照注册存储库104特有的形式的命令或者请求。不同注册存储库104可以用不同方式来实现和/或支持不同类型的通信。可以生成不同接口模块来与这些不同注册存储库104进行通信,从而允许相同扩展注册调停器102简单地通过使用适当接口模块与这些不同注册存储库一起使用。
图3是图示了根据一个或者多个实施例的用于实现软件扩展分析的示例处理300的流程图。处理300由扩展注册调停器(比如图1的调停器102)执行并且可以用软件、固件、硬件或者其组合来实现。处理300为用于实现软件扩展分析的示例处理;这里包括参照不同图对实现软件扩展分析的附加讨论。
在处理300中,获得与软件扩展的类别对应的结构化扩展定义(动作302)。如上文讨论的那样,可以用多种不同方式(包括以下的动态和/或静态发现技术)获得这些定义。
标识(动作304)和访问(动作306)注册存储库中的本地注册。如上文讨论的那样,这个注册存储库可以在与实现处理300的扩展注册调停器相同的设备或者系统上实现或者作为选择实现于另一设备或者系统上。可以在注册存储库包括多种不同信息(包括本地注册、软件状态、软件设置等)。可以在动作304中以多种不同方式标识注册存储库中的作为本地注册的特定信息。下文参照图7更具体讨论一种可以标识本地注册的方式的示例。
然后在管理系统的软件扩展时分析在动作306中访问的本地注册(动作308)。其中管理本地注册的这个系统是在动作306中访问的注册存储库实现于其中的系统,该系统可以(但是并非必须)是与实现扩展注册调停器(该调停器实现处理300)相同的系统。这个分析可以采用多种不同形式(包括问题检测和/或清单标识)。下文参照图4包括对问题检测和清单标识分析的附加讨论。
也应当注意的是,除了在动作308中的分析之外,也可以执行对注册存储库的其它操作或者对注册存储库的修改。例如可以将软件扩展注册插入到注册存储库中和/或可以从存储库移除软件扩展注册。下文参照图5和图6更具体讨论这些插入和移除处理。除了图3的动作302-308之外还可以执行这些插入和移除处理,或者作为选择可以与动作302-308中的一个或者多个动作独立地执行这些插入和移除处理。例如可以在执行动作302-308之后执行插入或者移除处理。又例如,可以执行插入或者移除处理而不执行动作304或者308(并且可能不执行动作306)。
图4是图示了根据一个或者多个实施例的用于分析软件扩展的示例处理400的流程图。处理400可以由扩展注册调停器(比如图1的调停器102)执行并且可以用软件、固件、硬件或者其组合来实现。处理400为用于分析软件扩展的示例处理;这里包括参照不同图对分析软件扩展的附加讨论。还参照图1讨论处理400。
在处理400中,创建命名空间(动作402)。命名空间列表是如下命名空间的列表,类别定义提示这些命名空间可以是本地注册的命名空间。从结构化扩展定义112获得这些类别定义。在动作402中创建的命名空间列表可以是在结构化扩展定义1120中标识的所有命名空间的列表或者在定义112中标识的所有命名空间的子集。在一个或者多个实施例中,当类别的“aggregated”属性设置成真时,那么在命名空间列表中的命名空间为类别中的那些注册的子代。例如根为其中发现类别的注册的位置,并且如果聚集注册,则在该命名空间中的元素为其中发现一个注册的位置。
选择来自命名空间列表的命名空间(动作404)。可以基于诸如根据命名空间在命名空间列表中的顺序、按字母顺序、随机等多种不同标准选择命名空间。
标识一个或者多个如下类别,所选命名空间可以是用于这些类别的本地注册(动作406)。可以用多种不同方式标识这些类别。下文参照图7更具体讨论一种可以标识类别的方式的示例。
选择所标识的类别之一(动作408)。可以基于诸如根据在动作406中标识类别的顺序、按字母顺序、随机等多种不同标准来选择类别。
然后尝试根据所标识的类别的数据来创建注册(动作410)。这个尝试包括比较来自注册存储库的所标识类别的数据与结构化扩展定义112,并且查看所标识类别的数据与结构化扩展定义112有多么好地匹配。例如这个尝试可以包括确定在类别数据中是否包括在扩展定义中标识为必需的特定数据、在类别数据中是否包括在扩展定义中标识为可选的特定数据等。
基于在动作410中的尝试,也更新问题日志(动作412)。这个问题日志是指示类别定义与一个或者多个扩展定义有多么好地匹配的列表。这个日志可以例如指示类别数据遗漏在扩展定义中标识为必需的数据、类别参数与在扩展定义中标识的特定类别参数类型不符、类别数据未满足在扩展定义中标识的特定约束等。
此外,在动作412中更新的问题日志可以包括对在基于扩展定义而预期的、但是在类别数据中未发现的命名空间部件与在类别数据中发现的、但是在类别定义中未定义的命名空间部件之间的相关性的指示。这一相关性可以帮助例如标识在注册存储库104中表示的注册中的小问题(例如排字错误)。例如可以使用多种不同常规技术中的任何技术来比较定义112与在注册存储库104中的类别数据,以便确定将根据定义112预期的命名空间部件变换成注册存储库中的数据的命名空间部件(或者相反)的成本。这样的技术可以对某些操作(诸如移除字符或者空格、交换字符、插入字符等)不同地加权以便生成将一个命名空间部件变换成另一命名空间部件的成本。使用这样的技术,也确定将在结构化扩展定义112中标识的命名空间部件的大小的字符串变换成在注册存储库中的命名空间部件的大小的字符串(或者相反)的最大可能成本。然后生成如下值,该值是将根据定义112的预期命名空间部件变换成在注册存储库104中的无属性数据的命名空间部件的成本除以将一个大小的串变换成另一大小的串的最大可能成本来生成。这个生成的值越低,预期命名空间部件与无属性命名空间部件就相互越接近。
如果这个生成的值低于阈值,则可以确定在定义112中标识的命名空间部件与在注册存储库104中的命名空间部件接近到足以使得确定命名空间部件为到一个或者多个注册参数的路径的部分。在问题日志中包括对这个确定的指示(412)。
还更新未定义部件列表(动作414)。这个未定义部件列表是在扩展定义112中发现的、但是未由在动作406中所标识的任何类别所定义的命名空间部件的列表。
然后在动作416中进行有关是否有在动作406中标识的但尚未在动作408中选择的附加类别的确定。如果有已经标识但是尚未选择的另外类别,则选择那些类别之一(动作408)。
然而如果在动作408中已经选择了在动作406中标识的每个类别,则选择基于扩展定义的、与所标识的类别的紧密相符的注册。这个紧密相符基于在动作410中的尝试。可以基于多种不同标准(比如在动作412中标识并且包括在问题日志中的问题的严重性、在动作412中标识并且包括在问题日志中的问题的数目、可以在动作412中可能包括在问题日志中的问题的数目、在动作414中包括在未定义部件列表中的命名空间部件的数目等中的一个或者多个)确定紧密相符。可以用多种不同方式(比如选择具有在动作412中在问题日志中标识的最不严重问题的类别、选择具有在动作412中的问题日志中标识的最少问题的类别、与在动作412中在问题日志中标识的命名空间部件的紧密相关的类别等)使用这些标准。
然后在动作420中做出有关是否有在动作402中的命名空间列表中的、但是在动作404中尚未选择的另外命名空间的确定。如果有在命名空间列表中的尚未选择的另外命名空间,则选择那些命名空间之一(动作404)。
然而,如果在动作404中已经选择在动作402中创建的命名空间列表中的每个命名空间,则返回结果(动作422)。这些结果可以采用多种不同形式(比如返回在动作418中选择的注册、返回在动作412中更新的问题日志的全部或者部分、返回在动作414中更新的未定义部件列表的全部或者部分等)。
处理400可以用来提供对注册存储库的多种不同分析(包括清单标识和问题检测)。例如,可以在动作422中返回在动作418中选择的注册,这实质上导致在动作422中返回注册存储库的清单。又例如,可以通过在动作402中创建具有单个命名空间的命名空间列表来分析单个命名空间。
处理400也可以支持检测注册存储库中的各种问题。例如可以在动作422中返回针对在动作418中选择的类别(或者作为选择为多个类别)而在动作412中更新的问题日志中包括的问题,以作为用于注册存储库的错误报告。又例如,可以在动作402中创建命名空间列表时使用单个命名空间,并且可以在动作422中返回针对在动作418中选择的类别(或者作为选择为多个类别)而在动作412中更新的问题日志中包括的问题作为用于该单个注册的错误报告。
在动作422中返回的结果也可以可选地由实现处理400的扩展注册调停器和/或另一部件或者模块显示或者否则呈现。例如,可以由扩展注册调停器102显示或者否则呈现或者记录处理400是否检测到问题的通知。例如可以向计算设备100的用户显示对于特定本地注册检测到问题的指示。
此外,扩展注册调停器102也可以在显示或者否则报告检测到的问题时利用编写结构化扩展定义的软件扩展语言。该分析至少部分基于与在注册存储库中维护的一个或者多个本地注册的类别相对应的多个结构化扩展定义。如上文在动作410和412中讨论的那样,标识并且在问题日志中包括注册未满足在结构化扩展定义中描述的预期这样的情形。这些不同可以作为对注册检测到的问题而显示给用户。此外,结构化扩展定义可以包括与不同问题关联的不同消息和/或注释(例如类别数据遗漏在扩展定义中标识为必需的数据、类别参数未符合在扩展定义中标识的特定类别参数类型、类别数据未满足在扩展定义中标识的约束等)。基于在注册与结构化扩展定义之间的不同,可以标识和显示这些不同消息和/或注释中的一个或者多个,从而允许以用户更容易理解的方式显示检测到的问题。
图5是根据一个或者多个实施例的用于将软件扩展注册插入到注册存储库中的示例处理500的流程图。处理500由扩展注册调停器(比如图1的调停器102)执行并且可以用软件、固件、硬件或者其组合来实现。处理500为用于将软件扩展注册插入到注册存储库中的示例处理;这里包括参照不同图对将软件扩展注册插入到注册存储库中的附加讨论。还参照图1讨论处理500
在处理500中,获得注册(动作502)。可以用多种不同方式获得这一注册。在一个或者多个实施例中,注册可以是作为分析另一设备或者系统的注册存储库(例如在另一设备或者系统上执行图4的处理400)的结果而获得的注册。作为选择,可以用其它方式获得注册。例如提供方程序110或者代表提供方的另一动作者可以向扩展注册调停器102呈现一个或者多个声明提供方程序110能够操纵特定类型的文件的注册。这些注册定义了提供方程序110可以执行的操作、如何请求提供方程序110执行动作等。
选择来自注册的类别的根(动作504)。这个根为该注册的命名空间的根。此外,对于聚集的类别(例如当类别的“aggregated”属性设置成真时),也选择注册的名称。
选择来自注册的注册参数(动作506)。可以基于多种不同标准(比如根据注册参数在注册中的顺序、根据注册参数的类型、按字母顺序、随机等)选择注册参数。
对于本地注册格式而言是适当地修改所选注册参数的数据(动作508)。实现处理500的扩展注册调停器了解本地注册格式以及如何将数据从在动作602中获得的注册所用的格式转换成本地注册(或者访问描述进行转换的信息)。这可以例如包括添加或者改变命名空间部件、将一个类型的字符转换成另一类型的字符(例如将“\”字符转换成“|”字符)等。
根据本地注册格式将修改的数据写入一个或者多个命名空间中(动作510)。(实现处理500的扩展注册调停器已知或者可访问的)本地注册格式可以指示数据将被写入一个位置,在该情况下在动作510将数据写入这一个位置。作为选择,本地注册格式可以指示数据将被写入多个位置,在该情况下在动作510中将数据写入那些多个位置。
然后,在动作512中进行有关是否有在动作506中尚未选择的注册的另外注册参数的确定。如果有尚未选择的另外注册参数,则选择那些注册参数之一(动作506)。
然而,如果在动作506中已经选择注册的每个注册参数,则完成处理500(动作514)。因此,实现处理500的扩展注册调停器按照本地注册格式在注册存储库104中存储用于注册的每个注册参数。
回到图1,移除系统扩展注册是指存储于注册存储库104中的与注册匹配的本地注册或者其参数。例如,如果提供方程序110想要停止通报它能够扩展消费方程序108(例如,如果提供方程序110被卸载时),则提供方程序110或者代表提供方的另一动作者可以向软件扩展调停器提供将从注册存储库104移除的注册。软件扩展调停器然后会从注册存储库104中移除包括注册存储库中的本地注册的数据。
在有注册驻留于一个或者多个注册存储库中的一个或者多个类别中,本地注册可能相互遮蔽或者覆盖。在一个或者多个实施例中,移除算法可以在从存储库移除注册参数的数据之前通过逐个注册参数地验证注册参数的数据与在注册存储库104中的对应数据相匹配(例如等效)来补偿这个行为。
图6是图示了根据一个或者多个实施例的用于从注册存储库移除软件扩展注册的示例处理600的流程图。处理600由扩展注册调停器(比如图1的调停器102)执行并且可以用软件、固件、硬件或者其组合来实现。处理600为用于从注册存储库移除软件扩展注册的示例处理;这里包括参照不同图对从注册存储库移除软件扩展注册的附加讨论。还参照图1讨论处理600。
在处理600中,获得注册(动作602)。可以用多种不同方式(比如从停止通报能够扩展消费方程序108的提供方程序110)获得这个注册。
选择来自注册的类别的根(动作604)。这个根为该注册的命名空间的根。
选择来自注册的注册参数(动作606)。可以基于多种不同标准(比如根据注册参数在注册中的顺序、根据注册参数类型、按字母顺序、随机等)来选择注册参数。
如对于本地注册格式而言适合地修改所选注册参数的数据(动作608)。如上文参照图5的动作508讨论的那样,实现处理600的扩展注册调停器了解本地注册格式以及如何将数据从在动作602中获得的注册所用的格式转换成本地注册(或者访问描述如何这样做的信息)。
也从插入操作会已经将数据写入的一个或者多个命名空间读取数据(动作610)。如果正将注册插入到注册存储库中,则这些命名空间例如是在图5的动作510中为注册写入修改的数据的一个或者多个命名空间。
比较来自动作608的修改数据与在动作610中读取的数据(动作612),并且做出有关在动作612中的比较数据是否相同的确定(动作614)。如果比较的数据不相同,则在动作616中进行有关是否有注册的在动作606中尚未选择的另外注册参数的检查。如果有尚未选择的另外注册参数,则选择那些注册参数之一(动作606)。
然而如果在动作606中已经选择了注册的每个注册参数,则完成处理600(动作618)。
回到动作614,如果比较的数据相同,则擦除从一个或者多个命名空间读取的数据(动作620)。将理解,来自不是所有的在动作610中从其读取数据的命名空间的数据可以与来自动作608的修改数据相同,在该情况下在动作620中仅擦除在动作610中读取的、与来自动作608的修改数据相同的数据。因此,实现处理60的扩展注册调停器擦除或者否则移除用于注册存储库104中的注册的每个注册参数。
处理600参照被转换成本地注册格式的注册参数来描述。作为选择,在动作610中读取的注册参数可以转换成在动作602中获得的注册所用的格式。
在一个或者多个实施例中,这里讨论的软件扩展分析的各种方面可以利用特里树结构。多种不同特里树结构可以与这里讨论的软件扩展分析一起使用。此外,还可以作为选择使用各种其它常规树结构。
根据一个或者多个方面,基于特里树结构确定在特定位置处表示的注册类别。一般而言,根据在结构化扩展定义中描述的命名空间和约束生成特里树结构。每个特里树节点包含比它的父代逐渐更具体的命名空间部件并且可以指向零个或者更多如下类别,针对这些类别在该命名空间或者在一些条件下在命名空间的直接子代发现本地注册。每个类别可以具有为了成为特定类别的本地注册而将满足的、对命名空间的零个或者更多附加约束。当试图确定存储库中的数据表示什么注册类别(如果有的话)时,检查特里树结构的这些节点中的一个或者多个节点以取出可以对存储库中的数据进行准确描述的一组类别。然后将存储库中的数据与这些类别中的每个类别进行比较,从而尝试将数据解释为注册参数。可以利用将存储库中的数据解释为注册参数的准确度用来试探地选择解释数据的零个或者一个类别。下文更具体讨论这个处理。
图7是图示了根据一个或者多个实施例的用于标识在特定位置表示的注册类别的示例处理700的流程图。处理700由分析注册存储库(比如图1的存储库104)中的本地注册的软件扩展调停器(比如图1的调停器102)来执行。可以用软件、固件、硬件或者其组合来实现处理700。处理700是用于标识和提取在注册存储库104内的非统一数据集中存储的本地注册的示例处理;这里包括参照不同图对从存储于注册存储库内的数据中提取注册的附加讨论。
在处理700的示例中,将注册存储库实施为注册表中的一个或者多个键和值。注册表包括其中一个或者多个键可以存储于另一键内的分级结构。此外,可以在每个键中包括零个或者更多值;这些值具有类型(例如数值或者文字)并且可以具有数据。本地注册可以作为单个值或者作为键的全部内容而存在。在一些情况下,注册以超过一个键的内容的覆盖并集存在。单个注册参数映射到注册表中的零个或者更多键或者值。注册表中的位置由路径名称标识,该路径名称通常从预先排序的一组根键之一开始,并且包括贯穿注册表分级结构的一个或者多个键名称直至到达特定键为止;用于值的路径名称以值的名称结束。路径的部件由定界符字符分离;在一个或者多个实施例中,这个定界符字符为‘\’,尽管作为选择可以使用其它字符。
在处理700中,生成特定命名空间可以表示其注册的一组已知类别。读取结构化扩展定义(例如图1的定义112)(动作702)并且使用这些定义来生成特里树结构(动作704)。结构化扩展定义标识注册存储库(在这一示例中为注册表)中的其中存储本地注册的位置的命名空间。这些命名空间用来生成特里树,该特里树的第一子代为注册表中的根键并且通过一个或者多个其它键继续。特里树针对路径名中的每个文件夹包括不同节点。下文参照图8更具体讨论这样的特里树的示例。
类别与特里树中表示用于类别的根的命名空间的每个节点相关联。单个节点保持与零个或者更多类别的关联,并且可以(例如由实现处理700的模块)维护这个关联的记录。因而,给定特里树的特定节点,可以容易标识与该节点表示的命名空间相关联的零个或者更多类别。这个关联允许容易地由命名空间标识类别放置它们的本地注册的命名空间上的附加约束,并且用作如下文更具体讨论的标识处理700的部分。
接收对确定命名空间可以表示其注册的可能类别的请求(动作706)。这样的请求也称为对解释命名空间的请求。特定位置由路径名称标识。通常从在与实现处理700相同的设备上运行的另一部件或者模块接收这个请求,尽管作为选择可以从另一设备接收该请求。
响应于该请求,将命名空间分解成它的逐渐具体部件(动作708)。例如,如果命名空间为HKLM\软件\类\,则将命名空间分解成它的部件“HKLM”、“软件”和“类”。
来自动作708的第一部件用作当前部件,而特里树的根用作当前节点(动作710)。例如,如果命名空间为HKLM\软件\类\,则在动作710中的当前部件为“HKLM”。在这一点,无当前结果得到的命名空间或者结果得到的类别(例如将结果得到的命名空间和结果得到的类别设置成空或者某些其它指示它们还没有被标识的值)。
然后做出有关在命名空间中是否有下一命名空间部件的检查(动作712)。如果在命名空间中有下一命名空间部件,则做出有关当前节点是否具有与下一命名空间部件匹配的子代的检查(动作714)。例如,如果命名空间为HKLM\软件\类\、当前部件为“HKLM”且当前节点为“HKLM”,则在动作714中做出有关特里树的当前节点是否具有“软件”这个子代的检查。
如果当前节点无与下一命名空间部件匹配的子代,则选择该子代作为当前节点,并且设置命名空间中的下一部件作为当前部件(动作716)。然后做出有关当前节点是否具有命名空间满足的任何类别的检查(动作718)。如果当前节点具有与当前部件匹配(相同)的一个或者多个类别,则当前节点具有命名空间满足的类别。例如,如果当前节点具有类别“FileAssociation”(只要当前命名空间的子代是用句点开始的容器,该类别就接受当前命名空间的子代)并且如果当前节点是具有子代“.mp3”的“类”,则当前节点的子代具有由“.mp3”表示的命名空间满足的类别“FileAssociation”。
如果当前节点具有命名空间满足的任何类别,则将命名空间满足的那些类别标识为结果得到的类别,并且将当前节点标识为结果得到的命名空间(动作720)。应当注意,对于聚集的类别(例如当将类别的“aggregated”属性设置成真时),在动作718中的检查和在动作720中的结果得到的类别引用命名空间的子代。例如,如果“FileAssociation”具有在HKLM\软件\类\处的根,则注册作为命名空间之内的下一键而存在,并且这个注册的类别是在动作718和720中引用的类别。
处理700然后返回到动作712以检查是否有下一个命名空间部件。如果没有下一个命名空间部件,则报告结果得到的命名空间和结果得到类别作为在命名空间标识的特定位置处表示的一个或者多个注册类别(动作722)。
回到动作718,如果当前节点没有命名空间满足的任何类别,则该处理700回到动作712以检查是否有下一个命名空间部件。如果没有下一个命名空间部件,则报告结果得到的命名空间和结果得到的类别作为在命名空间标识的特定位置处表示的一个或者多个注册类别(动作722)。
回到动作714,如果当前节点没有与下一个命名空间部件匹配的子代,则报告结果得到的命名空间和结果得到的类别作为在命名空间标识的特定位置处表示的一个或者多个注册类别(动作722)。
应当注意,可能出现不执行动作720的情形,因而将在动作722中报告的结果得到的命名空间和结果得到的类别设置为空或者一些指示它们未被标识的其它值。也应当注意,可能出现针对命名空间多次执行动作720的情形。在这样的情形中,在动作722中报告在动作720中最近设置的类别和命名空间。
在一个或者多个实施例中,做出有关在注册存储库中的命名空间的部件与在结构化扩展定义中描述的部件有多么接近的确定。可以通过使用多种不同常规技术中的任何技术比较两个命名空间部件来做出这个接近度确定,以便确定将部件之一变换成另一部件的成本。这样的技术可以为诸如移除字符或者空格、交换字符、插入字符等之类的某些操作不同地加权以便生成将命名空间部件之一变换成另一命名空间部件的成本。使用这样的技术,也确定将在两个命名空间部件之一大小的字符串变换成两个命名空间部件中的另一个大小的字符串的最大可能成本。然后生成如下值,该值是将部件之一变换成另一个的成本除以将一个大小的串变换成另一大小的串的最大可能成本。这个生成值越低,两个部件就相互越接近。如果这个生成值低于阈值,则可以确定两个路径名称接近到足以在发布本地注册时的错误。因而,如果生成值低于阈值,则两个路径名称可以视为相同(例如在动作714中,可以确定当前节点确实具有与下一个命名空间部件相同的子代,尽管二者可能并不相同)。
图8图示了用于可以根据一个或者多个实施例使用的结构化扩展定义的特里树800的示例。特里树800可以例如是在图7的动作704中生成的特里树结构。特里树800包括多个级别802、804、806、808和810。在每个级别中图示了诸如“HKLM”、“HKCU”、“软件”、“类”等一个或者多个节点。
特里树的根在级别802处并且无值。在级别802处图示了根的子代,并且这些子代表示图1的扩展注册调停器102知道如何分析的所有注册存储库的根。在级别806处图示了在级别804的命名空间部件的子代,在级别808处图示了在级别806的命名空间部件的子代,以此类推。在级别804-810的节点表示的命名空间是节点和任何父节点的名称,而在命名空间部件之间有反斜线。例如在级别808的节点“类”表示命名空间“HKLM\软件\类”。
每个级别802-810也可以具有与它关联的一个或者多个与在该级别的命名空间关联的类别。例如级别808可以包括与命名空间“HKLM\软件\类”关联的一个或者多个类别822。又例如,级别810可以包括与命名空间“HKLM\软件\类\CLSID”关联的一个或者多个类别824以及与命名空间“HKLM\软件\类\APPID”关联的一个或者多个类别826。
在一个或者多个实施例中,当实现用于标识在特定位置表示的注册类别的处理(比如图7的处理700)时,将参数存储为指向特里树结构中的元素的指针。特里树的每个元素或者节点(例如图8中所示每个键)存储于特定存储器位置中。作为用于标识在特定位置表示的注册类别的处理的部分,将参数表示为指向特里树中的对应存储器位置的指针。例如,在级别808的节点“类”将具有对应存储器位置,而路径名称“HKLM\软件\类”会是指向与“类”对应的该存储器位置的指针。
这个路径名称表示提供了高效存储器使用。无需为重叠路径名称维护重复信息。实际上,可以简单地维持指向正确存储器位置的指针。另外,可以维护存在的指向每个存储器位置的指针数目的记录。当指向特定特里树位置的指针数目变为零时,可以从存储器中移除特里树中的该位置(假设没有指向特里树中的该位置的子代的指针)。
使用这种作为指向存储器位置的指针的路径名称表示,可以容易确定路径等同性。如果两个路径名称是指向相同存储器位置的指针,则两个路径名称相同。然而,如果两个路径名称是指向不同存储器位置的指针,则两个路径名称并不相同。这个性质也允许极为高效的排序或者散列;使用指向节点的指针作为散列值,可以将路径很高效地存储为关联容器的键。
图9图示了可以被配置成实现根据一个或者多个实施例的软件扩展分析的示例计算设备900。计算设备900可以例如是图1的计算设备100。
计算设备900包括一个或者多个处理器或者处理单元902、一个或者多个计算机可读介质904(该介质可以包括一个或者多个存储器和/或存储部件906)、一个或者多个输入/输出(I/O)设备908以及允许各种部件和设备相互通信的总线910。可以包括计算机可读介质904和/或一个或者多个I/O设备908作为计算设备900的部分或者作为选择可以将它们耦合到计算设备900。总线910代表若干类型的总线结构(包括使用多种不同总线架构的存储器总线或者存储器控制器、外围总线、加速图形端口、处理器或者本地总线等)中的一个或者多个。总线910可以包括有线和/或无线总线。
存储器/存储部件906代表一个或者多个计算机存储介质。部件906可以包括易失性介质(比如随机存取存储器(RAM))和/或非易失性介质(比如只读存储器(ROM)、闪存、光盘、磁盘等)。部件906可以包括固定介质(例如RAM、ROM、固定硬驱动器等)以及可移动介质(例如闪存驱动器、可移动硬驱动器、光盘等)。
可以用软件(指令由一个或者多个处理单元902执行)实现这里讨论的技术。将理解,不同指令可以存储于计算设备900的不同部件中(比如处理单元902中、处理单元902的各种高速缓存存储器中、设备900的其它高速缓存存储器(未示出)中、其它计算机可读介质上等)。此外还将理解,指令在计算设备900中存储的位置可以随时间改变。
一个或者多个输入/输出设备908允许用户向计算设备900录入命令和信息,并且也允许向用户和/或其它部件或者设备呈现信息。输入设备的示例包括键盘、光标控制设备(例如鼠标)、麦克风、扫描仪等。输出设备的示例包括显示设备(例如监视器或者投影仪)、扬声器、打印机、网卡等。
这里可以在软件或者程序模块的一般背景中描述各种技术。一般而言,软件包括执行特定任务或者实现特定抽象数据类型的例程、程序、对象、部件、数据结构等。可以在某一形式的计算机可读介质上存储或者通过该介质传输这些模块和技术的实现。计算机可读介质可以是可以由计算设备访问的一种或者多种任何可用的介质。举例而言而非限制,计算机可读介质可以包括“计算机存储介质”和“通信介质”。
“计算机存储介质”包括用任何用于存储信息(比如计算机可读指令、数据结构、程序模块或者其它数据)的方法或者技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或者其它存储器技术、CD-ROM、数字多用途盘(DVD)或者其它光学储存器、磁盒、磁带、磁盘储存器或者其它磁存储设备或者任何可以用来存储所需信息并且可以由计算机存取的其它介质。
“通信介质”通常在调制的数据信号(比如载波)或者其它传送机制中体现计算机可读指令、数据结构、程序模块或者其它数据。通信介质也包括任何信息递送介质。术语“调制的数据信号”意味着如下信号,该信号的一个或者多个特性以在信号中编码信息这样的方式来设置或者改变。举例而言而非限制,通信介质包括有线介质(比如有线网络或者直接接线连接)和无线介质(比如声学、RF、红外线和其它无线介质)。任何上述介质的组合也包括在计算机可读介质的范围内。
一般而言,可以使用软件、固件、硬件(例如固定逻辑电路)、人工处理或者这些实施方式的组合来实现任何这里描述的功能或者技术。如这里所用的术语“模块”和“部件”一般表示软件、固件、硬件或者其组合。在软件实施方式的情况下,模块、功能或者逻辑表示当在处理器(例如一个或者多个CPU)上执行时执行特定任务的程序代码。程序代码可以存储于一个或者多个计算机可读存储器设备(可以参照图9发现其进一步描述)中。这里描述的软件扩展分析技术的特征独立于平台,这意味着这些技术可以在具有多种处理器的多种商用计算平台上实现。
虽然已经用结构特征和/或方法动作特有的语言描述了主题内容,但是将理解在所附权利要求中限定的主题未必限于上文描述的具体特征或者动作。实际上,上文描述的具体特征和动作作为实现权利要求的示例形式而公开。
Claims (15)
1.一种计算设备(900),包括:
处理器(902);以及
一个或者多个计算机可读介质(904),耦合到所述处理器并且具有存储于其上的多个指令,所述指令在由所述处理器执行时使所述处理器:
获得(302)多个结构化扩展定义,每个结构化扩展定义对应于一个或者多个类别,并且每个结构化扩展定义按照软件扩展语言编写;
访问(306)表示按照注册存储库本地的格式存储的注册的数据;以及
至少部分基于所述多个结构化扩展定义来分析(308)所述注册存储库中的数据。
2.如权利要求1所述的计算设备,所述指令还使所述处理器:
根据所述多个结构化扩展定义来生成特里树结构,所述特里树结构包括用于每个结构化扩展定义中的每个类别的路径名称中的每个命名空间部件的节点;
接收对将注册存储库中的数据解释为注册的请求;
检查所述特里树结构的节点中的一个或者多个以确定与满足所述请求的命名空间对应的节点;以及
使用与所述节点对应的类别来标识所述注册的适当类别。
3.如权利要求1所述的计算设备,在每个结构化扩展定义中的每个类别的路径名称中的每个命名空间部件具有关联的存储器位置,并且命名空间部件的每个路径名称由指向用于所述命名空间部件的相关联存储器位置的指针来引用。
4.如权利要求1所述的计算设备,其中所述分析至少部分基于与在所述注册存储库中维护的一个或者多个本地注册的类别相对应的多个结构化扩展定义。
5.如权利要求1所述的计算设备,其中分析一个或者多个本地注册是将与命名空间关联的类别中的每个与在所述注册存储库中的对应数据进行比较,并且确定在所述注册存储库中的数据是否符合由所述类别定义的规则,导致发现按照所述注册存储库本地格式的注册。
6.如权利要求1所述的计算设备,其中分析注册存储库的数据是生成在所述注册存储库中表示的注册列表。
7.如权利要求1所述的计算设备,其中分析注册存储库的数据是生成具有注册的本地表示的问题列表。
8.如权利要求1所述的计算设备,其中访问注册存储库的数据是经由接口模块访问所述注册存储库,所述接口模块被配置成接受一种形式的命令并且将所述命令转换成所述注册存储库特有的形式。
9.如权利要求1所述的计算设备,所述注册存储库除了所述注册之外还包括非注册数据。
10.一种实现于设备上的方法,所述方法包括:
获得(502,602)按照软件扩展语言编写的结构化扩展定义;以及
基于所述结构化扩展定义来修改(510,620)注册存储库,所述注册存储库包括按照所述注册存储库本地的并且与所述软件扩展语言不同的格式存储的注册。
11.如权利要求10所述的方法,还包括:
将所述结构化扩展定义的一个或者多个注册参数的数据转换成本地注册;以及
所述修改注册存储库包括将所转换的数据写入注册存储库的一个或者多个命名空间中。
12.如权利要求10所述的方法,还包括:
将所述结构化扩展定义的一个或者多个注册参数的数据转换成本地注册;
从所述注册存储库的命名空间读取数据;
比较所转换的数据与所读取的数据;以及
只有如果所转换的数据和所读取的数据相同,才从所述注册存储库的命名空间擦除所读取的数据。
13.如权利要求10所述的方法,还包括:
从所述注册存储库的名称空间读取数据;
将所述数据转换成与所述结构化扩展定义的一个或者多个注册参数相同的格式;
比较所转换的数据与一个或者多个注册参数;以及
只有如果所述比较指示所转换的数据和所述一个或者多个注册参数相同,才从所述注册存储库的命名空间擦除所读取的数据。
14.如权利要求10所述的方法,其中所述软件扩展语言定义:
一个或者多个第一元素,每个第一元素定义用于类别的数据类型;
第二元素,标识一个或者多个第一元素;以及
第三元素,指示存储用于所述类别的数据的注册存储库中的位置。
15.如权利要求10所述的方法,还包括:
获得多个附加结构化扩展定义,其每个与一个或者多个类别对应并且每个按照所述软件扩展语言编写;
访问表示按照所述注册存储库本地的格式存储的注册的数据;以及
至少部分基于多个附加结构化扩展定义来分析所述注册存储库中的数据。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/483600 | 2009-06-12 | ||
US12/483,600 US20100318964A1 (en) | 2009-06-12 | 2009-06-12 | Software extension analysis |
PCT/US2010/037655 WO2010144374A2 (en) | 2009-06-12 | 2010-06-07 | Software extension analysis |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102460381A true CN102460381A (zh) | 2012-05-16 |
Family
ID=43307523
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010800260259A Pending CN102460381A (zh) | 2009-06-12 | 2010-06-07 | 软件扩展分析 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20100318964A1 (zh) |
EP (1) | EP2440997A2 (zh) |
JP (1) | JP2012529711A (zh) |
KR (1) | KR20120037393A (zh) |
CN (1) | CN102460381A (zh) |
WO (1) | WO2010144374A2 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109799951A (zh) * | 2017-11-16 | 2019-05-24 | 三星电子株式会社 | 使用分布式的和虚拟的命名空间管理的按需存储供应 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101571348B1 (ko) * | 2009-09-01 | 2015-12-04 | 삼성전자주식회사 | 호스트 디바이스, 워크폼 실행 디바이스, 워크폼 생성방법 및 워크폼 실행 방법 |
US8769105B2 (en) * | 2012-09-14 | 2014-07-01 | Peaxy, Inc. | Software-defined network attachable storage system and method |
US20140106165A1 (en) * | 2012-10-12 | 2014-04-17 | Georgia-Pacific Chemicals Llc | Paper with higher oil repellency |
US20150113498A1 (en) * | 2013-10-21 | 2015-04-23 | Microsoft Corporation | Modeling customizations to a computer system without modifying base elements |
US9930095B2 (en) * | 2014-03-26 | 2018-03-27 | Google Llc | System for managing extension modifications to web pages |
JP2016035714A (ja) * | 2014-08-04 | 2016-03-17 | キヤノン株式会社 | 情報処理装置、情報処理装置におけるプログラム管理方法、プログラム、およびシステム |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020032768A1 (en) * | 2000-04-10 | 2002-03-14 | Voskuil Erik K. | Method and system for configuring remotely located applications |
US20040143835A1 (en) * | 2003-01-17 | 2004-07-22 | Rainer Dattke | Automatically upgradeable extension of software |
CN1871598A (zh) * | 2003-08-21 | 2006-11-29 | 微软公司 | 用于可由硬件/软件接口系统管理的信息单元的扩展和继承的系统和方法 |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6092053A (en) * | 1998-10-07 | 2000-07-18 | Cybercash, Inc. | System and method for merchant invoked electronic commerce |
US7908602B2 (en) * | 1999-06-30 | 2011-03-15 | Blackboard Inc. | Internet-based education support system, method and medium providing security attributes in modular, extensible components |
US7000230B1 (en) * | 2000-06-21 | 2006-02-14 | Microsoft Corporation | Network-based software extensions |
US7058656B2 (en) * | 2002-04-11 | 2006-06-06 | Sun Microsystems, Inc. | System and method of using extensions in a data structure without interfering with applications unaware of the extensions |
US8335779B2 (en) * | 2002-08-16 | 2012-12-18 | Gamroe Applications, Llc | Method and apparatus for gathering, categorizing and parameterizing data |
US7434157B2 (en) * | 2003-12-09 | 2008-10-07 | Microsoft Corporation | Programmable object model for namespace or schema library support in a software application |
US20050172282A1 (en) * | 2004-01-30 | 2005-08-04 | Michael Shenfield | System and method for publishing and accessing application APIs on a generic terminal |
US20060122820A1 (en) * | 2004-12-03 | 2006-06-08 | The Mitre Corporation | Scripting language for domain-specific modification of a simulation model |
US7392259B2 (en) * | 2004-12-14 | 2008-06-24 | Electronics And Telecommunications Research Institute | Method and system for supporting XQuery trigger in XML-DBMS based on relational DBMS |
US7600028B2 (en) * | 2005-01-10 | 2009-10-06 | Google Inc. | Methods and systems for opportunistic cookie caching |
US20060265508A1 (en) * | 2005-05-02 | 2006-11-23 | Angel Franklin J | System for administering a multiplicity of namespaces containing state information and services |
GB0509738D0 (en) * | 2005-05-12 | 2005-06-22 | Cambridge Consultants | Processor and interface |
US8074231B2 (en) * | 2005-10-26 | 2011-12-06 | Microsoft Corporation | Configuration of isolated extensions and device drivers |
US7836439B2 (en) * | 2006-02-03 | 2010-11-16 | Research In Motion Limited | System and method for extending a component-based application platform with custom services |
US8132188B2 (en) * | 2006-04-21 | 2012-03-06 | International Business Machines Corporation | Method and system for extension registry filtering |
WO2008069125A1 (ja) * | 2006-12-08 | 2008-06-12 | Nec Corporation | データ管理装置 |
US20080301290A1 (en) * | 2007-06-01 | 2008-12-04 | Slipstream Data Inc. | Method and apparatus for management of common side information |
US7930273B1 (en) * | 2007-07-30 | 2011-04-19 | Adobe Systems Incorporated | Version management for application execution environment |
-
2009
- 2009-06-12 US US12/483,600 patent/US20100318964A1/en not_active Abandoned
-
2010
- 2010-06-07 JP JP2012515023A patent/JP2012529711A/ja not_active Withdrawn
- 2010-06-07 WO PCT/US2010/037655 patent/WO2010144374A2/en active Application Filing
- 2010-06-07 EP EP10786643A patent/EP2440997A2/en not_active Withdrawn
- 2010-06-07 CN CN2010800260259A patent/CN102460381A/zh active Pending
- 2010-06-07 KR KR1020117029737A patent/KR20120037393A/ko not_active IP Right Cessation
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020032768A1 (en) * | 2000-04-10 | 2002-03-14 | Voskuil Erik K. | Method and system for configuring remotely located applications |
US20040143835A1 (en) * | 2003-01-17 | 2004-07-22 | Rainer Dattke | Automatically upgradeable extension of software |
CN1871598A (zh) * | 2003-08-21 | 2006-11-29 | 微软公司 | 用于可由硬件/软件接口系统管理的信息单元的扩展和继承的系统和方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109799951A (zh) * | 2017-11-16 | 2019-05-24 | 三星电子株式会社 | 使用分布式的和虚拟的命名空间管理的按需存储供应 |
CN109799951B (zh) * | 2017-11-16 | 2024-03-01 | 三星电子株式会社 | 使用分布式的和虚拟的命名空间管理的按需存储供应 |
Also Published As
Publication number | Publication date |
---|---|
WO2010144374A2 (en) | 2010-12-16 |
EP2440997A2 (en) | 2012-04-18 |
JP2012529711A (ja) | 2012-11-22 |
KR20120037393A (ko) | 2012-04-19 |
WO2010144374A3 (en) | 2011-03-03 |
US20100318964A1 (en) | 2010-12-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Ponnekanti et al. | Interoperability among independently evolving web services | |
CN1645841B (zh) | 使用插入消息更改向代码自适应地分派接收消息 | |
US9665826B2 (en) | Automated problem inference from bug repositories | |
Mamas et al. | Towards portable source code representations using XML | |
CN102460381A (zh) | 软件扩展分析 | |
US20110289407A1 (en) | Font recommendation engine | |
CN107357593A (zh) | 源代码文件组建方法、装置、电子终端及可读存储介质 | |
CN101223517A (zh) | 智能容器索引与搜索 | |
CN101452386A (zh) | 使用正向推理链执行基于上下文模型的策略的方法及策略引擎 | |
Connell et al. | Object-oriented rapid prototyping | |
Burzlaff et al. | Semantic interoperability methods for smart service systems: A survey | |
US20090193398A1 (en) | System and method for integrated artifact management | |
US20060010439A1 (en) | Conflict detection in rule sets | |
US8707171B2 (en) | Service registry policy editing user interface | |
Kchaou et al. | UML models change impact analysis using a text similarity technique | |
CN110688096A (zh) | 包含插件的应用程序的构建方法、装置、介质及电子设备 | |
CN110175022B (zh) | 自动生成pojo类的方法、装置及存储介质、计算机设备 | |
Bessghaier et al. | What constitutes the deployment and runtime configuration system? An empirical study on openstack projects | |
CN116578282A (zh) | 代码生成方法、装置、电子设备及介质 | |
Wille et al. | Identifying variability in object-oriented code using model-based code mining | |
Xiao et al. | ChoroWare: a software toolkit for choropleth map classification | |
US20070299705A1 (en) | Method and apparatus for observation model validation | |
JP7381290B2 (ja) | 計算機システム及びデータの管理方法 | |
Geist et al. | Towards functional safety and security for adaptive and flexible business processes | |
CN111277650A (zh) | 一种结合功能指标和非功能指标的自动化微服务识别方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20120516 |