專利名稱:用于經(jīng)由上下文策略控制來控制應(yīng)用程序間關(guān)聯(lián)的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)軟件,尤其涉及操作系統(tǒng)軟件。
背景在眾多環(huán)境中,尤其在其中經(jīng)由網(wǎng)絡(luò)交付應(yīng)用程序的環(huán)境中,最重要的特征是在無需復(fù)雜安裝的情況下在進(jìn)行中(on the fly)運(yùn)行應(yīng)用程序的能力。一般在某些現(xiàn)有技術(shù)的系統(tǒng)中,花費(fèi)了大量努力來修改客戶機(jī)系統(tǒng)以顯現(xiàn)如程序被安裝一般,或來實(shí)際安裝軟件本身,然后回退這些修改以還原成原始配置。這樣做出現(xiàn)了多個問題應(yīng)用程序與計(jì)算機(jī)當(dāng)前配置之間的沖突、相同或不同應(yīng)用程序的多個實(shí)例、回退過程的復(fù)雜性需要應(yīng)用程序經(jīng)歷嚴(yán)格的過程以確保其所有修改都被考慮到,而多個應(yīng)用程序?qū)蚕砦募拖到y(tǒng)組件的使用復(fù)雜化了回退和安裝過程。
在眾多應(yīng)用程序執(zhí)行環(huán)境內(nèi),期望隔離應(yīng)用程序以防止由于交際性(sociability)和版本控制問題引起的系統(tǒng)故障。然而,隔離將會阻止這些程序互操作,除非被配置成這樣做。該問題在“虛擬安裝”環(huán)境中尤其尖銳,軟件應(yīng)用程序借由虛擬安裝在操作系統(tǒng)內(nèi)執(zhí)行,但實(shí)際上未安裝在該操作系統(tǒng)(OS)中,或在某些情況中,在進(jìn)行中被安裝并被移除。
發(fā)明概述根據(jù)本發(fā)明的實(shí)施例針對當(dāng)或者未被設(shè)計(jì)成應(yīng)用程序間可通信和關(guān)聯(lián)或者經(jīng)由默認(rèn)行為求要附加的系統(tǒng)配置的環(huán)境存在時便于應(yīng)用程序間通信和關(guān)聯(lián)。這些實(shí)施例保留系統(tǒng)的原始前提,提供應(yīng)用程序的運(yùn)行時隔離,但允許在嚴(yán)格管理和操作策略下的互操作性。
根據(jù)本發(fā)明的一個方面,用于控制多個軟件應(yīng)用程序和資源的互操作的方法包括,截取從第一應(yīng)用程序到第二應(yīng)用程序或資源的通信、將該通信定向至上下文管理系統(tǒng)、生成該通信的上下文候選列表、根據(jù)為這些上下文定義的至少一個策略評估候選列表以標(biāo)識該通信的結(jié)果動作和名字空間、以及所標(biāo)識的名字空間內(nèi)如由這些策略所定義地執(zhí)行該動作。該方法還包括跟蹤第二應(yīng)用程序的一個或多個版本,以及跟蹤應(yīng)用程序和/或資源名的演變。該方法還包括標(biāo)識與候選列表上的上下文相關(guān)聯(lián)的一個或多個操作,并在進(jìn)一步通信之前執(zhí)行所標(biāo)識的操作。候選列表從一個或多個分布式的上下文中生成。這些通信包括進(jìn)程間通信、操作系統(tǒng)調(diào)用、API調(diào)用或庫調(diào)用的至少其中之一。上下文包括全局上下文、受管上下文、本地系統(tǒng)上下文、系統(tǒng)虛擬上下文、廠商上下文、用戶上下文、會話上下文、共享上下文或隔離上下文的至少其中之一。策略包括用于標(biāo)識何時應(yīng)用策略的匹配助記法(mnemonic)、多個請求相關(guān)參數(shù)以及用于應(yīng)用策略的規(guī)則的至少其中之一。
根據(jù)本發(fā)明的另一方面,用于定義將在其它應(yīng)用程序或資源內(nèi)執(zhí)行的應(yīng)用程序的替換名字空間的方法包括,截取對公用名資源的調(diào)用、標(biāo)識該調(diào)用的目標(biāo)名字空間、將公用名轉(zhuǎn)換成可由該名字空間內(nèi)的應(yīng)用程序使用的本地名,以及提供對由該本地名標(biāo)識的資源的訪問。該方法還包括,跟蹤應(yīng)用程序的一個或多個版本,以及跟蹤應(yīng)用程序或資源名的演變。本地名也可被轉(zhuǎn)換成絕對名,使得對由該本地名標(biāo)識的資源的訪問可簡化成對由替換名字空間中的不同本地名標(biāo)識的資源的訪問。標(biāo)識目標(biāo)名字空間的步驟包括一個或多個分布式查詢,其中對目標(biāo)名字空間的至少一個查詢可對跟蹤一個或多個系統(tǒng)公用的名字空間的管理系統(tǒng)執(zhí)行。
根據(jù)本發(fā)明的另一方面,用于控制多個軟件應(yīng)用程序和資源的互操作的系統(tǒng)包括,生成通信的上下文的候選列表的上下文管理系統(tǒng)、根據(jù)為這些上下文定義的至少一個策略評估候選列表并且還標(biāo)識該通信的結(jié)果動作和名字空間的策略引擎、以及將從第一應(yīng)用程序到第二應(yīng)用程序或資源的通信定向到上下文管理系統(tǒng)的虛擬環(huán)境管理器,該虛擬環(huán)境管理器接收指示所標(biāo)識的名字空間內(nèi)的如由該至少一個策略定義的結(jié)果動作的指令。
本發(fā)明提供用于在不改變客戶計(jì)算機(jī)的操作系統(tǒng)的情況下創(chuàng)建應(yīng)用程序軟件環(huán)境的系統(tǒng),該系統(tǒng)包括操作系統(tǒng)抽象和保護(hù)層,其中所述抽象和保護(hù)層被介入運(yùn)行的軟件應(yīng)用程序與所述操作系統(tǒng)之間,借此提供了可在其中運(yùn)行應(yīng)用程序的虛擬環(huán)境,并基本上消除了應(yīng)用程序級交互。較佳地,對操作系統(tǒng)的任何直接改變在運(yùn)行的應(yīng)用程序的上下文內(nèi)選擇性進(jìn)行,且抽象和保護(hù)層根據(jù)管理設(shè)置動態(tài)改變虛擬環(huán)境。此外,在某些實(shí)施例中,系統(tǒng)不斷監(jiān)視共享系統(tǒng)資源的使用并用作對系統(tǒng)組件應(yīng)用和移除改變的服務(wù)。
因此例如,在基于Windows操作系統(tǒng)且其中對Windows Registry(注冊表)的所有操作均經(jīng)由Win32 API的實(shí)施例中,系統(tǒng)較佳地提供用于掛鉤函數(shù)的手段,借此每次調(diào)用所述函數(shù)時,另一函數(shù)或應(yīng)用程序?qū)⒔厝≌{(diào)用,且該系統(tǒng)最好掛鉤每一合適的API函數(shù)以服務(wù)于不論是由從服務(wù)器運(yùn)行的應(yīng)用程序作出的還是由應(yīng)用程序針對正被積極管理的配置鍵作出的請求。
通過如其中相同的參考字符指的是所有不同視圖中的相同部分的附圖中所示,閱讀本發(fā)明的實(shí)施例的以下更具體描述,本發(fā)明的前述和其它特征和優(yōu)點(diǎn)將是顯而易見的。
附圖簡述
圖1是示出本發(fā)明、操作系統(tǒng)與軟件應(yīng)用程序的相對關(guān)系的框圖示意圖;圖2是示出以私有上下文和服務(wù)運(yùn)行的兩個應(yīng)用程序的框圖示意圖;圖3是示出兩個應(yīng)用程序運(yùn)行同時操作系統(tǒng)提供系統(tǒng)資源的共享視圖的框圖示意圖;圖4是示出操作系統(tǒng)防護(hù)和子系統(tǒng)的框圖示意圖;圖5示出了根據(jù)本發(fā)明的實(shí)施例的包括含有一個或多個計(jì)算設(shè)備的多個系統(tǒng)的示例性主機(jī)操作系統(tǒng),其中整個系統(tǒng)的視圖對應(yīng)于全局上下文;圖6和7示出了根據(jù)參考圖5示出的示例性系統(tǒng)中的實(shí)施例的不同上下文,諸如全局、受管、本地系統(tǒng)、系統(tǒng)虛擬、廠商、用戶、會話、共享和隔離上下文;圖8示出了根據(jù)本發(fā)明的實(shí)施例的利用彼此和操作系統(tǒng)的資源的兩個應(yīng)用程序以及這些資源的三個不同的配置文件的框圖;圖9示出了根據(jù)本發(fā)明的實(shí)施例的用于確定相關(guān)上下文和可用范圍的軟件核心的框圖;圖10示出了根據(jù)本發(fā)明的實(shí)施例的由進(jìn)程管理器使用的進(jìn)程樹;圖11示出了根據(jù)本發(fā)明的實(shí)施例的包括系統(tǒng)可用上下文表以及上下文之間的關(guān)聯(lián)的上下文管理器的示意圖;以及圖12示出了根據(jù)本發(fā)明的實(shí)施例的被附連于另一程序的資源樹的資源的示意圖。
較佳實(shí)施例的詳細(xì)描述現(xiàn)在參考圖1,示出了顯示本發(fā)明、操作系統(tǒng)和軟件應(yīng)用程序的相對關(guān)系的框圖示意圖。本發(fā)明的較佳實(shí)施例提供了名為“操作系統(tǒng)防護(hù)”的操作系統(tǒng)抽象和保護(hù)層100。眾多操作系統(tǒng)10在內(nèi)部提供斷層域(fault domain)以保護(hù)應(yīng)用程序50使其在運(yùn)行時免于彼此影響。然而,共享的系統(tǒng)資源和眾多其它操作系統(tǒng)特征使這種保護(hù)域被妥協(xié)。操作系統(tǒng)抽象和保護(hù)層100將提供應(yīng)用程序50之間附加的、程序上受控的屏障,以消除大多數(shù)應(yīng)用程序級交互。與將改變包含在運(yùn)行的應(yīng)用程序的上下文內(nèi)相對,部署在應(yīng)用程序50與操作系統(tǒng)10之間的操作系統(tǒng)抽象和保護(hù)層100選擇性地允許對操作系統(tǒng)10的直接改變。例如,在基于Windows的系統(tǒng)中,對Windows Registry的所有操作一般經(jīng)由Win32 APL完成。如下所述,可掛鉤如QueryRegEx和GetProfileString的系統(tǒng)函數(shù),使得每次調(diào)用它們時,另一函數(shù)或應(yīng)用程序?qū)⒔厝≌{(diào)用。本發(fā)明的操作系統(tǒng)防護(hù)100將掛鉤每一合適的API函數(shù)以服務(wù)由正被積極管理的應(yīng)用程序作出或由應(yīng)用程序針對正被積極管理的配置項(xiàng)作出的請求。以此方式,本發(fā)明的實(shí)施例可在不對最終用戶的系統(tǒng)進(jìn)行任何實(shí)際修改的情況下創(chuàng)建應(yīng)用程序環(huán)境,除非明確配置成這樣做。而且,由應(yīng)用程序在運(yùn)行時進(jìn)行的任何修改可被容易地持久化或消除。
如此處所使用的,術(shù)語“操作系統(tǒng)防護(hù)”定義了運(yùn)行的應(yīng)用程序與目標(biāo)計(jì)算機(jī)或客戶計(jì)算機(jī)的操作系統(tǒng)之間的提供可供應(yīng)用程序在其中運(yùn)行的虛擬環(huán)境的層。該虛擬環(huán)境具有若干目的。首先,它防止運(yùn)行的應(yīng)用程序?qū)蛻粲?jì)算機(jī)進(jìn)行修改。如果應(yīng)用程序嘗試改變客戶計(jì)算機(jī)的底層操作系統(tǒng)設(shè)置,則這樣的設(shè)置將被保護(hù)且僅在虛擬環(huán)境中“進(jìn)行”。例如,如果應(yīng)用程序嘗試改變?nèi)鏜SVCRT.DLL的共享對象的版本,則這種改變對該應(yīng)用程序本地化,且駐留在客戶計(jì)算機(jī)上的代碼保持未被改變。
第二,本發(fā)明的實(shí)施例在不執(zhí)行安裝的情況下向運(yùn)行的應(yīng)用程序提供了顯現(xiàn)為安裝環(huán)境的一種環(huán)境,因此是“偽安裝”或擬安裝。所有設(shè)置在正被服務(wù)的應(yīng)用程序運(yùn)行時或當(dāng)該應(yīng)用程序需要該特定設(shè)置時即時引入虛擬環(huán)境內(nèi)。例如,如果諸如Adobe Photoshop的計(jì)算機(jī)程序期望看到HKEY_LOCAL_MACHINE\Software\Adobe下的一組Windows Registry條目,且由于Photoshop從未被安裝,因此它們不存在于客戶計(jì)算機(jī)上,則根據(jù)本發(fā)明的這一方面制作的系統(tǒng)將向Photoshop編程代碼“顯示”這些注冊表?xiàng)l目,就如同它們駐留在該客戶計(jì)算機(jī)上一般。
其次,本發(fā)明的實(shí)施例防止可能存在于客戶/用戶機(jī)器上的信息干擾或修改應(yīng)用程序的行為。例如,如果用戶擁有位于HKEY_LOCAL_MACHINE\Software\Adobe下的Photoshop的舊版本的已存在的注冊表?xiàng)l目,但現(xiàn)在想要操作新版本,則這些條目可向新應(yīng)用程序隱藏以防止沖突。
最后,本發(fā)明的實(shí)施例解鎖當(dāng)應(yīng)用程序當(dāng)前被寫時可能不存在的應(yīng)用程序行為。這是經(jīng)由根據(jù)管理設(shè)置來動態(tài)改變虛擬環(huán)境的能力來進(jìn)行的。例如,在企業(yè)軟件應(yīng)用程序的典型實(shí)例中,客戶應(yīng)用程序可能期望從注冊表中的設(shè)置中讀取用戶應(yīng)連接的數(shù)據(jù)庫的地址的設(shè)置。因?yàn)樵撟员礞I通常存儲在HKEY_LOCAL_MACHINE中,因此該設(shè)置對整個客戶計(jì)算機(jī)是全局的。用戶在不重新安裝客戶機(jī)或了解如何修改該注冊表鍵的情況下僅可連接至一個數(shù)據(jù)庫,且當(dāng)每次他們想要運(yùn)行應(yīng)用程序時都這樣做。然而,通過實(shí)現(xiàn)本發(fā)明,應(yīng)用程序的兩個實(shí)例現(xiàn)在可運(yùn)行在同一客戶計(jì)算機(jī)上,各自連接至不同的數(shù)據(jù)庫。
上下文提供了這種功能,每一應(yīng)用程序就能夠在系統(tǒng)內(nèi)的私有上下文中運(yùn)行。對應(yīng)用程序而言,它擁有其自己對系統(tǒng)及其行為的視圖。本發(fā)明的實(shí)施例通過固有本質(zhì)來提供此功能。參考圖2,可向兩個單獨(dú)的應(yīng)用程序52、54,或同一應(yīng)用程序(圖1中所示的50)的兩個實(shí)例提供其中它們將顯現(xiàn)為擁有系統(tǒng)服務(wù)、配置和數(shù)據(jù)的分開或不同的副本的私有上下文。在較佳實(shí)施例中,這是系統(tǒng)的默認(rèn)行為。
通過擴(kuò)展此概念,本發(fā)明的實(shí)施例的操作系統(tǒng)防護(hù)100也可提供其中兩個或多個應(yīng)用程序52、54可共享其虛擬設(shè)置中的某些或全部的共享的、受控的上下文。這對諸如Microsoft Office的應(yīng)用程序套件或?qū)Υ嬖谄渌鼞?yīng)用程序的情況下不同地執(zhí)行的應(yīng)用程序而言是重要的。例如,眾多應(yīng)用程序使用Microsoft Word作為進(jìn)行郵件合并或文檔創(chuàng)建功能的引擎。應(yīng)用程序必須知道Word已安裝或存在,且能夠接入其功能。在較佳實(shí)施例中,同一應(yīng)用程序的兩個實(shí)例默認(rèn)將共享單個上下文,而兩個單獨(dú)的應(yīng)用程序?qū)⒕S護(hù)私有上下文。參考圖3,兩個應(yīng)用程序52、54可運(yùn)行,同時操作系統(tǒng)防護(hù)100提供可用系統(tǒng)資源的共享視圖。
設(shè)計(jì)如圖4中所示,操作系統(tǒng)防護(hù)由以下子系統(tǒng)組成核心102、配置管理器104、文件管理器106、共享對象管理器108、設(shè)備管理器110、字體管理器112、進(jìn)程管理器120、進(jìn)程環(huán)境管理器114、加載器116以及恢復(fù)管理器118。除核心102、進(jìn)程管理器120以及加載器116以外,所有其它子系統(tǒng)都是虛擬系統(tǒng)的特征,虛擬系統(tǒng)將在后文中進(jìn)一步詳細(xì)描述。核心102主要負(fù)責(zé)管理應(yīng)用程序及其如由配置文件定義的上下文。
由操作系統(tǒng)防護(hù)提供的進(jìn)程管理器120允許向核心102通知可能受關(guān)注的任何進(jìn)程或線程事件。也向依賴于操作系統(tǒng)的實(shí)現(xiàn)提供抽象層以便管理進(jìn)程空間和操控線程處理。進(jìn)程可被分組在一起成為應(yīng)用程序束(bundle)。應(yīng)用程序束是全部彼此共享其虛擬資源的一組進(jìn)程。例如,Microsoft Word和Microsoft Excel可能想要共享虛擬注冊表和虛擬文件系統(tǒng)以便能夠作為應(yīng)用程序套件在一起工作。進(jìn)程管理器120稱這些應(yīng)用程序束為“應(yīng)用程序”。關(guān)于應(yīng)用程序的信息將一直存在直到進(jìn)程管理器120被告知釋放該應(yīng)用程序。如果另一進(jìn)程需要被加載到應(yīng)用程序束內(nèi),則只要該應(yīng)用程序還未被釋放就可以這樣做。
本發(fā)明的實(shí)施例的加載器子系統(tǒng)116被用來允許虛擬環(huán)境來被換入或換出運(yùn)行的系統(tǒng)。虛擬子系統(tǒng)中的每一個能夠?yàn)榧虞d器116串行化其配置,并經(jīng)由逆過程檢索它。此外,加載器116能夠分階段加載/卸載以及將單個階段的結(jié)果組合成一單一環(huán)境描述。
注冊表和配置各應(yīng)用程序需要不同數(shù)量的配置信息以便正確操作。存在0到數(shù)千條配置記錄以便應(yīng)用程序讀取其配置。在Windows上,存在配置信息的兩個公共位置,即Windows Registry和系統(tǒng)級初始化文件win.ini和system.ini。此外,\WINDOWS\SYSTEM目錄是供各應(yīng)用程序?qū)懭霊?yīng)用程序?qū)S门渲没虺跏蓟募墓参恢?。?yīng)用程序也可使用其本地應(yīng)用程序目錄中的配置或數(shù)據(jù)文件來存儲附加的配置信息。通常,這些信息難以處理,由于它是專用格式的。在除Windows以外的平臺上,不存在Registry的對等物,但存在配置信息的公共目錄。X Windows具有應(yīng)用程序默認(rèn)的目錄。Macintosh具有System Folder(系統(tǒng)文件夾),而其它操作系統(tǒng)將具有相應(yīng)的特征。重要地,如圖2中可見,注意到在大多數(shù)UNIX系統(tǒng)上,每一單獨(dú)的應(yīng)用程序52、54通常本地存儲其自己的配置62、64。
本發(fā)明的實(shí)施例包括虛擬Windows Registry組件,它向應(yīng)用程序提供全功能的注冊表,但防止對底層系統(tǒng)注冊表的修改。將呈示應(yīng)用程序期望訪問的所有鍵,但它們僅可存在于虛擬注冊表中。以此方式,本發(fā)明的操作系統(tǒng)防護(hù)100以及Windows Registry形成用于訪問注冊表的兩階段的過程。如果應(yīng)用程序需要訪問鍵,則它將查詢Registry。操作系統(tǒng)防護(hù)將以該鍵及其值(如果已知)響應(yīng)。否則,它將允許請求直達(dá)Windows Registry。如果嘗試修改該值,則操作系統(tǒng)防護(hù)將允許修改僅對它自己發(fā)生。當(dāng)下一次應(yīng)用程序訪問該鍵時,它將被呈示于操作系統(tǒng)防護(hù)中,且該請求將不流到真實(shí)的Registry,從而保持其不被改變。
操作系統(tǒng)防護(hù)使用的鍵在三個分開的部分中指定。這些操作系統(tǒng)防護(hù)鍵在這些部分中被指定為修改現(xiàn)有鍵、刪除鍵的呈示、或向注冊表添加新鍵的命令。以此方式,虛擬注冊表可恰如系統(tǒng)意圖地顯現(xiàn)。這是重要的,因?yàn)殒I的呈現(xiàn)與否可與鍵實(shí)際值一樣重要。
在實(shí)施例中,操作系統(tǒng)防護(hù)首先加載包含用于應(yīng)用程序的基本注冊表?xiàng)l目的數(shù)據(jù)文件。然后加載包含用戶偏好的第二數(shù)據(jù)文件。最后,操作系統(tǒng)防護(hù)可任選地加載包括不允許用戶覆蓋的策略項(xiàng)的一組鍵。這三個文件逐層向上加載,每一文件中的重復(fù)項(xiàng)覆蓋其之前文件中的各項(xiàng)。用戶首次運(yùn)行應(yīng)用程序時,將不存在第二數(shù)據(jù)文件,因?yàn)椴淮嬖谌魏斡脩魧S眯畔?,僅有應(yīng)用程序默認(rèn)信息。然而,在每一會話之后,操作系統(tǒng)防護(hù)將保存用戶的改變,生成供將來會話中使用的第二數(shù)據(jù)文件。
可按照兩種方式修改配置文件。首先,可由應(yīng)用程序直接編輯該文件。在此情形中,后文中所述的操作系統(tǒng)防護(hù)文件子系統(tǒng)將解決對文件進(jìn)行的修改。其次,在較佳實(shí)施例中,應(yīng)用程序可調(diào)用Windows API調(diào)用族即GetProfileString、WriteProfileString等來修改這些文件。在這種情況下,本發(fā)明的實(shí)施例的操作系統(tǒng)防護(hù)恰如上述地截取這些調(diào)用并從內(nèi)部服務(wù)它們。
共享對象由操作系統(tǒng)和運(yùn)行的應(yīng)用程序使用的眾多組件跨若干應(yīng)用程序或?qū)嵗蚕?。一般,這是個非常好的想法。它節(jié)省磁盤空間,不要求同一文件的眾多副本。它也給操作系統(tǒng)廠商和第三方提供創(chuàng)建并分發(fā)常用代碼庫的能力。在Windows平臺上,動態(tài)鏈接庫即DLL通常在應(yīng)用程序內(nèi)或跨應(yīng)用程序共享。在其它平臺上,也有同樣問題。在Macintosh、INIT及其它系統(tǒng)上,為各應(yīng)用程序加載組件。這些組件可具有多個版本,一次僅使用其中一個版本。在UNIX系統(tǒng)上,例如“.so”庫文件等動態(tài)共享對象由應(yīng)用程序使用來加快加載時間、節(jié)省磁盤空間及其它。眾多程序使用默認(rèn)的“l(fā)ibc.so”。然而,這種庫文件一般是對諸如libc.so.3等其自己的某個版本的符號鏈接。實(shí)際上,這種特征造成了嚴(yán)重的破壞。這些共享的組件常常經(jīng)歷修訂,同一組件的眾多版本可用于安裝。應(yīng)用程序創(chuàng)作者發(fā)現(xiàn)他們的軟件僅可能與共享的組件的各種版本中的一個或一些一起工作。因此,實(shí)際上,應(yīng)用程序一般安裝它們所需的版本,而蓋寫其它存在的版本。這可能造成運(yùn)行在系統(tǒng)上的其它應(yīng)用程序發(fā)生故障。
在Windows 98、Windows 2000上,Microsoft創(chuàng)建了Windows受保護(hù)文件系統(tǒng)(WPFS)來允許系統(tǒng)管理員在應(yīng)用程序的基目錄中創(chuàng)建名為XXXX.LOCAL的文件,其中XXXX是不帶擴(kuò)展名的可執(zhí)行文件名。這使得Windows加載器在LoadLibrary執(zhí)行期間更改其解析路徑引用的方法。然而,這對于完全解決問題是不夠的。首先,設(shè)置XXXX文件取決于系統(tǒng)管理員的知識,而這有很大差異。其次,組件版本必須經(jīng)歷倒轉(zhuǎn)回至原始版本,然后將該組件安裝在本地目錄中,然后創(chuàng)建“.LOCAL”文件。這對除了置于WINDOW\SYSTEM中的最基本組件以外的任何組件而言,都不是直接了當(dāng)?shù)倪^程。而且,這種解決方案不能覆蓋所有所需的功能。在LoadLibrary期間,取決于組件是作為顯式還是隱式的LoadLibrary的結(jié)果被解析,以及是否存在指示它是命名還是公知的DLL的Registry Key,Windows使用不同路徑解析語義。在這種情況中,LoadLibrary調(diào)用將總是解析到WINDOWS\SYSTEM目錄。
DLL及其它共享組件也保持引用計(jì)數(shù)語義以確保除非沒有被運(yùn)行的應(yīng)用程序引用,否則組件將不被改變。實(shí)際上,僅來自操作系統(tǒng)廠商的應(yīng)用程序及操作系統(tǒng)本身良好地服從該協(xié)議。
作為一般規(guī)則,期望共享對象總是解析到正確的組件。為了提供這種功能,需要理解應(yīng)用程序能夠與之一起工作的組件的版本或版本的范圍。然后,當(dāng)應(yīng)用程序要運(yùn)行時,本發(fā)明應(yīng)確保組件被正確解析。在本發(fā)明中,如有需要,使WPFS或其它操作系統(tǒng)提供的能力的使用自動化是可接受的。在這種情況下,必須檢測所需組件并將它們置于本地文件系統(tǒng)中。這比僅監(jiān)視安裝更為復(fù)雜,因?yàn)槿绻璧慕M件已經(jīng)存在,安裝程序通常將不安裝它。
期望找出確保命名對象也被正確加載的方法。在Windows平臺上,MSVCRT.DLL是該問題領(lǐng)域內(nèi)的重要的故障原因。如果維護(hù)該對象的多個版本,則前述Registry鍵可被動態(tài)改變,以允許LoadLibrary函數(shù)解析正確的組件版本。確保正確組件加載的另一合理方法是動態(tài)編輯進(jìn)程環(huán)境以使用有效搜索路徑。該搜索路徑將確保本地組件在系統(tǒng)范圍組件之前被解析。正確共享對象的解析的另一可能方法是通過使用符號鏈接。可對共享組件進(jìn)行符號鏈接,它在運(yùn)行時由計(jì)算機(jī)的文件系統(tǒng)解析至所需組件。最后,對來自共享對象文件的信息的實(shí)際的打開/讀/關(guān)閉請求可由本發(fā)明截取,并針對可能存在于本地系統(tǒng)上或本發(fā)明的子系統(tǒng)內(nèi)的文件的正確版本進(jìn)行動態(tài)響應(yīng)。
存在若干特殊形式。在Windows平臺上,OLE、ODBC、MDAC……以及多個其它廠商專用組件被寫成將在若干或所有運(yùn)行的進(jìn)程之中全局共享。在OLE的情況中,甚至在單獨(dú)進(jìn)程之間共享數(shù)據(jù)和存儲器空間。與這些組件中的多個一樣,OLE防止一次運(yùn)行其自身一個以上的副本。OLE也有需要為特定應(yīng)用程序加載特定版本的眾多隱錯和特征。在本發(fā)明中,應(yīng)用程序能夠加載OLE所需的任何版本,仍舊允許與使用OLE的同一版本的其它組件共享的語義。
一般,共享對象應(yīng)被私有加載以確保防止沖突,除非是被特別配置成這樣。用于允許私有加載組件的方法決不應(yīng)阻止它被干凈地卸載或?yàn)榱硪卉浖?yīng)用程序正確加載,而無論該軟件應(yīng)用程序是否由操作系統(tǒng)防護(hù)積極管理與否。此外,如果系統(tǒng)崩潰,則要求從該崩潰恢復(fù)到干凈的狀態(tài),而不曾蓋寫或修改底層操作系統(tǒng)。
文件眾多應(yīng)用程序使用應(yīng)用程序內(nèi)的數(shù)據(jù)文件來存儲配置條目或其它應(yīng)用程序數(shù)據(jù)。本發(fā)明的實(shí)施例提供非常類似此前所述的虛擬注冊表的虛擬文件系統(tǒng)。在應(yīng)用程序啟動之前,本發(fā)明的實(shí)施例可加載文件系統(tǒng)改變的列表,包括要隱藏的文件和要添加到虛擬環(huán)境的文件或要重定向至虛擬環(huán)境內(nèi)的另一文件的文件。無論何時應(yīng)用程序訪問或修改任何文件,操作系統(tǒng)防護(hù)均檢查該文件是否必須被重定向,且如果是,則在較佳實(shí)施例中,將請求重定向至操作系統(tǒng)防護(hù)配置中所指定的位置。
如果應(yīng)用程序試圖創(chuàng)建新文件或打開現(xiàn)有文件以寫在用戶的本地驅(qū)動器上,則操作系統(tǒng)防護(hù)必須確保該文件在重定向的位置中被實(shí)際創(chuàng)建或修改。如果應(yīng)用程序在稍后被重新加載,則該文件映射必須被重新加載到操作系統(tǒng)防護(hù)虛擬環(huán)境中。當(dāng)請求是修改駐留在用戶的本地驅(qū)動器上的現(xiàn)有文件時,操作系統(tǒng)防護(hù)必須在繼續(xù)該請求之前將所述文件復(fù)制到重定向點(diǎn)。被重定向的文件可以與原始文件不同名以確保文件路徑的安全映射。在實(shí)施例中,以此方式處理INI文件以便在允許最大應(yīng)用程序兼容性的同時提供最大系統(tǒng)安全性。
本發(fā)明的實(shí)施例對于通過網(wǎng)絡(luò)交付的應(yīng)用程序特別有用。在這樣的實(shí)現(xiàn)中,重要的是理解軟件應(yīng)用程序是由若干種數(shù)據(jù)構(gòu)成,其中軟件應(yīng)用程序所使用的大多數(shù)文件最好被安裝在單獨(dú)的邏輯驅(qū)動器上。包括基于文件和基于注冊表的配置,可以是用戶專用或系統(tǒng)范圍的。所使用的應(yīng)用程序交付系統(tǒng)應(yīng)對每一文件標(biāo)記它是這些類型中的哪個類型的。該信息向操作系統(tǒng)防護(hù)系統(tǒng)提供提示以便正確操作。
設(shè)備驅(qū)動程序眾多應(yīng)用程序使用設(shè)備驅(qū)動程序或其它操作系統(tǒng)級軟件以實(shí)現(xiàn)其諸如硬件支持或直接與操作系統(tǒng)低級交互的功能中的某些。在本發(fā)明的實(shí)施例中,操作系統(tǒng)防護(hù)提供動態(tài)地以及盡可能私有地將這些組件添加到應(yīng)用程序的虛擬環(huán)境或從中移除的能力。
眾多設(shè)備驅(qū)動程序被構(gòu)建成可動態(tài)加載。只要有可能,較佳實(shí)施例是動態(tài)加載所有設(shè)備驅(qū)動程序。如果設(shè)備驅(qū)動程序要求在引導(dǎo)時靜態(tài)加載,則必須在運(yùn)行應(yīng)用程序之前向用戶提供該知識。一旦系統(tǒng)被重新引導(dǎo)之后,應(yīng)用程序應(yīng)從它停止的位置繼續(xù)。然而,很大比例的設(shè)備驅(qū)動程序不是動態(tài)可卸載的。盡管動態(tài)卸載驅(qū)動程序是較佳的,但如果這不能實(shí)現(xiàn),則將標(biāo)記該驅(qū)動程序以便在下一次重新引導(dǎo)時移除,且應(yīng)使用戶知曉此情況。如果在下一次重新引導(dǎo)之前該應(yīng)用程序被第二次運(yùn)行,則系統(tǒng)仍應(yīng)知曉該驅(qū)動程序的存在,而不試圖第二次安裝,等待終止以將該組件重新標(biāo)記為可在下一次重新引導(dǎo)時移除。
因?yàn)閷γ恳辉O(shè)備驅(qū)動程序類均存在基本的相似與區(qū)別,所以表征這些基本相似與區(qū)別以確保本發(fā)明的實(shí)施例可正確作用是很重要的。不希望加載和卸載經(jīng)常存在的系統(tǒng)硬件的設(shè)備驅(qū)動程序。應(yīng)理解,盡管在程序設(shè)計(jì)簡易性意義上而言,這不是較佳實(shí)施例,但它處于本發(fā)明的范圍內(nèi),且可能由于諸如使用本發(fā)明的實(shí)施例交付和運(yùn)行的應(yīng)用程序的發(fā)證協(xié)定時的限制等特定原因而被要求。
在非Microsoft平臺上,一般區(qū)別非常大地處理各種設(shè)備驅(qū)動程序。Macintosh系統(tǒng)支持靜態(tài)和動態(tài)驅(qū)動程序兩者,而它們均經(jīng)由相同方法安裝或移除。與Macintosh系統(tǒng)文件夾鏈接將提供必要的支持。對UNIX系統(tǒng),設(shè)備驅(qū)動程序一般需要對運(yùn)行的UNIX內(nèi)核的修改,繼之以重新引導(dǎo)。該過程可能非常復(fù)雜。在實(shí)施例中,該過程被自動化;包括一旦應(yīng)用程序完成之后即重新設(shè)置內(nèi)核。該過程的一般參數(shù)與上述的Windows應(yīng)用程序過程參數(shù)相同,編譯的實(shí)際處理步驟和熟悉這樣的操作系統(tǒng)的個人可執(zhí)行重新引導(dǎo)。
最后,本領(lǐng)域的技術(shù)人員將理解期望能夠跨越系統(tǒng)故障恢復(fù)和移除驅(qū)動程序。因此,維持系統(tǒng)完整性所需的任何數(shù)據(jù)或過程被包括在本發(fā)明的實(shí)施例中。本領(lǐng)域中的技術(shù)人員也可理解,不是所有類型的設(shè)備驅(qū)動程序均可經(jīng)由本發(fā)明的實(shí)施例方便或高效設(shè)置的,尤其是與附連持久硬件的設(shè)備相關(guān)聯(lián)的那些。
其它項(xiàng)在本發(fā)明的實(shí)施例中,認(rèn)識到存在若干組件,其行為或存在性在替換操作系統(tǒng)上是不同的。這些組件包括字體、進(jìn)程、環(huán)境變量等。
某些應(yīng)用程序需要安裝字體以便正確執(zhí)行。所需的任何字體將在操作系統(tǒng)防護(hù)的配置文件中指定。操作系統(tǒng)防護(hù)將在運(yùn)行應(yīng)用程序之前啟用這些字體,且如有需要,則在運(yùn)行之后移除它們。大多數(shù)系統(tǒng)除用于注冊字體或使系統(tǒng)知曉它們的存在的過程以外還具有用于存儲字體的公共區(qū),操作系統(tǒng)防護(hù)將利用這些可用方法。
在Windows上,字體被復(fù)制到\WINDOWS\FONTS目錄。然而,這不保證字體可供運(yùn)行的程序使用。在較佳實(shí)施例中,如果程序使用Windows API來訪問字體,則字體將需要以諸如CreateScalableFontResource/AddFontResource的Win32API調(diào)用注冊。這將字體插入系統(tǒng)字體表內(nèi)。一旦完成之后,操作系統(tǒng)防護(hù)可使用如RemoveFontResource的另一合適的API調(diào)用移除字體,然后將文件從系統(tǒng)中移除。作為另一實(shí)施例,操作系統(tǒng)防護(hù)可如虛擬注冊表方法中所述地掛鉤API函數(shù)。此外,操作系統(tǒng)防護(hù)可使用其文件子系統(tǒng)來避免將實(shí)際字體文件置于運(yùn)行的程序中。
在Macintosh上,該過程極其類似,且基于Macintosh系統(tǒng)文件夾中的文件和注冊激活。然而,在UNIX上,該過程取決于應(yīng)用程序。一般,字體資源作為解析在正確位置中的常規(guī)文件被添加到系統(tǒng),因此它們可按名訪問。在眾多Motif系統(tǒng)中,需要將字體描述置于字體資源文件內(nèi),這將允許字體被解析。Motif或X應(yīng)用程序可經(jīng)由解析子系統(tǒng)或經(jīng)由直接調(diào)用來調(diào)用字體。近來,眾多基于Motif和CDE的系統(tǒng)利用Adobe可縮放附錄字體。這些字體需要經(jīng)由Adobe型管理系統(tǒng)管理。然而,存在例外,且如上所述,存在Windows或其它操作系統(tǒng)默認(rèn)字體管理系統(tǒng)的替換。Adobe型管理器提供該過程的一些替換接口,其它第三方型管理系統(tǒng)也一樣。在大多數(shù)情況中,應(yīng)決定是支持該接口還是忽視它。操作系統(tǒng)防護(hù)的目的不在于為所有這些系統(tǒng)提供統(tǒng)一層,而是僅為操作系統(tǒng)自己的子系統(tǒng)這樣做。
眾多應(yīng)用程序需要設(shè)置環(huán)境變量。這在UNIX系統(tǒng)上最常見,也由最初寫在UNIX上并被移植到Windows操作系統(tǒng)的軟件大量使用。Windows操作系統(tǒng)上的應(yīng)用程序非常依賴于DOS PATH環(huán)境變量,且通常設(shè)置它們自己的應(yīng)用程序?qū)S脳l目。在Windows 9x/Me環(huán)境上,存在眾多環(huán)境設(shè)置,由于其核心是DOS子系統(tǒng),因此這些設(shè)置可應(yīng)用。如果應(yīng)用程序要求特定變量的存在、或在現(xiàn)有環(huán)境變量中設(shè)置值,則所需環(huán)境變量將在操作系統(tǒng)防護(hù)的配置文件中指定。操作系統(tǒng)防護(hù)將在應(yīng)用程序的主進(jìn)程運(yùn)行時為其設(shè)置這些變量。由于當(dāng)應(yīng)用程序操作時一般不改變環(huán)境設(shè)置,因此虛擬環(huán)境將不捕捉這些調(diào)用,也不象注冊表和配置子系統(tǒng)那樣提供功能的全部補(bǔ)充。
恢復(fù)在前述部分中所示的某些情況中,必須對操作系統(tǒng)進(jìn)行實(shí)際修改。這對設(shè)備驅(qū)動程序和字體而言是頻繁的。此外,可對需要被持久化并在應(yīng)用程序下一次運(yùn)行時可用的虛擬環(huán)境進(jìn)行改變。要求操作系統(tǒng)防護(hù)系統(tǒng)能夠從對系統(tǒng)的改變恢復(fù),在其最早可能有機(jī)會時從系統(tǒng)移除該改變?;蛘?,如果系統(tǒng)在應(yīng)用程序執(zhí)行期間崩潰,則操作系統(tǒng)防護(hù)應(yīng)跟蹤足夠的信息以在系統(tǒng)被重新引導(dǎo)等時移除對系統(tǒng)的任何改變,且應(yīng)跟蹤對虛擬環(huán)境進(jìn)行的改變。在較佳實(shí)施例中,這被實(shí)現(xiàn)為事務(wù)日志,但在其它實(shí)施例中,可實(shí)現(xiàn)為可在系統(tǒng)啟動時讀取因此可回退改變的某個其它類似組件。
控制虛擬化本發(fā)明的一重要方面涉及對操作系統(tǒng)防護(hù)能夠進(jìn)行的虛擬化的眾多方面的控制。在較佳實(shí)施例中,存在能夠確定要軟件系統(tǒng)中要控制的正確方面的探測程序(instrument program)。還包括允許管理員和最終用戶察看和修改要由系統(tǒng)虛擬化的那些項(xiàng)的方法。
在自動化的程序中,觀察要控制的應(yīng)用程序以便估計(jì)控制的各方面。自動化的程序能夠在應(yīng)用程序的安裝進(jìn)程期間、應(yīng)用程序的運(yùn)行時期間或其組合時執(zhí)行該任務(wù)。在較佳實(shí)施例中,操作系統(tǒng)防護(hù)被嵌入包封器應(yīng)用程序中。在安裝之后,或當(dāng)一次或多次使用軟件之后,包封器應(yīng)用程序?qū)⑾虿僮飨到y(tǒng)防護(hù)查詢其所有動作的詳細(xì)列表。從這張動作列表中,包封器應(yīng)用程序?qū)?chuàng)建之后使用時加載和運(yùn)作操作系統(tǒng)防護(hù)所需的配置文件。
如果被用作安裝進(jìn)程的一部分,則在實(shí)施例中,操作系統(tǒng)防護(hù)將起到僅允許安裝進(jìn)入其環(huán)境的虛擬層的作用。當(dāng)安裝之后,所有文件、設(shè)定等可被轉(zhuǎn)儲以便稍后重新加載。以此方式,安裝將保持原始系統(tǒng)不變,且將自動創(chuàng)建必要的配置文件。當(dāng)在應(yīng)用程序使用期間使用時,操作系統(tǒng)防護(hù)能夠記錄對環(huán)境的差別性修改或重新編纂配置文件。
操作系統(tǒng)防護(hù)將其信息傳給包封器應(yīng)用程序以便進(jìn)行后處理。在較佳實(shí)施例中,除系統(tǒng)可創(chuàng)建的自動條目之外,還以操作系統(tǒng)專用和應(yīng)用程序或域?qū)S弥R對包封器應(yīng)用程序編程。這種知識用于更改進(jìn)程的輸出以便反映配置項(xiàng)或其它條目的已知使用。在較佳實(shí)施例中,采用基于規(guī)則的系統(tǒng)來將觀察到的行為與已知情形進(jìn)行比較以便實(shí)現(xiàn)對編碼的改變。
包封器應(yīng)用程序也用作進(jìn)程的配置輸出的觀察器和/或編輯器。在較佳實(shí)施例中,這種編輯器允許系統(tǒng)管理員添加、編輯或從配置中刪除一個或一組項(xiàng)。當(dāng)經(jīng)由編輯器觀察配置時,管理員也可復(fù)制配置、按需改變特定項(xiàng)以實(shí)現(xiàn)應(yīng)用程序級或用戶定制的改變。
現(xiàn)在參考圖1,按功能示出本發(fā)明的實(shí)施例。在此實(shí)施例中,示出了兩組應(yīng)用程序/用戶數(shù)據(jù)60。操作系統(tǒng)防護(hù)100阻止應(yīng)用程序50的兩個實(shí)例彼此干擾。此外,如上所述,操作系統(tǒng)防護(hù)100用作抽象層,并因此收集應(yīng)用程序軟件50與客戶計(jì)算機(jī)的實(shí)際操作系統(tǒng)10之間的命令和通信。如由箭頭圖形示出,某些命令位于操作系統(tǒng)防護(hù)與軟件應(yīng)用程序之間,這與典型安裝不同,在后者中這些命令相反可由操作系統(tǒng)本身操作,導(dǎo)致可能不必定是操作員預(yù)期的對客戶計(jì)算機(jī)的改變。另一方面,其它命令通過操作系統(tǒng)防護(hù),然后被傳遞給操作系統(tǒng)本身。
眾多軟件應(yīng)用程序被設(shè)計(jì)成結(jié)合另外一個或多個應(yīng)用程序操作。這可以是諸如Microsoft Office等軟件的情況,其中一組應(yīng)用程序作為單一的單元被打包并出售,且通常被創(chuàng)建成一起工作。這也可由被設(shè)計(jì)成“插入”另一應(yīng)用程序或以某種方式與之通信的眾多軟件應(yīng)用程序證實(shí)。
盡管這是常見的功能,但眾多軟件分發(fā)系統(tǒng)難以使這些相互關(guān)系充分工作。這可能是由于在應(yīng)用程序打包期間、將應(yīng)用程序集成到最終用戶環(huán)境期間、或運(yùn)行時中對相互依存性的不正確解析引起的。
現(xiàn)今存在眾多形式的軟件分發(fā),包括打包軟件分發(fā)、電子軟件分發(fā)(ESD)、軟件點(diǎn)播分發(fā)以及諸如Microsoft公司提供的ClickOnce系統(tǒng)等若干下一代分發(fā)系統(tǒng)。這些分發(fā)系統(tǒng)中的每一個展示了涉及軟件被如何分發(fā)、如何安裝和移除以及如何主機(jī)與操作環(huán)境和其它應(yīng)用程序兩者交互的若干基本模式。
軟件分發(fā)盡管軟件仍可由諸如CD-ROM或軟盤的物理介質(zhì)提供,但對大多數(shù)形式的軟件,電子分發(fā)手段成為普遍。存在眾多形式的ESD系統(tǒng),諸如由諸如Microsoft、Marimba、Altiris等廠商提供的設(shè)計(jì)成供公司使用的那些系統(tǒng),以及諸如DigitalRiver等提供的設(shè)計(jì)成供因特網(wǎng)或公共訪問網(wǎng)絡(luò)使用的那些系統(tǒng)。ESD系統(tǒng)以可按照某種完全或相對自動化的方式被下載并安裝的安裝包的形式向最終用戶或公司提供應(yīng)用程序軟件。當(dāng)使用該軟件時,這通常引起諸如沖突的依存性或其它誤配置的安裝問題。
其它軟件廠商開發(fā)了用于當(dāng)軟件被使用或“點(diǎn)播”時分發(fā)軟件的系統(tǒng)。在這些系統(tǒng)中,應(yīng)用程序包在按需基礎(chǔ)上被分發(fā)給需要使用該軟件的最終用戶系統(tǒng)。軟件然后可在運(yùn)行中安裝或從目標(biāo)系統(tǒng)中移除,或在某些情況下被“虛擬安裝”,借此當(dāng)軟件實(shí)際上未被安裝的情況下可如同它被安裝一般在最終用戶系統(tǒng)上執(zhí)行。虛擬安裝技術(shù)確保應(yīng)用程序如同它被安裝、但將應(yīng)用程序與操作環(huán)境和其它應(yīng)用程序隔離一般運(yùn)行。
已向市場推出若干其它技術(shù),諸如Microsoft的ClickOnce或Sun的JavaManagement Framework。在眾多這些系統(tǒng)中,通過防止軟件安裝修改其主機(jī)環(huán)境來從概念上消除安裝軟件的問題。這通過要求任何遵循的軟件從諸如配置文件等無害內(nèi)部源收集其所有配置,且不使用任何系統(tǒng)范圍注冊表或其它應(yīng)用程序配置實(shí)體來完成。軟件也被限制不得要求在主機(jī)操作系統(tǒng)內(nèi)設(shè)置或以任何方式修改其主機(jī)。
一般,軟件則可被視為經(jīng)由修改其主機(jī)配置、通過模擬修改但實(shí)際不執(zhí)行修改的虛擬安裝、或通過由創(chuàng)建自包含軟件來限制環(huán)境修改安裝在目標(biāo)操作環(huán)境中。在這些系統(tǒng)中,軟件的移除依賴于它被如何安裝。如果正常安裝,則它必須由逆過程或卸載程序回退。這些程序經(jīng)常失敗,并引起對主機(jī)環(huán)境的損害。對虛擬安裝系統(tǒng),軟件從未安裝,因此無需移除。對自包含環(huán)境,移除通過確保也可非侵入性進(jìn)行的簡單卸載過程被簡化。
集成問題在所有所述系統(tǒng)和用于軟件執(zhí)行的任何系統(tǒng)中,存在關(guān)于如何表征并推動一個或多個軟件應(yīng)用程序與其主機(jī)環(huán)境和/或要安裝或運(yùn)行在同一環(huán)境中的其它一個或多個應(yīng)用程序的可能的交互的問題。眾多應(yīng)用程序或者被設(shè)計(jì)成一起工作、相互通信,或者被設(shè)計(jì)成通過修改其主機(jī)環(huán)境來工作。存在眾多其它模式的應(yīng)用程序間關(guān)聯(lián),此處所述的這些僅用作要解決的問題的示例性情況,而該問題普遍存在于所有或大多數(shù)已知的模式中。
設(shè)計(jì)成彼此一起工作的應(yīng)用程序一般遵循若干模式之一。首先,眾多應(yīng)用程序是供其它應(yīng)用程序“插入”的主機(jī)。對此的一示例是Adobe Photoshop或AutodeskAutoCAD,它們?yōu)榈谌杰浖S商提供創(chuàng)建其主應(yīng)用程序的擴(kuò)展的能力。當(dāng)存在這種插件時,Photoshop用戶界面將對最終用戶顯現(xiàn)不同外觀,包含由插件提供的新功能。不存在對最終用戶可視改變的要求。這僅是常見插件的一種操作模式。
或者,某些程序可通過利用未公開的(undocumented)程序接口或修改其運(yùn)行時行為——盡管原始廠商不旨在如此——來模擬“插件插入”的外觀。存在提供其它軟件程序的包封器的若干程序,諸如將程序及其用戶界面嵌入另一程序內(nèi)。當(dāng)選擇包封器內(nèi)的某些功能時,主機(jī)可驅(qū)動該另一應(yīng)用程序來執(zhí)行某些工作。這也可以是松散集成,諸如通過創(chuàng)建不主宿其它軟件應(yīng)用程序僅當(dāng)用戶請求時啟動該應(yīng)用程序的“運(yùn)行器”程序。
若干應(yīng)用程序使用其它應(yīng)用程序來執(zhí)行其部分工作。諸如PDA應(yīng)用程序的軟件使用諸如Microsoft Outlook的聯(lián)系人管理器作為其用于同步化聯(lián)系人信息的數(shù)據(jù)倉庫。Outlook未被裝運(yùn)成PDA應(yīng)用程序的一部分,但該軟件可與之通信以執(zhí)行其同步化任務(wù)。眾多程序利用Microsoft Word來執(zhí)行Mail Merge(郵件合并)功能。
程序也可經(jīng)由標(biāo)準(zhǔn)或?qū)S檬侄蝸肀舜送ㄐ乓詧?zhí)行工作。這可以是諸如經(jīng)由COM/DCOM、MTS、CORBA、SOAP或其它手段進(jìn)行的遠(yuǎn)程過程調(diào)用(RPC)等。這可以是原始TCP/IP通信會話、或甚至諸如HTTP請求等。此處的主要問題在于相互通信的可用性可能會改變主應(yīng)用程序行為的方式。作為示例,包轉(zhuǎn)儲器或通信故障查找程序通常能夠查看并格式化眾多不同的通信協(xié)議。然而,如果未處在使用CORBA的環(huán)境中,則無需配置該協(xié)議。這種配置可通過檢測其主機(jī)或附近主機(jī)是否被配置使用該協(xié)議來完成。
程序也可經(jīng)由共享數(shù)據(jù)文件或公共數(shù)據(jù)庫來松散互操作。這可以是通過簡單的文件共享或通過諸如OLE或OpenDoc等復(fù)合文檔接口。在復(fù)合文檔情況中,特定的復(fù)合文檔將依賴于可主宿其內(nèi)部文檔結(jié)構(gòu)的各個片段的軟件應(yīng)用程序的存在和集成。在數(shù)據(jù)庫系統(tǒng)的情況中,耦合通常非常松散,但仍要求提供某些配置以造成集成。
最后,當(dāng)存在不同配置的類似操作系統(tǒng)時眾多程序可不同操作,或可具有配置特定主機(jī)操作環(huán)境或其它軟件應(yīng)用程序的目的。一簡單的示例程序是TweakUI,用于改變Microsoft Windows桌面環(huán)境和該操作系統(tǒng)的眾多其它方面的配置的程序。
在上述所有情況中,軟件應(yīng)用程序或者假定在其世界觀中獨(dú)自存在,或者當(dāng)存在其它應(yīng)用程序或主機(jī)環(huán)境時有意不同地工作。這可給所述軟件分發(fā)系統(tǒng)帶來一問題。通常,在分發(fā)或安裝時不是所有可能的關(guān)聯(lián)均已知。因此,分發(fā)系統(tǒng)必須提供適應(yīng)改變的手段。
一旦為分發(fā)配置了應(yīng)用程序之后,如果環(huán)境改變,則應(yīng)用程序常常必須被重新配置。此外,在配置期間,其所有關(guān)聯(lián)必須已知,否則它可能不能被正確配置。在虛擬安裝環(huán)境的情況中,默認(rèn)行為是有意地分離任何程序連接。因此,必須提供克服這種限制的手段?;蛘咴谧园h(huán)境的情況中,必須找到不違反容器范例的合理關(guān)聯(lián)手段。
可視性/可發(fā)現(xiàn)性為了使兩個應(yīng)用程序能互操作,它們必須在某刻彼此可見。這或者可經(jīng)由在安裝或運(yùn)行時的發(fā)現(xiàn)手段,或可通過在這些時候一個程序的可為另一程序所見的某種表現(xiàn)或界面來實(shí)現(xiàn)。
可視性問題可能相當(dāng)復(fù)雜,因?yàn)槌绦蛲ǔJ褂梅谴_定性或未公開的手段來找到彼此。例如可通過尋找將要與之集成的應(yīng)用程序的存在性來確定存在與否。這可通過搜索其一個或多個可執(zhí)行組件、在諸如Windows Registry等公共注冊表內(nèi)搜索其配置、搜索應(yīng)用程序在諸如執(zhí)行快捷方式等某些公共位置內(nèi)的軌跡或其在UNIX/var/opt或/etc文件系統(tǒng)位置中的配置、在公共位置處搜索其一個或多個接口、向其主機(jī)操作環(huán)境查詢其存在性或眾多替換方法之一來完成。
對諸如虛擬安裝技術(shù)的系統(tǒng),即使程序被配置成在目標(biāo)主機(jī)上執(zhí)行,經(jīng)由這些搜索手段進(jìn)行的發(fā)現(xiàn)也可能失敗。使用虛擬安裝技術(shù),在主機(jī)環(huán)境上不存在程序的軌跡。其可用性的僅有知識存在于被配置成將應(yīng)用程序交付給主機(jī)的服務(wù)器處。而且,某些虛擬安裝系統(tǒng)向如桌面系統(tǒng)等提供主機(jī)集成,因此使得僅此一種形式的發(fā)現(xiàn)可行,即使應(yīng)用程序未被配置成以此方式進(jìn)行其發(fā)現(xiàn)。虛擬安裝的軟件組件默認(rèn)地對除實(shí)際軟件自身以外的任何一方均不可見。因此,要進(jìn)行發(fā)現(xiàn),必須提供推動的替換手段。
在自包含環(huán)境的情況中,軟件組件在主機(jī)環(huán)境內(nèi)的實(shí)際表現(xiàn)可能有顯著變化。例如Microsoft ClickOnce技術(shù)可將軟件應(yīng)用程序的可執(zhí)行組件置于主機(jī)環(huán)境內(nèi)向系統(tǒng)的其余部分隱藏或可在其存在過程上改變的一位置處。
也可經(jīng)由軟件的集中或分散的倉庫來進(jìn)行發(fā)現(xiàn)。諸如UDDI或JNDI的系統(tǒng)提供在接口層發(fā)現(xiàn)軟件應(yīng)用程序的手段。在UDDI內(nèi)存在記錄隱含軟件在預(yù)定義或動態(tài)端點(diǎn)的可用性。在虛擬安裝技術(shù)中,該端點(diǎn)??蓛H存在于虛擬安裝環(huán)境內(nèi),使得該環(huán)境內(nèi)的UDDI查詢可解析應(yīng)用程序的存在,而在該環(huán)境外部它將不會這樣做?;蛘撸琔DDI或JNDI查詢將解析至僅是虛擬應(yīng)用程序的代理的動態(tài)端點(diǎn)。
發(fā)現(xiàn)的問題由安裝時和安裝后的改變進(jìn)一步復(fù)雜化。如果一個應(yīng)用程序被安裝在機(jī)器上,且它可與另一應(yīng)用程序集成,但第二應(yīng)用程序未被安裝,則該應(yīng)用程序不可配置自己來互操作。如果隨后安裝了第二應(yīng)用程序,則通常用于配置互操作的邏輯僅在第一軟件應(yīng)用程序的安裝時進(jìn)行。因此,第一應(yīng)用程序必須被重新安裝以提供集成。
而且,如果應(yīng)用程序被配置成與第二應(yīng)用程序集成,且第二應(yīng)用程序被移除,則第一應(yīng)用程序必須能夠進(jìn)行重新配置或者處理移除過程。如實(shí)際可見,往往不是這樣。第二應(yīng)用程序的移除可能引起第一應(yīng)用程序失敗或者行為不良。
應(yīng)用程序的存在性也可在運(yùn)行時確定,且引起對應(yīng)用程序的行為改變。軟件應(yīng)用程序可通過嘗試在已知接口處與另一程序?qū)υ?、尋找其在主機(jī)上運(yùn)行的進(jìn)程、查找其一個或多個應(yīng)用程序窗口、或使用諸如MTS、CORBA或DCOM的代理服務(wù)來檢測另一程序。
相互通信一旦應(yīng)用程序被配置成互操作,則它們必須仍具有相互通信的手段。在正常的單用戶執(zhí)行環(huán)境中,這很少是問題,除非在主機(jī)配置中改變了什么引起執(zhí)行失敗。然而,在虛擬安裝環(huán)境、多系統(tǒng)環(huán)境中或在多用戶系統(tǒng)中,在沒有附加配置的情況下相互通信可能不能正確工作。
在操作系統(tǒng)防護(hù)的正常操作模式中,默認(rèn)通信端點(diǎn)被重定目標(biāo)以移除與某個現(xiàn)有端點(diǎn)之間的沖突的可能性。因此,當(dāng)一個應(yīng)用程序試圖與另一應(yīng)用程序通信時,即使兩個應(yīng)用程序均存在且被配置成彼此知曉,通信也將失敗。這是該系統(tǒng)對每一通信端點(diǎn)將被不同地重定目標(biāo)的保證的結(jié)果。因此,必須由操作系統(tǒng)防護(hù)提供一系統(tǒng)以協(xié)調(diào)重定目標(biāo)的過程以確保通信會話正確連接并操作。
對多用戶環(huán)境,問題類似。如果程序?qū)⒁赏恢鳈C(jī)上的一個以上用戶使用,則通信端點(diǎn)必須在每個用戶的基礎(chǔ)上可變,并對每一用戶重定相同的目標(biāo)。在Microsoft Terminal Services或Citrix MetaFrame中,諸如信號量和互斥體的通信端點(diǎn)已經(jīng)被重寫成一終端會話內(nèi)唯一,然而同一程序在單個會話中的多個實(shí)例仍可表現(xiàn)出這個問題。此外,諸如套接字、COM、命名管道等標(biāo)準(zhǔn)通信一貫對機(jī)器是全局的,且不能以任何方式改變,因此造成問題發(fā)生。
操作系統(tǒng)集成大多數(shù)現(xiàn)代軟件以某種方式被設(shè)計(jì)成與其主機(jī)操作環(huán)境集成。桌面類軟件一般提供程序快捷方式或其它簡單的手段以訪問軟件產(chǎn)品。這些快捷方式允許操作系統(tǒng)顯示用于運(yùn)行產(chǎn)品的用戶界面。在大多數(shù)情況下,服務(wù)器類軟件提供用于管理和簡單啟動/關(guān)閉配置的界面。
在所有情況中,主機(jī)操作系統(tǒng)必須提供訪問所安裝的軟件的某種手段。最常見地,諸如Windows Shell或UNIX CDE或KDE的桌面外殼程序被用于提供軟件的公共觀感(look-and-feel)和集成點(diǎn)。軟件廠商負(fù)責(zé)以正確的手段安裝其軟件以與這些接觸點(diǎn)集成。這些界面中的某些如快捷方式一般簡單,其它的則較為復(fù)雜,諸如當(dāng)用戶在鼠標(biāo)上右擊時所使用的上下文菜單。
也存在允許使用公共命令或用戶界面來管理軟件和硬件的管理界面。如Microsoft Management Console或Microsoft Windows Installer或Linux rpm數(shù)據(jù)庫等提供查找操作系統(tǒng)內(nèi)管理信息的公共位置。
當(dāng)存在可被添加或移除、虛擬安裝或點(diǎn)播提供的軟件時,這些界面也必須是動態(tài)的或能夠被動態(tài)管理??墒共僮飨到y(tǒng)的操作行為反映其現(xiàn)用應(yīng)用程序的本質(zhì)。
版本控制由于存在軟件程序或其界面的一個以上的版本,進(jìn)一步加劇了集成和互操作的問題。如果兩個程序可通信,且程序之一具有多個版本,則必須要有了解要使用程序的哪個版本的手段。通常,僅有程序的一個版本可與調(diào)用程序正確操作。以這種方式,了解在兩個程序之間存在依存性。然而,如果程序的兩個版本均可正確工作,則依存性必須以指示版本獨(dú)立性的方式明確表示。
諸如Microsoft COM體系結(jié)構(gòu)的眾多系統(tǒng)提供版本化的接口以便程序相互通信。在這種系統(tǒng)中,向程序接口給定全局唯一的標(biāo)識符GUID以及一個或多個名字以便使用來標(biāo)識其自己。此外,可向程序給定獨(dú)立于版本的標(biāo)識符。該標(biāo)識符隱含程序可與之通信,而不考慮程序的版本。
實(shí)際上,當(dāng)實(shí)際上存在版本依存性時這些類型的標(biāo)識符經(jīng)常被誤用。大多數(shù)新程序員想當(dāng)然地認(rèn)為如果他們使用獨(dú)立于版本的標(biāo)識符,則它將總是解析至他們想要查找的目標(biāo)。這令已經(jīng)構(gòu)建的程序必須總是與依存的軟件的最近版本正確工作。如果依存的軟件改變了,且即使存在獨(dú)立于版本的接口也不再兼容,則問題仍將發(fā)生。這將留待軟件分發(fā)系統(tǒng)來解決這些錯誤,而這往往不能被解決。
或者,眾多程序不具有依存于或獨(dú)立于版本的接口,但仍具有僅可通過測試或常規(guī)實(shí)踐理解的版本依存性。驅(qū)動另一程序的用戶界面的程序經(jīng)常期望其Windows控件位于特定的物理位置,或具有特定的類名。同一程序的另一版本可能不遵守這些期望。在這種情況下,驅(qū)動程序僅可正確使用該軟件的第一版本。
該問題的逆命題也存在。如果存在需要驅(qū)動另一程序或與之通信、且僅可使用諸如Windows類名的特定端點(diǎn)來這樣做的程序時,要驅(qū)動的軟件的兩個單獨(dú)的版本可能實(shí)際使用同一端點(diǎn)。在這種情況下,需要允許驅(qū)動程序連接至該軟件在期望端點(diǎn)處的正確版本,但仍便于軟件使用同一端點(diǎn)的另一版本的操作。
命名所述的問題的一個重要部分在于理解名字的基本問題。名字以多種形式出現(xiàn),且在不同情形或“上下文”中可以是眾多非常不同的事物。
在計(jì)算機(jī)系統(tǒng)中,命名對象幾乎可以是任何事物。文件具有名字“C:\Windows\notepad.exe”。注冊表鍵“HKLM\Software\Microsoft\Windows\CurrentVersion\Run”。命名管道\\PIPE\ExamplePipe。字體“Tahoma Bold”。HTTP通信的TCP端口80。數(shù)據(jù)庫中的表的名字USERS。甚至全局唯一標(biāo)識符GUID根本上也是某個對象的名字。在實(shí)際使用時,以使其名字顯著的方式命名眾多其它對象。新聞報(bào)道的標(biāo)題、新聞報(bào)道的作者或其出版商。
一旦對象被命名之后,存在隱含的理解,即可使用所提供的名字定位該對象。如果兩個對象具有相同的名字,則必須提供解析適當(dāng)?shù)哪繕?biāo)對象的進(jìn)程。如果單獨(dú)的應(yīng)用程序嘗試?yán)霉矊ο?,則正常地,該應(yīng)用程序?qū)⒔馕鲈搯蝹€對象。然而,如果一個應(yīng)用程序修改該對象,通常期望使得經(jīng)修改的對象不再由另一應(yīng)用程序使用。因此,每一應(yīng)用程序需要具有解析使用相同名字的不同對象的方發(fā),以及跟蹤改變的對象的手段。
而且,如果命名對象存在,且同一對象存在于虛擬安裝的應(yīng)用程序內(nèi),則虛擬應(yīng)用程序?qū)⑼ㄟ^解析其內(nèi)部對象來工作,但仍存在為位于虛擬環(huán)境外的程序定位虛擬對象的需求。
因此,在其中應(yīng)用程序和對象可具有可變生存周期、在其生存周期上有不同的意義以及潛在的沖突的網(wǎng)絡(luò)中,需要統(tǒng)一的解決方案來管理這些對象的交互。當(dāng)前技術(shù)的系統(tǒng),諸如JNDI或UDDI依賴于系統(tǒng)范圍的信息注冊表提供不反映這些特征的絕對信息。JNDI查詢能夠通過創(chuàng)建接合點(diǎn)來聯(lián)合不同的名字空間。然而,需要系統(tǒng)用戶單純靠不制造命名沖突來處理命名沖突。實(shí)際上,這是非常困難的,因?yàn)楸姸嘞到y(tǒng)必須具有對對象的公共但不同的定義以便執(zhí)行它們的工作。JNDI系統(tǒng)不提供折疊或合并名字空間的任何手段,也不提供版本控制或沖突管理的任何手段。
上下文當(dāng)在要處理的情景的上下文中提供適當(dāng)?shù)呐渲?、命名對象或接口的能力存在時,就可解決對上述問題的解決方案。此處所述的實(shí)施例示出a)自動理解軟件程序的相互依存性、b)創(chuàng)建程序可在其中共享和/或修改其主機(jī)操作環(huán)境的相似視圖的操作上下文、c)控制這些上下文的啟用或特性以及d)便于這些程序原本可能失敗的相互通信和互操作的系統(tǒng)。
這些實(shí)施例提供以受控的方式操作主機(jī)操作環(huán)境中的一個或多個程序并將多個系統(tǒng)的行為耦合在一起的方發(fā)。在圖5中所示的示例性系統(tǒng)150中,可存在一個或多個計(jì)算設(shè)備。這些設(shè)備可以是單用戶155或多用戶156設(shè)備,其中操作系統(tǒng)和一個或多個應(yīng)用程序?qū)?zhí)行。也可存在諸如像數(shù)據(jù)庫服務(wù)器、文件服務(wù)器或其它商務(wù)營運(yùn)(line-of-business)應(yīng)用程序服務(wù)器等服務(wù)器系統(tǒng)的基礎(chǔ)架構(gòu)服務(wù)158,以及用于管理網(wǎng)絡(luò)和系統(tǒng)的某些基礎(chǔ)架構(gòu)157。
當(dāng)軟件應(yīng)用程序在設(shè)備網(wǎng)絡(luò)內(nèi)執(zhí)行時,它將因此具有與若干級上的其它軟件交互的能力。在較佳實(shí)施例中,基本級包括全局、受管、本地系統(tǒng)、系統(tǒng)虛擬、廠商、用戶、會話、共享和隔離。這些級在圖6和7中示出。這些分組將被稱為上下文,對應(yīng)于應(yīng)用程序在其內(nèi)執(zhí)行以擴(kuò)充來允許基于策略的交叉環(huán)境交互的控制的運(yùn)行時環(huán)境。本領(lǐng)域中的技術(shù)人員可以認(rèn)識到,可簡單地創(chuàng)建其它上下文,此處所定義的那些旨在成為本發(fā)明的應(yīng)用的示例。
全局上下文201是圖5中所示的實(shí)施例中整個系統(tǒng)的視圖。存在于全局上下文內(nèi)的對象或名字如安全性策略允許可由所有用戶和所有軟件程序看見并共享。在替換實(shí)施例中,全局上下文可被更改成覆蓋了覆蓋公司的所有機(jī)器的公司上下文204、用于公司之間共享計(jì)算的聯(lián)合上下文206、以及覆蓋所有參與實(shí)體的全局201或分布上下文。
受管上下文207是某個管理范圍內(nèi)的機(jī)器、用戶、資源和/或應(yīng)用程序的集合的廣泛的視圖。該范圍可以是由諸如ESD解決方案或虛擬安裝系統(tǒng)214之一的分發(fā)系統(tǒng)管理的系統(tǒng)的集合。它可延伸跨越部門(division)內(nèi)公司邊界,或如果管理系統(tǒng)將由諸如ASP的服務(wù)供應(yīng)商202主宿,則該上下文可延伸跨越供應(yīng)商的顧客系統(tǒng)204、205。存在該上下文,使得實(shí)現(xiàn)本發(fā)明的方法的任何系統(tǒng)可與其它管理系統(tǒng)、及其自身的其它實(shí)例互操作。
本地系統(tǒng)上下文302提供特定機(jī)器301或虛擬機(jī)器(諸如VMWare分區(qū))內(nèi)的所有操作的視圖。這等效于Microsoft Terminal Service(終端服務(wù))的“全局”上下文。由Citrix和Microsoft提供的現(xiàn)有技術(shù)的系統(tǒng)試圖通過將機(jī)器細(xì)分成全局和會話專用名字空間來解決這些上下文問題中的某些。
系統(tǒng)虛擬上下文310允許諸如由虛擬安裝技術(shù)或操作系統(tǒng)防護(hù)交付的那些程序與本地操作系統(tǒng)共享操作和對象,使得它們均在同一名字空間內(nèi)操作。特定的系統(tǒng)虛擬上下文將一個或多個應(yīng)用程序與操作系統(tǒng)封裝在一起。不存在所有應(yīng)用程序以相同方式與OS共享的要求。
廠商上下文允許軟件廠商創(chuàng)建包括存在于機(jī)器內(nèi)但涉及使用其軟件或硬件的系統(tǒng)的所有操作的范圍。實(shí)施例中的一個示例是由系統(tǒng)管理的將與同一機(jī)器上的其它軟件共同存在的軟件。在廠商上下文內(nèi),軟件基于什么受管和什么不受管來分組。
用戶上下文211提供將操作分組成由用戶進(jìn)行的那些操作的能力。注意到,該上下文不限于存在于單個機(jī)器上。該上下文可延伸跨越正代表該用戶執(zhí)行操作的多個機(jī)器或會話。這種行為允許用戶與網(wǎng)絡(luò)中運(yùn)行的一個以上的會話在它們正執(zhí)行的應(yīng)用程序之間具有協(xié)調(diào)。
會話上下文212將操作限制于一個用戶在一個機(jī)器上的操作。這與TerminalService的本地用戶名字空間或其中登錄到機(jī)器內(nèi)的用戶將具有可標(biāo)識范圍的UNIX telnet/tty會話相關(guān)。
如圖7中所示,共享上下文312提供管理地定義的唯一的、依存于共享配置的范圍。該范圍允許兩個或多個程序共享配置和對象,或?yàn)楸舜丝梢姟T诒景l(fā)明的較佳實(shí)現(xiàn)內(nèi),存在多個共享的上下文。每一上下文包含一個名字以及定義共享行為的一組策略。以此方式,應(yīng)用程序的多個不同段可共享重疊行為。
如圖7中所示,隔離上下文311是虛擬安裝的應(yīng)用程序的默認(rèn)行為。在此范圍中,應(yīng)用程序與所有其它程序完全隔離,且在某種意義上不可見,所有正常接口和命名對象均不存在于該上下文外。
這些示例上下文示出本發(fā)明的實(shí)施例在設(shè)計(jì)上如何不需為明確分層的。盡管操作系統(tǒng)防護(hù)作為操作系統(tǒng)和單個應(yīng)用程序之間的以及多個應(yīng)用程序之間的一層,但不存在應(yīng)用程序或上下文應(yīng)階式分層限制。這種效果可容易地被實(shí)現(xiàn),但本發(fā)明的系統(tǒng)能夠不受網(wǎng)絡(luò)或系統(tǒng)體系結(jié)構(gòu)約束地將1到n個環(huán)境耦合在一起。這允許構(gòu)想各種上下文,諸如用戶上下文,它如指示可橫跨多個機(jī)器。
操作特征實(shí)施例中的系統(tǒng)被設(shè)計(jì)成截取程序與主機(jī)操作系統(tǒng)的、程序彼此的、并且在操作系統(tǒng)內(nèi)的正常通信的軟件層。在替換實(shí)施例中,系統(tǒng)被實(shí)現(xiàn)為用于編譯成特別啟用來利用該系統(tǒng)的功能的程序的代碼庫。每一單獨(dú)的應(yīng)用程序請求然后可在其具體操作上下文內(nèi)評估。該系統(tǒng)將查看所有類型的請求,諸如文件系統(tǒng)請求、注冊表請求、共享對象、字體、代碼庫等。這些請求一般是針對配置項(xiàng)、命名對象或通信接口,但不限于此,它們將被一律稱為資源。資源具有可變的生存周期且在超出其使用期限外可以持續(xù)或不持續(xù)。
在圖8中所示的系統(tǒng)中,示出利用彼此和操作系統(tǒng)的資源的兩個應(yīng)用程序。示出了三個不同的情形。一個是其中一程序即應(yīng)用程序A 402試圖使用被配置成僅供其自己使用的資源即資源集1 404。另一情形是應(yīng)用程序A 402試圖使用配置成供另一程序使用的資源,即被配置成供應(yīng)用程序B 403使用的資源集3 406。最后一個是其中這兩個程序均試圖訪問可被配置成供每一程序訪問的共享資源即資源集2 405。注意到,該視圖在功能上等效于美國專利申請09/859,209號“OperatingSystem Protection and Abstraction Layer(操作系統(tǒng)保護(hù)和抽象層)”中的示意圖,但它被示出以闡明過程。
該示意圖示出該系統(tǒng)的基本前提,借此一個或多個資源可被配置成屬應(yīng)用程序私有,或者這些資源可被共享。共享可作為可供一個或多個程序使用的資源體進(jìn)行,諸如共享庫的集合。也可被執(zhí)行以便允許一個程序與另一程序共享其資源。相反,私有性確保一個程序的資源不可供另一程序使用。在所有情況中,中介層負(fù)責(zé)允許或拒絕共享操作,或?qū)⒉僮鞫ㄏ蛑撂鎿Q上下文。
在本發(fā)明的實(shí)施例中,每一集合404、405、406中的資源被存儲在單獨(dú)的名字空間容器對象中。這些對象允許名字空間類型和上下文的組合的可分開的存儲。名字空間容器的一示例是Microsoft Office的用戶個人設(shè)定(用戶上下文)的文件系統(tǒng)容器。這些容器允許資源的存儲以本地化且獨(dú)立的方式、適于每一組合地進(jìn)行,然后根據(jù)當(dāng)前系統(tǒng)動態(tài)置入正確的名字空間中。資源可被持久化在名字空間容器中,或僅持久化重新創(chuàng)建合適資源或命名對象所需的元數(shù)據(jù)。
可理解,可利用眾多形式的存儲、數(shù)據(jù)結(jié)構(gòu)等來實(shí)現(xiàn)這種功能或其等效特征。例如,名字空間容器可以是包含與存儲在本地或網(wǎng)絡(luò)文件系統(tǒng)中的資源集相關(guān)聯(lián)的所有數(shù)據(jù)和元數(shù)據(jù)的單個文件。在另一示例實(shí)施例中,名字空間容器可以是將請求轉(zhuǎn)發(fā)給底層或遠(yuǎn)程系統(tǒng)的代理對象。
在本發(fā)明的系統(tǒng)中,存在三種互操作的基本模型。生產(chǎn)者/消費(fèi)者模型,其中一個應(yīng)用程序可向另一應(yīng)用程序提供資源服務(wù)。該模型的特征是單向關(guān)聯(lián),其中一個或多個程序可依存于另一程序在提供資源或服務(wù),但反過來則沒有要求。在這種模型中,消費(fèi)者將被限制對生產(chǎn)者的必要集成點(diǎn)的訪問。因此,生產(chǎn)者的環(huán)境和名字空間容器一般將不能由消費(fèi)者訪問,而是僅允許所配置的資源或程序性接口。這種模型的一示例是,諸如為諸如由Great Plains使用Microsoft Excel以從其保存的會計(jì)數(shù)據(jù)來生成電子表單的功能而對諸如Microsoft Office等程序的常見使用。Excel和Great Plains作為獨(dú)立程序是有用且具有功能的,但它們在一起可加強(qiáng)這項(xiàng)功能。Great Plains僅需程序上驅(qū)動Excel,而不需對Excel自身的內(nèi)部配置或狀態(tài)的任何訪問。
第二模型是對等模型,其中一個或多個程序能夠協(xié)作共享資源。在這種模型中,共享被允許,但修改如策略所定義的被嚴(yán)格且特別控制。對等的環(huán)境和資源將顯現(xiàn)為共同存在為單個名字空間中的一個集合,但將根據(jù)此處所定義的策略分開處理。這種模型的示例是共享的數(shù)據(jù)庫驅(qū)動程序或Microsoft Office插件。數(shù)據(jù)庫驅(qū)動程序由機(jī)器上的眾多程序共同使用。為了正確工作,這些其它程序必須可訪問涉及驅(qū)動程序配置的信息。
最后,系統(tǒng)支持非互操作模式,其中不存在共享,這是當(dāng)未定義任何依存性或上下文時的默認(rèn)情況?;蛘?,如上所示,可創(chuàng)建與該模式相關(guān)的隔離上下文。
當(dāng)圖8中的主程序即應(yīng)用程序A 402正操作時,它將請求資源。應(yīng)用程序請求中的每一個由軟件核心評估以確定其相關(guān)上下文和可用范圍。該核心在圖9中詳細(xì)示出。當(dāng)接收到請求510時,上下文管理器503請求其資源由進(jìn)程管理器504標(biāo)識。
進(jìn)程管理器504負(fù)責(zé)保持運(yùn)行在其主機(jī)上的進(jìn)程以及由這些進(jìn)程505采取的操作的視圖。該視圖與父子進(jìn)程和線程的進(jìn)程樹相關(guān)。這允許系統(tǒng)建立理解哪一資源池是操作中的特定進(jìn)程或線程的默認(rèn)資源池的基庫。
源解析階段是重要的步驟,因?yàn)楸姸嗾埱髮@現(xiàn)為來自操作系統(tǒng),而實(shí)際上它們源自應(yīng)用程序。對此的示例是文件系統(tǒng)調(diào)用。對文件的寫請求可由操作系統(tǒng)延遲,但對應(yīng)用程序履行。稍后,當(dāng)操作系統(tǒng)將寫刷新至磁盤時,該請求將來自操作系統(tǒng)自身。為了使上下文管理正確工作,該請求必須被系回其始發(fā)程序。示出另一示例性情況,其中一程序代表諸如Microsoft Windows Application Management服務(wù)的另一程序工作。在這種情況下,一程序?qū)⒄埱骔indows Application Management服務(wù)執(zhí)行某個安裝任務(wù),諸如在主機(jī)系統(tǒng)上注冊其組件。僅查看特定請求的進(jìn)程所有者的系統(tǒng)將確定該活動是操作系統(tǒng)本身的一部分,還是將其系至ApplicationManagement服務(wù)。然而,期望的結(jié)果是這些動作被系至請求執(zhí)行這些服務(wù)的程序。
在本發(fā)明的實(shí)施例的示例性實(shí)現(xiàn)中,裝備了操作環(huán)境的公共接口和通信通路。這些裝備接口被用于捕捉有助于標(biāo)識源上下文的信息。如上所述,裝備WindowsApplication Management服務(wù)的請求接口以標(biāo)識安裝請求的調(diào)用程序。該API調(diào)用的內(nèi)容被發(fā)送給進(jìn)程管理器504來存儲以供將來使用。在該API調(diào)用的有效生存周期期間,進(jìn)程管理器504可在表中保存該信息,并將其用作查找請求所有者的一種手段。
請求作為請求對象510被傳送通過系統(tǒng)。如上所述,該對象包含與發(fā)起該對象的API調(diào)用相關(guān)聯(lián)的屬性,此外,請求包含例如關(guān)于其子系統(tǒng)的數(shù)據(jù)、請求類型(例如,創(chuàng)建、查詢、刪除)、目標(biāo)以及父請求。在實(shí)施例中,請求對象被實(shí)現(xiàn)為與請求的每一目錄/子系統(tǒng)相關(guān)的面向?qū)ο箢?。這允許每一子系統(tǒng)511在不影響本發(fā)明的其它部分的接口的情況下存儲請求專用信息。
當(dāng)接收到解析請求時,進(jìn)程管理器504搜索其進(jìn)程、線程及動作樹以找到候選源。該進(jìn)程表505在圖10中示出,包含進(jìn)程標(biāo)識符(PID)、線程標(biāo)識符(TID)以及狀態(tài)或動作對象指針(SPtr)的列表。每一條目是可以是一個或多個進(jìn)程對象的父親的進(jìn)程對象。父子關(guān)系反映主機(jī)操作系統(tǒng)的關(guān)系。如有必要,每一進(jìn)程對象603包含指向保存對過去動作的引用的狀態(tài)對象604的指針。在較佳實(shí)施例中,每一動作可由操作、操作數(shù)據(jù)以及請求該操作的源進(jìn)程標(biāo)識符組成。實(shí)際上,還存儲其它數(shù)據(jù),諸如例如,該操作的結(jié)果即成功或失敗、以及其結(jié)果代碼、涉及該操作的定時或生存周期信息以及該操作的安全性證書。
如果進(jìn)程或線程與動作相關(guān)聯(lián),則搜索進(jìn)程列表以標(biāo)識該動作是否匹配當(dāng)前請求。在之前Windows Application Management服務(wù)的示例中,由始發(fā)程序進(jìn)行的API調(diào)用將造成在Windows Application Management服務(wù)進(jìn)程對象下創(chuàng)建狀態(tài)對象。該狀態(tài)對象將標(biāo)識,始發(fā)程序是所請求的動作的源。當(dāng)Application Management服務(wù)試圖通過采取諸如創(chuàng)建或修改文件的動作來履行該API請求時,進(jìn)程管理器將找到Windows Application Management服務(wù)的進(jìn)程對象下與該調(diào)用相關(guān)聯(lián)的狀態(tài)對象,但將返回該文件實(shí)際正由使用該服務(wù)的始發(fā)程序創(chuàng)建。
一旦了解請求源之后,進(jìn)程管理器504將請求所有者的進(jìn)程和線程id,及其真正的源(而這些可能是相同的)返回給上下文管理器503,在那里它被匹配于其一個或多個上下文。如圖11中所示,在一個實(shí)施例中,上下文管理器503包含系統(tǒng)可用上下文以及上下文之間的關(guān)聯(lián)的表。上下文將包含基本標(biāo)識符(CID)以及其上下文類型(Ctype)。上下文自身然后需要指向啟用或禁用功能互相關(guān)的一個或多個策略對象705的指針(PoPtr)。策略對象將包含其自己的標(biāo)識符和用于標(biāo)識機(jī)器子系統(tǒng)的匹配助記法以及請求相關(guān)參數(shù)和用于應(yīng)用操作的規(guī)則,諸如資源的源名字空間容器和命名對象的變換操作。一示例策略是應(yīng)對本地系統(tǒng)名字空間容器進(jìn)行的任何修改,例如對匹配例如Microsoft Word文件類型的文件(*.doc)的寫、刪除等。本領(lǐng)域中的技術(shù)人員可以認(rèn)識到,該策略可按照各種形式編纂。
該表可在應(yīng)用程序在系統(tǒng)中使用時被靜態(tài)和/或動態(tài)構(gòu)建,且可使用諸如散列表、列表等任何技術(shù)完成。當(dāng)應(yīng)用程序被啟動時,該表可被加載以指示該應(yīng)用程序的所有相關(guān)聯(lián)程序、名字空間容器和上下文關(guān)系。本發(fā)明的系統(tǒng)的實(shí)施例也允許上下文管理器503經(jīng)由管理接口外部地查詢,以加載新上下文或響應(yīng)于系統(tǒng)配置中的改變。因此,如果添加了與運(yùn)行的程序?qū)Φ鹊膽?yīng)用程序,則該應(yīng)用程序的上下文信息可被加載到實(shí)況系統(tǒng)內(nèi)。此外,上下文管理器503可經(jīng)由該接口向外部管理系統(tǒng)通知其運(yùn)行的或所加載的上下文,使得這些可與其它機(jī)器共享。本領(lǐng)域中的技術(shù)人員可理解,這也可與另一機(jī)器直接進(jìn)行。
上下文管理器將上下文的候選列表饋送給策略引擎506。除用戶、機(jī)器或系統(tǒng)專用策略以外,每一上下文的策略被應(yīng)用于確定在特定上下文內(nèi)解析請求的需求以及加強(qiáng)安全性。該進(jìn)程快速限制要在其內(nèi)評估請求的候選上下文的個數(shù)。將在以下章節(jié)更詳細(xì)描述策略引擎506。
然后,該請求由相關(guān)資源管理子系統(tǒng)——無論是文件系統(tǒng)、注冊表還是其它——在每一上下文內(nèi)評估一次或多次。每一請求的結(jié)果然后可由上下文管理器分析,且凈結(jié)果被返回給調(diào)用進(jìn)程。上下文管理器能夠經(jīng)由其環(huán)境表將請求映射到合適的子系統(tǒng)中,其中它跟蹤虛擬應(yīng)用程序和對象或正被管理但被完全安裝或配置在其主機(jī)上的應(yīng)用程序。
實(shí)際上,存在需要以這種方式管理的若干類操作讀、寫、查詢/查找、創(chuàng)建、重命名/修改、列舉和刪除。在較佳實(shí)施例中,還處理眾多其它操作,較易于在不詳述所處理的所有操作的細(xì)節(jié)的情況下描述基本系統(tǒng)模型。通過分開處理每一類操作,系統(tǒng)使得能夠創(chuàng)作允許對資源的讀訪問但可拒絕或定向?qū)懺L問至替換資源、名字空間容器等的策略。
在讀操作中,系統(tǒng)具有履行讀請求的眾多選擇。如果讀是針對文件的,則該文件可存在于一個或多個上下文內(nèi)。由上下文管理器確定評估什么。本領(lǐng)域的技術(shù)人員可以理解,這可按照若干方式來提供。請求可在所有上下文中作出,然后可根據(jù)其規(guī)則進(jìn)行要利用哪一響應(yīng)或如何組合響應(yīng)的確定。請求可由可用上下文過濾,被確定哪一上下文優(yōu)先,且僅在該上下文中作出該請求。或者作為示例,請求可接連在每一上下文中被評估,直到滿足某一成功準(zhǔn)則。在讀操作的情況中,可由上下文支持讀操作的數(shù)據(jù)的能力來指示成功。
上下文管理器也能夠高速緩存其解析處理結(jié)果以作出遵循不需整個解析階段的模式的公共請求。此外,上下文管理器能夠經(jīng)由上下文的散列分布查詢。該散列過程允許系統(tǒng)快速查閱其表并查詢其它表,而無需執(zhí)行全操作查詢。
從以上示例中的文件可從一個應(yīng)用程序的上下文中讀取,但當(dāng)它被寫至應(yīng)用程序時,實(shí)際寫操作將在另一應(yīng)用程序的上下文內(nèi)發(fā)生中可見上下文方法的重要性。系統(tǒng)的這種行為能夠允許系統(tǒng)彼此互操作,但仍維持彼此隔離或獨(dú)立。如由操作系統(tǒng)防護(hù)說明書所述,作為操作系統(tǒng)的一部分的文件可在運(yùn)行程序的上下文內(nèi)被查看,但如果程序試圖修改該文件,則該修改可保持在程序上下文內(nèi)而不濾過至操作系統(tǒng)。
重命名和刪除操作也一樣。在一個上下文中刪除的文件對另一上下文可能是必要的。因此,本發(fā)明的系統(tǒng)不僅保存關(guān)于刪除和重命名的存在性信息和配置,而且也保存例如其跟蹤信息。
查詢過程是最直接了當(dāng)?shù)?。與讀操作一樣,它可按照分層方式、經(jīng)由分組優(yōu)先級或系統(tǒng)所選擇的任何方式履行。然而,該操作的目的在于確認(rèn)命名對象在正確上下文內(nèi)的存在性或向其返回句柄。本發(fā)明的系統(tǒng)應(yīng)用上下文策略以確定什么是正確的對象、它在當(dāng)前上下文中是否可見以及如何內(nèi)部管理其范圍。
在本發(fā)明的實(shí)施例中,系統(tǒng)也能夠處理上下文列舉和交織(interleaved)的查詢。通過遍歷樹結(jié)構(gòu)或向系統(tǒng)要求某一資源的內(nèi)容列表來訪問操作系統(tǒng)或其應(yīng)用程序內(nèi)的眾多數(shù)據(jù)結(jié)構(gòu)或資源。實(shí)際上,這些操作要求上下文和資源的交織。作為示例,應(yīng)用程序可具有與其相關(guān)聯(lián)的資源。然而,該資源僅當(dāng)另一程序與其自身相關(guān)聯(lián)且現(xiàn)用時有效。
如圖12中所示,資源可被附連至另一程序的資源樹。因此,在對該資源的查詢期間,系統(tǒng)必須能夠交織兩個單獨(dú)配置的名字空間。但是,如果策略不允許聯(lián)合操作,則既不進(jìn)行對命名對象的直接訪問,也不對其進(jìn)行列舉。在附圖中所示的示例中,一應(yīng)用程序即應(yīng)用程序A使用表示W(wǎng)indows Registry鍵對象的三個項(xiàng)配置。僅當(dāng)?shù)诙?yīng)用程序即應(yīng)用程序B被配置在與應(yīng)用程序A共享的上下文內(nèi)時,對象HKLM\Software\Drawing Vendor\Photo Editor\Plugins\Pinhead Software\InlinePlugins\Snapshot 805才將存在。
即使該對象實(shí)際上存在于應(yīng)用程序A中也一樣。如果項(xiàng)“Pinhead Software”802不存在于應(yīng)用程序A的上下文中,則它可能進(jìn)退兩難。系統(tǒng)被設(shè)計(jì)成由于不存在跟蹤至資源的路徑因此不能對該資源列舉,且也不能對其直接訪問,除非次級應(yīng)用程序存在,這兩者才能進(jìn)行。而且,如果應(yīng)用程序B被單獨(dú)實(shí)例化,則由于相同原因,其可被另一資源802、803訪問的資源將不能存在。
名字空間管理在其最基本形式中,上下文是用于展示應(yīng)用程序的資源的單獨(dú)名字空間以及用于將對這些項(xiàng)進(jìn)行的操作持久化的方法。名字空間是其中將唯一名字映射到某個可標(biāo)識資源的域或范圍。操作系統(tǒng)防護(hù)層是創(chuàng)建并管理該替換名字空間的中介。應(yīng)用程序不知曉該中介。它們僅以給定名字創(chuàng)建對象,并預(yù)期能夠在稍后以同一名字引用這些對象。該層管理多個名字空間,但使它們向執(zhí)行的應(yīng)用程序或系統(tǒng)的其余部分顯現(xiàn)為單個名字空間。以這種方式,向操作網(wǎng)絡(luò)150提供的單個資源實(shí)際上可由來自各個不同名字空間的多個資源支持。
默認(rèn)地,中介層創(chuàng)建使加載的每一程序?qū)嵗哂兴接忻挚臻g的隔離的上下文。當(dāng)應(yīng)用程序創(chuàng)建并使用資源時,對象名將被本地化以僅存在于特定應(yīng)用程序?qū)嵗齼?nèi)。這一般是通過確保對象僅實(shí)際存在于程序的范圍內(nèi)來完成的,但也可通過在較大名字空間內(nèi)散列對象名且能夠經(jīng)由逆過程檢索它來完成。以此方式,另一程序不對中介的功能進(jìn)行反向工程就不能夠請求不存在于其名字空間內(nèi)的對象。
應(yīng)用程序所使用來引用對象的名字將被稱為公共名。系統(tǒng)上的兩個單獨(dú)的應(yīng)用程序可使用相同的公共名字,但指的是不同對象。中介負(fù)責(zé)創(chuàng)建對應(yīng)于正確對象的實(shí)例專用名。這被稱為本地名。對每一本地名,存在整個系統(tǒng)上唯一的附加的絕對名。對使用其絕對名的對象的每個引用將引用同一對象。
公共名由應(yīng)用程序指定。本地名由中介在運(yùn)行時通過評估其上下文內(nèi)的公共名來動態(tài)生成。系統(tǒng)不需生成絕對名,但可選擇基于程序的依存性及其上下文關(guān)系。從不向應(yīng)用程序告知絕對名。由中介負(fù)責(zé)將本地名映射到絕對名,以及將正確的公共名映射到本地名,反之亦然。
當(dāng)存在上下文時,如果同一上下文中的兩個應(yīng)用程序使用相同的公共名創(chuàng)建并訪問對象,則它們將能夠引用同一對象。中介負(fù)責(zé)連接對象請求。存在連接這些請求的若干方法。在較佳實(shí)施例中,中介層通常將選擇以相同方式在同一上下文中散列對象名。某些其它操作可僅通過將請求重定向給不同名字的對象來履行。對松散連接的上下文中的應(yīng)用程序,系統(tǒng)所使用的功能允許系統(tǒng)利用快速搜索方法來定位對象并在對象之間進(jìn)行關(guān)聯(lián)。在較佳實(shí)施例中,使用利用本地結(jié)果高速緩存的分布式查找以快速解析名字。
在系統(tǒng)的示例中,程序可嘗試?yán)迷谌齻€位置中可用的資源。首先,它在程序的主配置、以及次級依存配置中可用。它也可作為操作系統(tǒng)的一部分。在我們的示例中,將選擇文件MSCOMCTL.OCX。正常地,該資源具有公共名C:\Windows\System32\MSCOMCTL.OCX。使用操作系統(tǒng)防護(hù),中介層允許該名字存在于所有三個配置中。對所有配置,該對象的公共名相同。
中介層允許所述程序具有使用相同名字的對象的副本。此外,次級配置可具有使用不同名字的對象,但在其配置中指定向系統(tǒng)告知該對象的公共名為C:\Windows\System32\MSCOMCTL.OCX的虛擬化命令。這允許操作系統(tǒng)防護(hù)在除實(shí)際使用對象的名字空間或存儲位置以外的不同名字空間或存儲位置中存儲對象,在運(yùn)行時映射這些名字空間以浮現(xiàn)其行為。
在該示例中,所有三個對象具有相同的公共名。上下文解析過程將選擇哪一對象實(shí)際優(yōu)先。然后,系統(tǒng)將生成或使用正確本地化的名字。在這種情況中,系統(tǒng)將能夠選擇主配置中的對象,并選擇在該程序?qū)嵗纳舷挛膬?nèi)映射本地名。
隨著上下文的范圍變大并變寬,系統(tǒng)也能夠提供名字空間管理器508功能來創(chuàng)建、查詢以及檢索名字空間映射。當(dāng)程序正常地嘗試使用公共名來利用資源時,管理器能夠使用具有該公共名的資源查詢其關(guān)于其它程序的列表。如果其它程序中的任何一個共享上下文,則這然后可由上下文管理器使用。如果這樣,則可進(jìn)行映射以確保共享程序使用同一資源。這可通過強(qiáng)制對同一本地名的使用或通過對系統(tǒng)絕對名的使用來完成。這對延伸至超出機(jī)器邊界以外的上下文尤其有用。
注意,該操作可導(dǎo)致檢索名字空間容器并加載其中所包含的資源的元數(shù)據(jù)的加載器509的副作用。由于資源可具有可變化的生存周期,因此名字空間管理器508實(shí)現(xiàn)各種資源管理操作,包括引用計(jì)數(shù)/跟蹤、容器的加載和定型,在某些情況中還包括預(yù)測虛擬化(speculative virtualization)。
預(yù)測虛擬化是在對文件、注冊表鍵或其它資源進(jìn)行的諸如讀和寫操作的操作期間使用的進(jìn)程。當(dāng)資源被打開或查詢時,系統(tǒng)可假定該資源稍后將被更改,且可執(zhí)行附加的策略以確定諸如寫的進(jìn)一步操作將在該系統(tǒng)中產(chǎn)生什么影響。系統(tǒng)然后可提前或在后臺中執(zhí)行這些操作以避免它們實(shí)際執(zhí)行時造成的進(jìn)一步的成本或延遲。與所有推測性操作一樣,如果后續(xù)的操作未被執(zhí)行,則系統(tǒng)必須能夠撤銷該動作。在本發(fā)明的實(shí)施例中,系統(tǒng)使用預(yù)測虛擬化以協(xié)助避免即寫即復(fù)制(copy-on-write)操作的高成本。當(dāng)文件被改變時,如果文件較大、文件在遠(yuǎn)程位置或這兩者同時成立時,即寫即復(fù)制語義可招致高成本。該過程允許即寫即復(fù)制動作提早、在后臺中進(jìn)行以避免該操作的運(yùn)行時成本。
該名字空間管理器也可在系統(tǒng)的管理層內(nèi)操作,且可以是在操作系統(tǒng)防護(hù)內(nèi)操作的同一實(shí)際管理器,但可被配置成應(yīng)答系統(tǒng)范圍的查詢?;蛘咚梢允菍S脩?yīng)用程序。該管理功能起到提供已配置絕對名的倉庫并將它們映射到大范圍上下文的作用。
該名字空間管理器還可管理每個名字空間內(nèi)的名字的時間演變。這可用于確保即使用于散列的標(biāo)準(zhǔn)算法可能包括時間變量,每次也都以同一方式散列特定對象名。通過這樣做,可向操作提供時間敏感的上下文或語義。此外,這可通過在系統(tǒng)內(nèi)存儲使用和映射信息來完成。
如果一對象在過去由程序在一個接口處請求,且現(xiàn)有同一名字的新接口可用,則該時間敏感行為可確保系統(tǒng)映射至老接口。這作為系統(tǒng)中的默認(rèn)進(jìn)行。如果期望映射至新接口,則能夠聲明性斷言對新版本的使用。當(dāng)存在具有多個版本的軟件系統(tǒng)以及諸如此處所考慮的一系統(tǒng)時,能夠確保恰以由軟件系統(tǒng)的創(chuàng)作者或管理者配置的方式來創(chuàng)建并使用資源。
作為相關(guān)示例,眾多系統(tǒng)使用分布式功能調(diào)用,諸如DCOM或CORBA或甚至HTTP RPC。兩個程序可被配置成彼此依存,這允許進(jìn)行通信。用于連接程序的公共名包含地址和接口。在DCOM的情況中,存在主宿分布式查詢及其COM UID以便公告其接口的機(jī)器。主機(jī)的公共名可已經(jīng)映射至本地名。當(dāng)遠(yuǎn)程程序試圖對主機(jī)和UID尋址時,系統(tǒng)可將地址和UID均映射成對應(yīng)于該本地名,或者它可激活替換主機(jī)來確保提供了接口的正確版本。如上所述,遠(yuǎn)程程序所使用的公共名到主機(jī)所使用的本地名的映射可由系統(tǒng)通過在名字空間管理器內(nèi)查找資源的絕對名或者通過向主機(jī)系統(tǒng)的名字空間管理器查詢其公共到本地名映射來內(nèi)部地完成。如果接口的次級版本存在,則名字空間管理器能夠以反映遠(yuǎn)程激活的合適版本的替換映射來響應(yīng)。
上下文策略以上注意到,需要合適的機(jī)制來管理其中操作可橫跨多個上下文的情況。這些互操作的本質(zhì)可引起命名沖突,造成有必要決定優(yōu)先級順序的情況或用于解析改變操作的影響的情況。系統(tǒng)管理員、或在需要的情況中最終用戶或軟件廠商建立用于控制操作的策略的能力是與以上定義的上下文的存在性正交的。期望提供對上下文宏觀和微觀調(diào)節(jié)的能力以便進(jìn)行迅速配置但粒度精細(xì)的控制的能力。
本發(fā)明的系統(tǒng)的實(shí)施例提供經(jīng)由基于XML的配置文件描述應(yīng)用程序與操作系統(tǒng)的相互依存性的手段。本領(lǐng)域的技術(shù)人員應(yīng)理解,該過程可按照眾多方式提高,在此處僅描述一種。
在圖8的系統(tǒng)中,應(yīng)用程序A具有配置文件a.config 408,而應(yīng)用程序B具有配置文件b.config 409、以及在c.config 410中描述的共享資源集。為了建立程序之間的相互依存性,<CONTEXT>命令被置于a.config 408中,以指示這兩個程序應(yīng)在共享上下文內(nèi)共同存在。在該示例中,上下文是名為EXAMPLE、上下文范圍為Peer(對等)的Shared(共享)上下文。
在系統(tǒng)中,不需要在兩個程序描述中均有該標(biāo)簽才能使其被使用。只有在它需被評估時才需如此,它必須具有特定安全性域內(nèi)的相關(guān)性。因此,除非用戶對這兩個程序均有權(quán)限,否則可與另一程序共享的該程序?qū)⒉粫⑸舷挛摹?br>
此外,可提供協(xié)助理解和評估上下文的系統(tǒng)。作為示例,如果需要受管上下文,則系統(tǒng)要求理解哪些系統(tǒng)參與該上下文。這或者可由上下文的每一成員評估,或者可由系統(tǒng)范圍的服務(wù)全局評估,且當(dāng)評估該上下文時將其提供給每一機(jī)器。這在之前作為上下文管理器系統(tǒng)及其管理接口部分描述。本發(fā)明的系統(tǒng)通過允許創(chuàng)建與軟件包描述分開來描述上下文關(guān)系的策略文件來推動這種行為。
策略文件可用于創(chuàng)建系統(tǒng)的默認(rèn)行為,或建立供系統(tǒng)使用的基本上下文。在任何時候,系統(tǒng)可將策略加載或重載至其策略引擎,供其子系統(tǒng)使用??蓱?yīng)用允許策略僅被應(yīng)用于特定用戶、分組、機(jī)器或其它相關(guān)配置的其它修飾符(modifier)和變量。可以理解,對此技術(shù)可應(yīng)用任何數(shù)量的變型以便控制這些策略的應(yīng)用,但基本的控制是決定上下文是否要被應(yīng)用以及其運(yùn)行時行為是什么。策略也可被數(shù)字簽署以確保其在整個系統(tǒng)中的完整性,并避免用戶創(chuàng)作更改上下文行為的策略。
在單獨(dú)配置項(xiàng)級,系統(tǒng)也能夠指定僅向上下文控制展示特定資源。這種利用在兩個程序需要通信且僅需能夠連接其通信接口而不需理解任何配置細(xì)節(jié)時極其有用。而且,這有助于將一個程序修改另一程序的能力圈在(corral)總體配置的小子集中。在當(dāng)前示例中,共享資源集在c.config中聲明存在它用作資源\\pipe\testresource的主機(jī)的會話上下文。與該資源集運(yùn)行在相同會話中的任何應(yīng)用程序可利用該命名資源,并可在HKLM\Software\Test\Value處查看其別的配置數(shù)據(jù)。在本發(fā)明的實(shí)施例中,如果任何特定資源被命名,則僅這些資源被共享。否則,當(dāng)沒有指定任何資源時,所有資源隱含根據(jù)上下文指示被共享。
策略指示也有助于定義操作類的結(jié)果。這種類型的指示的一個簡單的示例是聲明對Windows Registry的任何修改應(yīng)進(jìn)入用戶的個人設(shè)置名字空間容器內(nèi)的策略。這種類型的策略允許交叉剪接(cross-cutting)不僅應(yīng)用于特定應(yīng)用程序而且還應(yīng)用于多個上下文以及多個名字空間和容器的定義。
也對所有上下文配置允許修飾符,它允許每一規(guī)范為只讀或讀寫的。默認(rèn)行為是上下文專用的。此外,在允許對知曉上下文的關(guān)聯(lián)進(jìn)行寫的情況中,重要的是標(biāo)識寫將在哪一上下文內(nèi)進(jìn)行。這將在稍后更詳細(xì)討論。然而,配置文件可覆蓋系統(tǒng)的正常行為以指定特定目標(biāo)。
本發(fā)明的系統(tǒng)所提供的另一修飾符是覆蓋所建立的上下文的優(yōu)先級的順序的能力??稍趯Φ戎g確定任何特定關(guān)系。在這種情況中,信息的所有者自然負(fù)責(zé)信息生存周期。然而,可能期望進(jìn)行修改的程序僅在其自身內(nèi)看到修改。如果兩個程序位于共享上下文內(nèi),則修改將不以這種方式持久化。修飾符可強(qiáng)制進(jìn)行該替換行為。
確定和控制上下文為了系統(tǒng)可實(shí)行,它必須提供確定最佳行為的某種自動化手段。默認(rèn)地,操作系統(tǒng)防護(hù)將程序配置成在隔離上下文中存在,除非程序被明確打包成位于同一上下文內(nèi)。打包在同一應(yīng)用程序環(huán)境下的所有程序應(yīng)共享該一個上下文。然而期望進(jìn)一步自動化如上所述的可互操作的上下文的創(chuàng)建。本發(fā)明的系統(tǒng)提供檢測并配置這些上下文的若干手段以及用于控制行為的策略。
在應(yīng)用程序安裝期間,系統(tǒng)允許安裝直接配置其目標(biāo)上下文。在虛擬安裝軟件或操作系統(tǒng)防護(hù)的情況中,這是特定程序的隔離上下文。將對所安裝的一個或一組應(yīng)用程序特別創(chuàng)建新的配置環(huán)境。通過向系統(tǒng)指示增強(qiáng)現(xiàn)有配置的期望,諸如在現(xiàn)存應(yīng)用程序的上下文內(nèi)執(zhí)行安裝程序,安裝將以加性的方式在環(huán)境內(nèi)進(jìn)行。
對以諸如經(jīng)由ESD系統(tǒng)的標(biāo)準(zhǔn)手段分發(fā)并安裝的軟件,該軟件正常地將被安裝到本地系統(tǒng)上下文內(nèi)。與操作系統(tǒng)防護(hù)的系統(tǒng)相對,正常地,應(yīng)用程序級軟件和操作系統(tǒng)存在于機(jī)器內(nèi)的相同位置處。在較佳實(shí)施例的系統(tǒng)中,軟件可被配置成被安裝到安裝時所選的單獨(dú)上下文內(nèi)。正常地,取決于所期望的行為,這將是廠商、用戶或會話上下文之一,但可以是可用上下文中的任何一個。作為示例,由廠商Microsoft提供的所有軟件可被安裝在Microsoft應(yīng)用程序的上下文內(nèi)。
使用這種方法,系統(tǒng)可將安裝的對象重定向到替換存儲位置,并創(chuàng)建在運(yùn)行時映射的公共名。這允許在不損害機(jī)器或其隱含的對象名字空間的情況下,將應(yīng)用程序安裝到機(jī)器上。系統(tǒng)也可允許將軟件安裝到重定目標(biāo)的系統(tǒng)、虛擬機(jī)、仿真環(huán)境或目的地主機(jī),以便在實(shí)際安裝到目標(biāo)機(jī)器上之前創(chuàng)建配置。這允許在運(yùn)行時創(chuàng)建虛擬環(huán)境,而不需為虛擬安裝準(zhǔn)備軟件的先驗(yàn)步驟。
如在以往的應(yīng)用中所述,一旦安裝完成,操作系統(tǒng)防護(hù)將下載其配置。在該下載期間,可針對某些模式分析該配置。這些模式被用于裝備程序并從公共命名問題中抽象程序。作為示例,眾多程序當(dāng)被安裝時“個性化”其自身,并將關(guān)于安裝用戶或該程序曾運(yùn)行其上的機(jī)器的信息寫到其配置內(nèi)。系統(tǒng)移除這些本地名,并使用公共名替代。或者,如果程序在其安裝期間創(chuàng)建了ODBC DSN,則系統(tǒng)將知道要創(chuàng)建對ODBC子系統(tǒng)的適當(dāng)版本的創(chuàng)建依存性。
這些模式可在安裝期間被實(shí)況啟用。這些模式可以是應(yīng)用程序?qū)S媚0寤蛲ㄓ玫慕?jīng)驗(yàn)規(guī)則。一示例是安裝到Microsoft Office內(nèi)的程序?qū)⑺阉鱄KEY_LOCAL_MACHINE\Software\Microsoft\Office注冊表鍵。實(shí)現(xiàn)這些方法的系統(tǒng)可提供實(shí)現(xiàn)這些模板的內(nèi)部規(guī)則或可安裝模板的可配置集合。
在本發(fā)明的實(shí)施例中,搜索Microsoft Office的程序可查詢以上命名注冊表鍵。在該查詢期間,如果Microsoft Office軟件被安裝在本地機(jī)器上,則將在該新軟件包內(nèi)創(chuàng)建依存性以確保Office存在供該程序使用且創(chuàng)建了一上下文以確保程序在本地機(jī)器上彼此可見。如果Microsoft Office軟件是虛擬安裝包的一部分,則系統(tǒng)將在其名字空間管理器內(nèi)找到該注冊表鍵,并找到該新軟件包可能需要與之互操作的上下文的列表。然后能夠創(chuàng)建對虛擬包的依存性并創(chuàng)建互操作的共享上下文。
在本發(fā)明的實(shí)施例中,可用軟件包被存儲在一個或多個倉庫中。配置和上下文信息可由系統(tǒng)的上下文管理器容易地查詢。當(dāng)進(jìn)行請求時,可針對整個倉庫為候選上下文和依存性匹配該請求。在Microsoft Office示例的情況下,系統(tǒng)不需模板,而是將對Microsoft Office的查詢解析為從倉庫內(nèi)的應(yīng)用程序傳入。系統(tǒng)然后能夠?qū)嵗疧ffice應(yīng)用程序及其配置,并為正安裝的程序創(chuàng)建上下文和依存性。
默認(rèn)地,系統(tǒng)試圖盡可能地嚴(yán)格,僅以共享所需的那些資源配置開放或共享度盡可能低的上下文。提供接口以更改上下文策略和配置,并迅速消除資源級命令以及設(shè)置包范圍共享或改變上下文。
考慮到可應(yīng)用本發(fā)明的原理的各種實(shí)施例,應(yīng)理解,示出的實(shí)施例僅是示例性的,且不應(yīng)用作限制本發(fā)明的范圍。例如,流程圖的步驟可按照不同于所述的順序采取,且可在示意圖中使用更多或更少的特征。盡管本發(fā)明的各個特征被描述為以軟件實(shí)現(xiàn),但可替換使用硬件或固件實(shí)現(xiàn)的其它實(shí)施例,反之亦然。
對本領(lǐng)域的普通技術(shù)人員而言,顯然用于經(jīng)由上下文策略控制來控制應(yīng)用程序間關(guān)聯(lián)的系統(tǒng)和方法中所涉及的方法可被具體化成包括計(jì)算機(jī)可用介質(zhì)的計(jì)算機(jī)程序產(chǎn)品。例如,這樣的計(jì)算機(jī)可用介質(zhì)可包括可讀存儲器設(shè)備,諸如硬盤驅(qū)動器設(shè)備、CD-ROM、DVD-ROM或計(jì)算機(jī)磁盤,其上存儲計(jì)算機(jī)可讀程序代碼片段。計(jì)算機(jī)可讀介質(zhì)也可包括通信或傳輸介質(zhì),諸如總線或其上承載程序代碼片段作為數(shù)字或模擬數(shù)據(jù)信號的光學(xué)、有線或無線通信鏈路。
其它方面、修改和實(shí)施例位于所附權(quán)利要求書范圍之內(nèi)。
權(quán)利要求
1.一種用于控制多個軟件應(yīng)用程序和資源的互操作的方法,所述方法包括截取從第一應(yīng)用程序到第二應(yīng)用程序或資源的通信;將所述通信定向至上下文管理系統(tǒng);生成所述通信的上下文候選列表;根據(jù)為這些上下文定義的至少一個策略評估所述候選列表以標(biāo)識所述通信的結(jié)果動作和名字空間;以及在所標(biāo)識的名字空間內(nèi)如由所述至少一個策略所定義地執(zhí)行所述動作。
2.如權(quán)利要求1所述的方法,其特征在于,還包括跟蹤所述第二應(yīng)用程序的一個或多個版本。
3.如權(quán)利要求1所述的方法,其特征在于,還包括跟蹤應(yīng)用程序和/或資源名的演變。
4.如權(quán)利要求1所述的方法,其特征在于,還包括標(biāo)識與所述候選列表上的上下文相關(guān)聯(lián)的一個或多個操作;以及在進(jìn)一步通信之前執(zhí)行所標(biāo)識的一個或多個操作。
5.如權(quán)利要求1所述的方法,其特征在于,所述生成候選列表的步驟包括從一個或多個分布式的上下文中提供上下文。
6.如權(quán)利要求1所述的方法,其特征在于,通信包括進(jìn)程間通信、操作系統(tǒng)調(diào)用、API調(diào)用或庫調(diào)用的至少之一。
7.如權(quán)利要求1所述的方法,其特征在于,上下文包括全局上下文、受管上下文、本地系統(tǒng)上下文、系統(tǒng)虛擬上下文、廠商上下文、用戶上下文、會話上下文、共享上下文和隔離上下文的至少之一。
8.如權(quán)利要求1所述的方法,其特征在于,所述至少一個策略包括用于標(biāo)識何時應(yīng)用所述策略的匹配助記法、多個請求相關(guān)參數(shù)以及用于應(yīng)用所述策略的規(guī)則的至少其中之一。
9.一種用于定義將在其它應(yīng)用程序或資源內(nèi)執(zhí)行的應(yīng)用程序的替換名字空間的方法,所述方法包括截取對公共名資源的調(diào)用;標(biāo)識所述調(diào)用的目標(biāo)名字空間;將所述公共名轉(zhuǎn)換成可由所述名字空間內(nèi)的應(yīng)用程序使用的本地名;以及提供對由所述本地名標(biāo)識的資源的訪問。
10.如權(quán)利要求9所述的方法,其特征在于,還包括跟蹤應(yīng)用程序的一個或多個版本。
11.如權(quán)利要求9所述的方法,其特征在于,還包括跟蹤應(yīng)用程序或資源名的演變。
12.如權(quán)利要求9所述的方法,其特征在于,所述本地名也可被轉(zhuǎn)換成絕對名,使得對由所述本地名標(biāo)識的資源的訪問可簡化成對由替換名字空間中的不同本地名標(biāo)識的資源的訪問。
13.如權(quán)利要求9所述的方法,其特征在于,所述標(biāo)識目標(biāo)名字空間的步驟包括一個或多個分布式查詢。
14.如權(quán)利要求13所述的方法,其特征在于,對所述目標(biāo)名字空間的至少一個查詢可對跟蹤一個或多個系統(tǒng)公用的名字空間的管理系統(tǒng)執(zhí)行。
15.一種用于控制多個軟件應(yīng)用程序和資源的互操作的系統(tǒng),所述系統(tǒng)包括生成通信的上下文的候選列表的上下文管理系統(tǒng);根據(jù)為所述上下文定義的至少一個策略評估所述候選列表的策略引擎,所述策略引擎還標(biāo)識所述通信的結(jié)果動作和名字空間;以及將所述通信從第一應(yīng)用程序定向到第二應(yīng)用程序或資源的虛擬環(huán)境管理器,所述虛擬環(huán)境管理器接收指示所標(biāo)識名字空間內(nèi)由所述至少一個策略定義的結(jié)果動作的指令。
全文摘要
用于控制多個軟件應(yīng)用程序和資源的互操作的方法包括,截取從第一應(yīng)用程序到第二應(yīng)用程序或資源的通信、將該通信定向至上下文管理系統(tǒng)、生成該通信的上下文候選列表、根據(jù)為這些上下文定義的至少一個策略評估候選列表以標(biāo)識該通信的結(jié)果動作和名字空間、以及在所標(biāo)識的名字空間內(nèi)如由這些策略所定義地執(zhí)行該動作。該方法還包括跟蹤第二應(yīng)用程序的一個或多個版本,以及跟蹤應(yīng)用程序和/或資源名的演變。該方法還包括標(biāo)識與候選列表上的上下文相關(guān)聯(lián)的一個或多個操作,并在進(jìn)一步通信之前執(zhí)行所標(biāo)識的操作。
文檔編號G06F9/46GK101048735SQ200580026131
公開日2007年10月3日 申請日期2005年7月28日 優(yōu)先權(quán)日2004年8月3日
發(fā)明者S·謝弗, J·希罕 申請人:索芙特瑞斯提股份有限公司