專利名稱:以完全無影響方式安裝軟件應(yīng)用程序的系統(tǒng)和方法
背景技術(shù):
軟件開發(fā)者一直努力簡化軟件開發(fā)過程。這樣做的一種方法是重復(fù)使用代碼,只要這樣做有意義。例如,非常多的軟件應(yīng)用程序用打開文件對話框提示用戶。在各個軟件應(yīng)用程序中執(zhí)行該任務(wù)可能幾乎相同,而且每個應(yīng)用程序必須使用向用戶顯示該對話框的代碼。與其迫使軟件開發(fā)者獨立地創(chuàng)建不同的唯一的對話框,不如現(xiàn)在讓開發(fā)者已經(jīng)使用共享公共代碼的庫,可使用如對話框這樣的公共代碼代替獨立開發(fā)的代碼。使用用于重復(fù)使用代碼的共享庫大大地簡化開發(fā)過程并減少由于人的錯誤而引入的錯誤數(shù)量。雖然比完全定制的軟件好,但使用共享庫并不是沒有問題。
當(dāng)利用共享庫編寫多個軟件應(yīng)用程序時,每個應(yīng)用程序變成依賴于該共享庫在該軟件應(yīng)用程序所預(yù)期的狀態(tài)中是可用的。對該共享庫進行的任何修改,可能且經(jīng)常會導(dǎo)致引用該共享庫的軟件應(yīng)用程序發(fā)生不可預(yù)知的行為。這冷卻了開發(fā)改進很可能由許多軟件應(yīng)用程序共享的代碼的熱情。在提供共享庫的升級或修改時存在一種障礙因素,因為即使該升級是改正代碼中的一個錯誤,該升級可能導(dǎo)致其它軟件應(yīng)用程序停止正常運行。不可能在每一可能遇到的情形下測試一段共享代碼,因為每一新的軟件應(yīng)用程序創(chuàng)建另外的以前沒有的情形。
共享庫所關(guān)聯(lián)的這些困難已經(jīng)增加了安裝與升級軟件應(yīng)用程序的困難??赡茉?jīng)有一時期在安裝或升級一軟件應(yīng)用程序時不用擔(dān)心影響其它軟件應(yīng)用程序??墒牵昧斯蚕韼炀筒辉儆心菢拥臅r候了。在當(dāng)今環(huán)境中,安裝一包括共享庫的應(yīng)用程序可能導(dǎo)致另一個軟件應(yīng)用程序發(fā)生故障,如果該其它軟件應(yīng)用程序依賴于該共享庫。常常難以準確地說出甚至對共享庫所做的最輕微改變可能對其它應(yīng)用程序產(chǎn)生的是什么影響。這是一般不自動執(zhí)行安裝或升級應(yīng)用程序的一個原因。一般是在用戶干涉下執(zhí)行安裝或升級,而且可能更重要的地,伴隨一對于用戶的該處理可能導(dǎo)致其它應(yīng)用程序不希望的結(jié)果的警告。這些警告通常使用戶驚慌失措,尤其對于不了解為什么會發(fā)生這樣一個事件或如何糾正問題的單純用戶。
這些與其它問題常常使繁忙的軟件安裝與升級難以完成。用戶因為擔(dān)心(至少部分地)他們現(xiàn)有的應(yīng)用程序會中斷而已經(jīng)減緩接受通過單擊一網(wǎng)頁上的超鏈接安裝與執(zhí)行的可下載軟件的簡單性。軟件開發(fā)者出于同樣的擔(dān)心已經(jīng)減緩提供這樣的可下載軟件現(xiàn)有的下載和安裝軟件的手法還沒有消除那些擔(dān)心。
也沒有任何下載與安裝軟件的替代方法似乎被本行業(yè)更為接受。例如,主機應(yīng)用程序概念在本質(zhì)上是存儲和安裝在可被遠程訪問的服務(wù)器上的應(yīng)用程序。只有當(dāng)應(yīng)用程序的用戶界面方面(例如擊鍵、鼠標(biāo)移動和點擊和屏幕顯示)可在客戶計算機與服務(wù)器之間傳送時,客戶計算機才能連接至服務(wù)器并執(zhí)行該應(yīng)用程序??墒牵驗橥ㄟ^網(wǎng)絡(luò)執(zhí)行應(yīng)用程序?qū)ο嚓P(guān)性能的影響,這個模型不能達到廣泛接受的程度。用戶經(jīng)驗是直接依賴客戶機與服務(wù)器之間連接的帶寬,而如果網(wǎng)絡(luò)故障,則主機應(yīng)用程序完全無有。因此,可容易地下載和安裝或升級的遠程管理軟件的便利性已經(jīng)避開了軟件群體。
發(fā)明概述本發(fā)明的目標(biāo)是提供可從遠程位置安裝的軟件應(yīng)用程序而不影響已經(jīng)安裝的應(yīng)用程序。本發(fā)明提供一種機制用于安裝包含完全自描述的組件的應(yīng)用程序。隨后在和該應(yīng)用程序一起存儲的一應(yīng)用程序明細單中標(biāo)識該應(yīng)用程序的每一個組件。該應(yīng)用程序明細單還包括描述該應(yīng)用程序的每個組分各種依賴關(guān)系的信息。對該應(yīng)用程序興趣的遠程用戶可如該應(yīng)用程序明細單所述那樣將該應(yīng)用程序下載至本地存儲位置。該應(yīng)用程序的任何共享組分也被共享,除了任何現(xiàn)有的、可能已經(jīng)依賴于該共享組分的一以前版本應(yīng)用程序繼續(xù)依賴該以前版本。一個應(yīng)用程序的不同版本是在本地并行地存儲的。
圖1是功能結(jié)構(gòu)圖,可實施本發(fā)明實現(xiàn)的一分布網(wǎng)絡(luò)環(huán)境的概觀。
圖2是功能結(jié)構(gòu)圖,更詳細地說明依照本發(fā)明為在遠程客戶計算機上安裝的應(yīng)用程序代碼服務(wù)的示例服務(wù)器。
圖3是功能結(jié)構(gòu)圖,說明依照本發(fā)明可能從服務(wù)器檢索和寫入應(yīng)用程序的示例客戶計算機。
圖4是例證性屏幕顯示,依照本發(fā)明的一個實施例由允許遠程應(yīng)用程序下載的網(wǎng)絡(luò)瀏覽軟件提供的。
圖5是邏輯流程圖,主要說明檢索和安裝一在網(wǎng)絡(luò)內(nèi)正在使用的應(yīng)用程序的過程。
圖6是邏輯流程圖,主要說明按照本發(fā)明的一個實施例使應(yīng)用程序自描述并在網(wǎng)絡(luò)上可用于下載的過程。
發(fā)明詳細說明本發(fā)明的目標(biāo)是用于提供一種基于明細單、安裝時可不影響現(xiàn)有軟件的可下載的軟件應(yīng)用程序的系統(tǒng)和方法。
圖1是功能結(jié)構(gòu)圖,可實施本發(fā)明實現(xiàn)的一分布網(wǎng)絡(luò)環(huán)境的概觀。如圖1所示,兩臺或多臺計算機,諸如服務(wù)器102和客戶計算機120在網(wǎng)絡(luò)105內(nèi)相連接。這些計算機可能是在公司環(huán)境中連接的,其中網(wǎng)絡(luò)105可能是局域網(wǎng)或廣域網(wǎng)。同樣,這些計算機可在廣域網(wǎng)如互聯(lián)網(wǎng)內(nèi)任意地連接。
服務(wù)器102是一計算系統(tǒng),被設(shè)定為使資源可用于與網(wǎng)絡(luò)105相連接的其它計算系統(tǒng)。服務(wù)器102可包括網(wǎng)絡(luò)服務(wù)軟件用于提供互聯(lián)網(wǎng)有關(guān)資源,如超文本標(biāo)記語言(HTML)文件或其它類似文件。服務(wù)器102包括服務(wù)器數(shù)據(jù)存儲器110形式的本地存儲器。在數(shù)據(jù)存儲器110上至少有一些資源由服務(wù)器102把它們在網(wǎng)絡(luò)105年使用。特別是應(yīng)用程序代碼105和應(yīng)用程序明細單112都存儲在數(shù)據(jù)存儲器110中,將結(jié)合附圖2在后面作詳細地描述。服務(wù)器102還包括其它應(yīng)用程序(后面詳述)用于維護應(yīng)用程序代碼115和用于建立并維護應(yīng)用程序明細單112和其它有關(guān)的文檔與資源。在此實現(xiàn)中,服務(wù)器102使應(yīng)用程序代碼115和應(yīng)用程序明細單112在網(wǎng)絡(luò)105內(nèi)被其它計算系統(tǒng)使用。
客戶計算機是一計算系統(tǒng),被設(shè)定為執(zhí)行本地運行的應(yīng)用程序以及與在網(wǎng)絡(luò)105內(nèi)的其它計算機相連接??蛻粲嬎銠C120還包括客戶機數(shù)據(jù)存儲器106形式的本地存儲器。在客戶機數(shù)據(jù)存儲器106中存有本地應(yīng)用程序存儲器109和預(yù)訂信息107??蛻粲嬎銠C120還包括其它未示出的應(yīng)用程序,用于與在網(wǎng)絡(luò)內(nèi)的其它計算機交互(例如互聯(lián)網(wǎng)瀏覽軟件等)和用于維護本地應(yīng)用程序代碼109和預(yù)訂信息107??蛻粲嬎銠C120和其它突出的組分將結(jié)合圖3在下面更詳細地描述。
簡要地說,客戶計算機120的用戶可以任何常規(guī)方式連接至服務(wù)器102。服務(wù)器102顯示一網(wǎng)頁或一些其它資源,使存在于服務(wù)器數(shù)據(jù)存儲器110中的文件可用。在響應(yīng)用戶選擇一個鏈接或相似行為時,應(yīng)用程序明細單112被帶到客戶計算機120。應(yīng)用程序明細單112用名稱、一些標(biāo)識符和有可能用與應(yīng)用程序相關(guān)聯(lián)的雜湊值唯一地標(biāo)識應(yīng)用程序。應(yīng)用程序明細單112詳細地描述應(yīng)用程序代碼115,包括每個組分、它們的版本和依賴關(guān)系。在查閱應(yīng)用程序明細單112后,如果該應(yīng)用程序代碼115還未安裝于客戶計算機120上,則將應(yīng)用程序115從服務(wù)器102帶到客戶計算機120并安裝。
依照本發(fā)明,應(yīng)用程序代碼115可安裝于客戶計算機120而不用擔(dān)心影響現(xiàn)有的軟件應(yīng)用程序?,F(xiàn)在有些計算系統(tǒng)對應(yīng)用程序的每個組分使用“強名稱”,強名稱包括該組分足夠的信息,可從其它相似組分中唯一地識別該組件。例如,一組分的強名稱如一共享動態(tài)鏈接庫,可包括該組分的版本號、創(chuàng)建號等等。強名稱的使用給組分一個利用數(shù)字式簽名和公共密鑰的全球唯一識別。
在客戶計算機120上的每個應(yīng)用程序是充分地自描述的,使每個應(yīng)用程序的每個組分的依賴關(guān)系是已知的(包括它們的強名稱)。此外,在應(yīng)用程序明細單112中充分描述在應(yīng)用程序115中的每個組件,包括它的依賴關(guān)系,從而可確定應(yīng)用程序代碼115中的一個特定共享組分是否與客戶計算機120上的任何現(xiàn)有應(yīng)用程序沖突。為此,沒有以其準確狀態(tài)存在于客戶計算機120上的該應(yīng)用程序代碼115的每個組分從服務(wù)器102被卸下。任何現(xiàn)有代碼,共享的或不共享的,在客戶計算機120上保持未動。這樣,在客戶計算機120上的任何現(xiàn)有應(yīng)用程序繼續(xù)和以前一樣和原來的共享組分一起運行,而新下載的應(yīng)用程序包括它需要成功地運行的所有組分。只有當(dāng)改變現(xiàn)有應(yīng)用程序的依賴關(guān)系以引用一共享組分的較新版本時(如由強名稱所標(biāo)識的),該現(xiàn)有應(yīng)用程序才會使用那個共享組分的下載版本。
圖2是功能結(jié)構(gòu)圖,更詳細地說明依照本發(fā)明為在遠程客戶計算機上安裝的應(yīng)用程序代碼服務(wù)的示例服務(wù)器。如所示的,服務(wù)器102包括一應(yīng)用程序的兩個版本,應(yīng)用程序版本A201和應(yīng)用程序版本B201。該應(yīng)用程序的每個版本包括幾個程序文件(210,260),如可執(zhí)行文件、配置文件等等。該應(yīng)用程序的每個版本還可包括裝配(211,261),它們是可在兩個或多個應(yīng)用程序中共享的動態(tài)鏈接庫。做為選擇,一應(yīng)用程序的組分可以是修補程序,被應(yīng)用于該程序的一個已安裝版本的現(xiàn)有組分。該應(yīng)用程序的各個組分可用歸檔或壓縮格式(例如用CAB文件或ZIP格式)存儲以節(jié)約存儲空間并減少下載帶寬。
如上所述,可用唯一地把每個組分與其它組件相區(qū)別的強名稱標(biāo)識該應(yīng)用程序中的組分。特別是用強名稱標(biāo)識要被共享的任何裝配211、261。在此例中,應(yīng)用程序版本A201是由網(wǎng)絡(luò)服務(wù)器軟件255正在提供給在網(wǎng)絡(luò)105內(nèi)的其它計算系統(tǒng)。其它版本應(yīng)用程序版本B202被存儲在服務(wù)器102供將來使用或用于歸檔目的。
當(dāng)被調(diào)用時,明細單生成程序225判斷所選擇應(yīng)用程序的版本,如應(yīng)用程序版本A201,并確定在各個組分中的依賴關(guān)系。然后明細單生成程序225為所選擇應(yīng)用程序的版本創(chuàng)建一應(yīng)用程序明細單212。在一實施例中,該應(yīng)用程序明細單212是一基于可擴展標(biāo)記語言(XML)的文檔,該文檔用強名稱標(biāo)識所選擇的應(yīng)用程序的每個組分,并可包括附加信息以幫助唯一地標(biāo)識每個組分,如雜湊值、公共密鑰令牌等等。這樣性質(zhì)的一示例應(yīng)用程序明細單作為“附錄A一示例應(yīng)用程序明細單”包括在本文檔中。在另外一實施例中,該應(yīng)用程序明細單212可以是封裝在該應(yīng)用程序的可執(zhí)行組件的一入口點里面的信息。雖然在本文檔中將本發(fā)明的應(yīng)用程序明細單212描述為一特殊的文件,但它應(yīng)該被解釋為用任何形式描述應(yīng)用程序的組分的信息,并且它可以存在于在此所述的以外的位置。在此所述的應(yīng)用程序明細單212只是作為示例而已。
此外,明細單生成程序225還可創(chuàng)建一默認的預(yù)訂明細單250,標(biāo)識網(wǎng)絡(luò)服務(wù)器軟件255目前正在提供的應(yīng)用程序為各個版本中的哪一個。預(yù)訂明細單250是另一個基于XML的文件,包括指向應(yīng)用程序的當(dāng)前版本的應(yīng)用程序明細單212的識別信息(例如通用資源定位)。本發(fā)明的實施例所使用的一個示例預(yù)訂明細單作為“附錄B一示例預(yù)訂明細單”包括在此文檔中。
網(wǎng)絡(luò)服務(wù)器255可使HTML文件或其它包括一指向預(yù)訂明細單250的超鏈接的網(wǎng)絡(luò)可訪問頁面被使用。用此方法,遠程計算機可訪問該HTML文件,激活該超鏈接,得到該預(yù)訂明細單250,隨后檢索如該預(yù)訂明細單250所標(biāo)識的該應(yīng)用程序的當(dāng)前版本。這樣,通過簡單地修改該預(yù)訂明細單250標(biāo)識該應(yīng)用程序的另一個版本,一發(fā)布程序能立即開始提供該應(yīng)用程序的其它版本。因為每個版本是完整的和自描述的,所以改變當(dāng)前版本不用擔(dān)心一旦檢索并安裝新的當(dāng)前版本將對其它軟件應(yīng)用程序產(chǎn)生負面影響。預(yù)訂明細單250還可包括其它信息,諸如一消費系統(tǒng)應(yīng)該如何經(jīng)常檢查以更新、什么時候應(yīng)該進行檢查等等。
圖3是功能結(jié)構(gòu)圖,較詳細說明依照本發(fā)明可從服務(wù)器檢索和載入應(yīng)用程序的示例客戶計算機??蛻粲嬎銠C120包括網(wǎng)絡(luò)瀏覽軟件302使用戶能夠連接在網(wǎng)絡(luò)內(nèi)的遠程位置。網(wǎng)絡(luò)瀏覽軟件302可作為組分包括在一操作系統(tǒng)或類似的系統(tǒng)之中。在此例中,網(wǎng)絡(luò)瀏覽軟件302允許客戶計算機120的用戶從一服務(wù)器如上面所述的服務(wù)器102得到包括一預(yù)訂明細單250超鏈接的網(wǎng)頁或類似的網(wǎng)頁。暫時轉(zhuǎn)到圖4,所示為網(wǎng)絡(luò)瀏覽軟件302的一個示例顯示412,包括可能由上面所述的服務(wù)器102所提供的網(wǎng)頁410。該網(wǎng)頁410可能是一資源,使軟件應(yīng)用程序可供遠程計算系統(tǒng)下載使用。該網(wǎng)頁410包括一超鏈接460指向上面所述的預(yù)訂明細單250。做為選擇,該超鏈接460可被設(shè)定為直接指向應(yīng)用程序明細單212而不是預(yù)訂明細單250。
可以理解為網(wǎng)頁410可在互聯(lián)網(wǎng)、公司內(nèi)部互聯(lián)網(wǎng)或任何其它網(wǎng)絡(luò)可訪問的位置內(nèi)被提供。激活超鏈接460使預(yù)訂明細單250從該服務(wù)器被下拉。應(yīng)該理解為網(wǎng)頁460只是用戶接收預(yù)訂明細單250的通知的一種方法。例如,可在電子郵件消息或類似消息中提供預(yù)訂明細單250的鏈接。在另一種選擇中,也可提供多重超鏈接(例如超鏈接470)指向存儲于服務(wù)器102上的應(yīng)用程序的其它版本。用此方法,不想要應(yīng)用程序當(dāng)前版本的用戶可以選擇檢索和安裝該應(yīng)用程序的一個較舊的或替換版本。
回到圖3,一旦預(yù)訂明細單250被檢索到,將它交給激活組件308處理。在此實施例中,激活組件308被設(shè)定為分析預(yù)訂明細單250并提取足夠的信息以識別對應(yīng)的應(yīng)用程序,如該應(yīng)用程序的名稱、版本和位置。如果超鏈接460直接指向應(yīng)用程序明細單212,則可從應(yīng)用程序明細單212直接檢索那些信息。有了那些信息,激活組件308能查詢本地應(yīng)用程序存儲器109以確定所識別的應(yīng)用程序是否已經(jīng)在本地存儲于客戶計算機120中。本地應(yīng)用程序存儲器109包括已安裝應(yīng)用程序305的本地拷貝,和應(yīng)用程序特有的安全信息307。更特別的是,當(dāng)每個應(yīng)用程序被下載,它所關(guān)聯(lián)的URL和應(yīng)用程序代碼一起被高速緩存。這樣做是為了當(dāng)安裝該應(yīng)用程序時有效的安全權(quán)限繼續(xù)應(yīng)用于隨后執(zhí)行該應(yīng)用程序的場合。例如,如果從一互聯(lián)網(wǎng)位置(如由它的URL所規(guī)定的)下載一應(yīng)用程序,那么應(yīng)用于該互聯(lián)網(wǎng)區(qū)域的安全權(quán)限可在每次執(zhí)行時被應(yīng)用于該應(yīng)用程序。
如果激活組分308確定在預(yù)訂明細單250所標(biāo)識的應(yīng)用程序沒有在本地安裝,則激活組件308可將有關(guān)應(yīng)用程序的信息傳給下載組分309。下載組分被設(shè)定為檢索應(yīng)用程序所關(guān)聯(lián)的下載數(shù)據(jù)315并在本地安裝應(yīng)用程序。更特別地,下載組分309可檢索預(yù)訂明細單250所標(biāo)識的應(yīng)用程序明細單212并分析應(yīng)用程序明細單212以標(biāo)識應(yīng)用程序代碼和依賴關(guān)系。下載組分309然后可從服務(wù)器102檢索還未在本地存儲的任何應(yīng)用程序代碼。再次注意因為每個應(yīng)用程序代碼是由強名稱標(biāo)識的,只有那些與應(yīng)用程序明細單所標(biāo)識的組分相同的本地組分被使用,而其它組件從服務(wù)器102被檢索。同樣,下載組分可能是能應(yīng)用于應(yīng)用程序的現(xiàn)有版本的已安裝組件的修補程序,可進一步減少下載費用。在從服務(wù)器102下載修補程序的情況下,應(yīng)該理解為該修補程序是應(yīng)用于現(xiàn)有應(yīng)用程序代碼的拷貝,但隨后在本地作為應(yīng)用程序的一獨立的新的版本存儲。這個過程保持了應(yīng)用程序的每個版本并行的性質(zhì),同時進一步減小了下載的負擔(dān)。一旦下載應(yīng)用程序代碼,下載組分309可驗證與該組分相關(guān)聯(lián)的任何簽名以確定它們的真實性,執(zhí)行雜湊檢查以確保正確的組件已被檢索,并將應(yīng)用程序代碼交付給應(yīng)用程序存儲器109。做為選擇,可把某個組分標(biāo)識為在請求時而不是立即被下載。
一數(shù)字權(quán)限管理系統(tǒng)可以實施(或者在服務(wù)器102或者在客戶計算機120或在兩者上),要求下載組分309驗證與客戶計算機120或用戶所關(guān)聯(lián)的信息以確保有足夠授權(quán)來下載與安裝應(yīng)用程序。此外,作為安裝過程一部分,可向用戶提示,獲得需要的許可協(xié)議,購買該應(yīng)用程序。
雖然在圖3中示作單一實體,但應(yīng)用程序存儲器109實際上可存在于客戶機數(shù)據(jù)存儲器106中的多個位置。例如,應(yīng)用程序存儲器109可包括存儲許多應(yīng)用程序代碼的一個位置和存儲共享組分的另一個位置(例如全局裝配高速緩沖)。
在最后向本地應(yīng)用程序存儲器109提交應(yīng)用程序代碼后,激活組分308用服務(wù)器組分312注冊應(yīng)用程序。服務(wù)器組分312是一本地服務(wù)程序,為對預(yù)訂的應(yīng)用程序的修改負責(zé)周期性地輪詢已注冊的預(yù)訂明細單如預(yù)訂明細單250。服務(wù)器組分312維護標(biāo)識每個預(yù)訂的應(yīng)用程序的預(yù)訂信息314、它們的預(yù)訂明細單的位置和在那時用來確定預(yù)訂明細單是否已經(jīng)被修改的一時間間隔。在一實現(xiàn)中,當(dāng)客戶計算機120空閑時,服務(wù)器組分312試圖檢索對應(yīng)預(yù)訂的應(yīng)用程序的預(yù)訂明細單,并且如果發(fā)生任何修改時,將修改過的預(yù)訂明細單交給激活組件308自動地帶回預(yù)訂的應(yīng)用程序的任何新版本。
而且,因為每個應(yīng)用程序是并行地存儲的,在每個應(yīng)用程序的組分之間沒有沖突。于是,可下載與安裝應(yīng)用程序的新版本而不會影響其它已安裝的應(yīng)用程序。如上所述,這是通過使用應(yīng)用程序的強名稱組件實現(xiàn)的,此外,因為在本地并行地安裝應(yīng)用程序,每個應(yīng)用程序版本是唯一的,如果用戶想要回到以前使用的版本,它為有效的重新運行提供增強的支持。簡而言之,因為每個應(yīng)用程序與其它應(yīng)用程序無關(guān),可卸載一個應(yīng)用程序而不用擔(dān)心影響其它應(yīng)用程序,同樣安裝它們時不會影響現(xiàn)有的應(yīng)用程序。
應(yīng)該注意本發(fā)明所設(shè)想的并行安裝是通過給某個應(yīng)用程序代碼特別是共享組分賦予強名稱來實現(xiàn)的。使用常規(guī)或傳統(tǒng)的命名技術(shù)并行安裝的試圖,其中的組分不是全球唯一的,可能由于各種原因而失敗。例如,簡單地將一應(yīng)用程序的所有組分存儲在一個目錄中是不太令人滿意的,因為它使修補一共享組分更為困難。如果一個組分是由安裝的應(yīng)用程序和其它應(yīng)用程序共享的,那么對那個組分應(yīng)用一個修補程序也需要為了應(yīng)用該修補程序?qū)ζ渌星闆r下的那個共享組分進行定位。不能唯一地區(qū)分組分(通過強名稱或一些其它機制),只是創(chuàng)建號(例如)不同的二或多個相同的組分不能方便地共存于一共享組分位置。本發(fā)明克服了這些限制。
在預(yù)訂被注冊后,激活組分308將控制傳給受管理主機組分330,它根據(jù)應(yīng)用程序被檢索到的位置的URL和安全權(quán)限在一安全應(yīng)用程序范圍內(nèi)(例如“沙箱”)啟動應(yīng)用程序。此外,應(yīng)用程序或應(yīng)用程序的組分可由一發(fā)布程序數(shù)字化簽名。如果這么做,該發(fā)布程序的數(shù)字化簽名可用于為正在執(zhí)行的應(yīng)用程序提供在沙箱之外的權(quán)限。換言之,可能存儲于客戶計算機120上的安全信息為來自特定發(fā)布程序的應(yīng)用程序提供超過或在附加于沙箱應(yīng)用程序的普通權(quán)限之上的權(quán)限。受管理主機組分330也可為提出要的組分提供下載和為共享組分提供的單一引證。
圖5是邏輯流程圖,主要說明檢索和安裝一在網(wǎng)絡(luò)內(nèi)正在使用的應(yīng)用程序的過程。該過程開始于一用戶表示想要以某種方式安裝應(yīng)用程序,如通過選擇一與該應(yīng)用程序有關(guān)的鏈接。該過程開始于方框503,開始檢索與該應(yīng)用程序相關(guān)聯(lián)的一預(yù)訂明細單。在一實施例中,一網(wǎng)頁上超鏈接指向預(yù)訂明細單和該用戶通過觸發(fā)該超鏈接表示想要下載和安裝該應(yīng)用程序,引起預(yù)訂明細單被下載至客戶計算機。
在方框505,檢索包含描述該應(yīng)用程序的一應(yīng)用程序明細單。在此實施例中,該預(yù)訂明細單包含標(biāo)識該應(yīng)用程序明細單所在處的信息。根據(jù)這個信息,檢索該應(yīng)用程序明細單。
在判斷框507,對該應(yīng)用程序的相同版本是否已經(jīng)在本地存在作出判斷。這一判斷可通過分析該應(yīng)用程序明細單,以識別關(guān)于該應(yīng)用程序的標(biāo)識信息,并將該標(biāo)識信息與在本地安裝的應(yīng)用程序作比較來完成。如果已經(jīng)安裝了相同的該應(yīng)用程序,該過程在方框517執(zhí)行該應(yīng)用程序的在本地存儲的版本。否則,該過程繼續(xù)至方框509。
在方框509,下載該應(yīng)用程序的組分。隨后可下載該應(yīng)用程序明細單所標(biāo)識的每個組分??梢岳斫鉃樽鳛樵撓螺d過程的部分,可將每個組分的說明與已經(jīng)在本地存儲的每個組分的說明比較并且可以省去下載已經(jīng)在本地存儲的任何組分。
在方框511,將下載的組分存儲在本地應(yīng)用程序存儲器中。共享組分可存儲在一全局或系統(tǒng)高速緩沖,以使它們可用于多個應(yīng)用程序。
在方框515,為預(yù)訂注冊該應(yīng)用程序。在一實施例中,一個服務(wù)器組分周期性地輪詢在一個預(yù)訂的應(yīng)用程序的當(dāng)前發(fā)布版本中的修改。這是通過定位一預(yù)訂明細單、由該應(yīng)用程序的發(fā)布程序維護、并將預(yù)訂明細單所標(biāo)識的應(yīng)用程序的版本與當(dāng)前已安裝的應(yīng)用程序比較而完成的。根據(jù)預(yù)定單的設(shè)置,該預(yù)定應(yīng)用程序的較新版本可以自動下載至客戶計算機。在某些情況下,如大應(yīng)用程序,可向用戶顯示一UI表示正在進行下載并提供該下載和安裝的進度。最后在方框517,執(zhí)行在本地安裝的應(yīng)用程序。
圖6是邏輯流程圖,主要說明按照本發(fā)明的一個實施例使應(yīng)用程序自描述并在網(wǎng)絡(luò)內(nèi)用于下載的過程。當(dāng)一應(yīng)用程序發(fā)布程序或開發(fā)者表示想要使一應(yīng)用程序可用于下載時進入該過程。處理從方框603開始。
在方框603,分析一應(yīng)用程序以確定它的組成部分(組分)并標(biāo)識在每個組成部分之間的依賴關(guān)系。該信息可存儲在與該應(yīng)用程序相關(guān)聯(lián)的應(yīng)用程序明細單中。
在方框606,創(chuàng)建一標(biāo)識已安裝應(yīng)用程序的預(yù)訂明細單并在網(wǎng)絡(luò)內(nèi)使它供可能想要下載該應(yīng)用程序的用戶使用。該預(yù)訂明細單包括唯一地標(biāo)識該應(yīng)用程序和標(biāo)識該應(yīng)用程序位置的信息。在一實施例中,預(yù)訂明細單包括一指向?qū)?yīng)于該應(yīng)用程序的應(yīng)用程序明細單的URL。
在方框611,將該應(yīng)用程序和預(yù)訂明細單拷貝至在網(wǎng)絡(luò)內(nèi)公眾公共可訪問的位置。在一實施例中,該公共可訪問位置可對應(yīng)于由網(wǎng)絡(luò)服務(wù)軟件維護的一公共共享。在另一實施例中,該公共可訪問位置可對應(yīng)于一公司企業(yè)內(nèi)部互聯(lián)網(wǎng)或類似互聯(lián)網(wǎng)。
在方框615中,向可能想要下載該應(yīng)用程序的用戶發(fā)布一預(yù)訂明細單鏈接。例如,可創(chuàng)建包括一預(yù)訂明細單鏈接的網(wǎng)頁。想要下載該應(yīng)用程序至客戶計算機的用戶可訪問該網(wǎng)頁并激活該鏈接。在響應(yīng)時,該預(yù)訂明細單可被檢索到該用戶的客戶計算機。如果適當(dāng)?shù)嘏渲迷摽蛻粲嬎銠C,隨后可下載該預(yù)訂明細單所指向的該應(yīng)用程序并安裝在該客戶計算機上。
上面的描述、實例和數(shù)據(jù)為本發(fā)明的結(jié)構(gòu)的制作與使用提供了完整的說明。由于在不脫離本發(fā)明的精神與范圍內(nèi)可制作本發(fā)明的許多實施例,因此本發(fā)明屬于在這后面所附的權(quán)利要求書。
附錄A示例應(yīng)用程序明細單<pre listing-type="program-listing"><![CDATA[<?xml version=″1.0″encoding=″UTF-8″standalone=″yes″?><assembly xmlnsasm_namespace_vl=″urnschemas-microsoft-comasm.vl″manifestVersion=″1.0″> <assemblyIdentityname=″Microsoft.Fusion.ClickOnceTest.URT.MultiLevel″version=″1.0.0.0″processorArchitecture=″x86″type=″application″language=″*″publicKeyToken=″144CC461D95B64FF″/> <description>Microsoft.Fusion.ClickOnceTest.URT.MultiLevel </description> <application>.<shellState friendlyName=″ClickOnceTest.URT.MultiLevel″ showCommand=″normal″ hotKey=″0″ entryPoint=″″ entryImageType=″.NetAssembly″/><activation assemblyName=″MultiLevel″/> </application> <file name=″buildAll.cmd″hash=″C39911F3F35068013F1AB9ED8DC58469″/> <file name=″L1_Asm1.cs″hash=″A24B49E13CE5A409D857BC05DC46B5F7″/> <file name=″L1_Asm2.cs″hash=″2061EF44BD9ECE958EF5EBB9FC10C335″/> <file name=″L1_Asm3.cs″hash=″461DC925229846952A4D0B81A8688D7B″/> <file name=″L1_Asm4.cs″hash=″96DF5C47919BF7C4A3C04AA1FD3F274D″/> <file name=″L2_Asm1_Dep1.cs″hash=″2DB9715F8369340F1D3D1F290A4FF8B1″/> <file name=″L2_Asm1_Dep2.cs″hash=″142D1D046CE13F279F0B07714365D495″/> <file name=″L2_Asm2_Dep1.cs″hash=″E002AA267654F32EC115C5A8F297CE58″/> <file name=″L2_Asm3_Dep1.cs″hash=″1B09608FEF6D6065A221B8ACFB90CFA6″/> <file name=″L2_Asm3_Dep2.cs″hash=″3A90FA6BF2E4755718FF1E8B35BB701D″/> <file name=″L3_Asm3_Dep2_SubDep1.cs″hash=″64BDB1C8E105D7560CCFA942705B1DC5″/> <file name=″MultiLevel.cs″hash=″4DAFA9788DBFCD281A1C3EE486B0809F″/> <file name=″readme.txt″hash=″8726A66D3EDC6B36C9F41E1085A894E7″/> <file name=″TopLevel.cs″hash=″B7F904FAC94B10AA864245E27D272F54″/> <dependency><dependentAssembly><assemblyIdentity name=″L1_Asm1″version=″1.2.3.4″publicKeyToken=″e8ed396099c4b4e9″processorArchitecture=″x86″language=″x-ww″/><install codebase=″L1_Asm1.dll″/> </dependentAssembly> <dependentAssembly> <assemblyIdentity name=″L1_Asm2″version=″1.2.3.4″publicKeyToken=″e8ed396099c4b4e9″processorArchitecture=″x86″language=″x-ww″/> <install codebase=″L1_Asm2.dll″/> </dependentAssembly> <dependentAssembly> <assemblyIdentity name=″L1_Asm3″version=″1.2.3.4″publicKeyToken=″e8ed396099c4b4e9″processorArchitecture=″x86″language=″x-ww″/> <install codebase=″L1_Asm3.dll″/> </dependentAssembly> <dependentAssembly> <assemblyIdentity name=″L1_Asm4″version=″1.2.3.4″publicKeyToken=″e8ed396099c4b4e9″processorArchitecture=″x86″language=″x-ww″/> <install codebase=″L1_Asm4.dll″/> </dependentAssembly> <dependentAssembly> <assemblyIdentity name=″L2_Asm1_Dep1″version=″1.2.3.4″publicKeyToken=″e8ed396099c4b4e9″processorArchitecture=″x86″language=″x-ww″/> <install codebase=″L2_Asm1_Dep1.dll″/> </dependentAssembly> <dependentAssembly> <assemblyIdentity name=″L2_Asm1_Dep2″version=″1.2.3.4″publicKeyToken=″e8ed396099c4b4e9″processorArchitecture=″x86″language=″x-ww″/> <install codebase=″L2_Asm1_Dep2.dll″/> </dependentAssembly> <dependentAssembly> <assemblyIdentity name=″L2_Asm2_Dep1″version=″1.2.3.4″publicKeyToken=″e8ed396099c4b4e9″processorArchitecture=″x86″language=″x-ww″/> <install codebase=″L2_Asm2_Dep1.dll″/> </dependentAssembly> <dependentAssembly> <assemblyIdentity name=″L2_Asm3_Dep1″version=″1.2.3.4″publicKeyToken=″e8ed396099c4b4e9″processorArchitecture=″x86″language=″x-ww″/ > <install codebase=″L2_Asm3_Dep1.dll″/> </dependentAssembly> <dependentAssembly> <assemblyIdentity name=″L2_Asm3_Dep2″version=″1.2.3.4″publicKeyToken=″e8ed396099c4b4e9″processorArchitecture=″x86″language=″x-ww″/> <install codebase=″L2_Asm3_Dep2.dll″/> </dependentAssembly> <dependentAssembly><assemblyIdentity name=″L3_Asm3_dep2_subDep1″version=″1.2.3.4″publicKeyToken=″e8ed396099c4b4e9″processorArchitecture=″x86″language=″x-ww″/> <install codebase=″L3_Asm3_dep2_subDep1.dll″/> </dependentAssembly> <dependentAssembly><assemblyIdentity name=″MultiLevel″version=″0.0.0.0″processorArchitecture=″x86″language=″x-ww″/> <install codebase=″MultiLevel.exe″/> </dependentAssembly> <dependentAssembly> <assemblyIdentity name=″TopLevel″version=″1.2.3.4″publicKeyToken=″e8ed396099c4b4e9″processorArchitecture=″x86″language=″x-ww″/> <install codebase=″TopLevel.dll″/> </dependentAssembly> </dependency></assembly>]]></pre>
附錄B示例預(yù)定明細單<pre listing-type="program-listing"><![CDATA[<assembly xmlnsasm_namespace_v1=″urnschemaa-microsoft-comasm.v1″manifestversion=″1.0″> <assemblyIdentity type=″subscription″ name=″Microsoft.Fusion.ClickOnceTest.URT.MultiLevel″ version=″1.0.0.0″ publicKeyToken=″144CC461D95B64FF″ processorArchitecture=″x86″ language=″*″/> <description> MutilLevel.NetAssembly Application </description> <dependency><dependentAssembly> <assemblyIdentity type=″application″ name=″Microsoft.Fusion.ClickOnceTest.URT.MultiLevel″ version=″1.0.0.0″ publicKeyToken=″144CC461D95B64FF″ processorArchitecture=″x86″ language=″x-ww″/> <installcodebase=″http//fusiontest/ClickOnce/TestApps/URTApps/MultiLevel/Microsoft.Fusion.ClickOnceTest.URT.MultiLevel.manifest″ type=″required″/> <subscription synchronizeInterval=″1″ intervalUnit=″hours″ synchronizeEvent=″onApplicationStartup″ eventDemandConnection=″no″/></dependentAssembly> </dependency></assembly>]]></pre>
權(quán)利要求
1.一用計算機可執(zhí)行指令編碼的計算機可讀介質(zhì),其特征在于,所述計算機可讀介質(zhì)包括啟動對標(biāo)識一應(yīng)用程序和該應(yīng)用程序的位置的明細單的檢索;下載與該應(yīng)用程序相關(guān)聯(lián)的組分至一本地數(shù)據(jù)存儲器,每個組分是充分自描述以使其與其它組分相區(qū)別;以及為預(yù)訂注冊該應(yīng)用程序,其中,預(yù)訂進一步包括周期性地檢索該預(yù)訂明細單以確定該預(yù)訂明細單是否標(biāo)識另一個應(yīng)用程序,如果是,則為其它應(yīng)用程序重復(fù)下載和注冊步驟。
2.如權(quán)利要求1所述的計算機可讀介質(zhì),其特征在于,所述明細單包括一預(yù)訂明細單。
3.如權(quán)利要求1所述的計算機可讀介質(zhì),其特征在于,所述明細單包括一應(yīng)用程序明細單。
4.如權(quán)利要求1所述的計算機可讀介質(zhì),其特征在于,啟動對所述明細單的檢索進一步包括激活與下載所述應(yīng)用程序關(guān)聯(lián)的在一網(wǎng)頁上一個鏈接。
5.如權(quán)利要求1所述的計算機可讀介質(zhì),其特征在于,啟動對所述明細單的檢索進一步包括由一自動預(yù)訂服務(wù)程序根據(jù)預(yù)訂信息進行檢索所述的明細單的檢索。
6.如權(quán)利要求5所述的計算機可讀介質(zhì),其特征在于,所述預(yù)訂信息進一步包括標(biāo)識存儲在所述本地數(shù)據(jù)存儲器中的應(yīng)用程序的信息,對所述信息的周期性更新已被注冊。
7.如權(quán)利要求1所述的計算機可讀介質(zhì),其特征在于,所述明細單包括一預(yù)訂明細單,其中,所述指令進一步包括,在下載組分之前,檢索與所述應(yīng)用程序相關(guān)聯(lián)的且在該預(yù)訂明細單中所標(biāo)識的一應(yīng)用程序明細單,該應(yīng)用程序明細單包括每個組分說明,足以使其與其它組分中相區(qū)別。
8.如權(quán)利要求7所述的計算機可讀介質(zhì),其特征在于,所述應(yīng)用程序明細單進一步描述與所述應(yīng)用程序相關(guān)聯(lián)的每個組分的依賴關(guān)系。
9.如權(quán)利要求1所述的計算機可讀介質(zhì),其特征在于,至少所述組分中一個組分包括一共享組分。
10.如權(quán)利要求9所述的計算機可讀介質(zhì),其特征在于,所述共享組分包括一裝配。
11.如權(quán)利要求10所述的計算機可讀介質(zhì),其特征在于,所述裝配包括一強名稱。
12.一種用來從一遠程存儲器位置安裝一應(yīng)用程序的計算機可執(zhí)行方法,其特征在于,所述方法包括標(biāo)識與該應(yīng)用程序相關(guān)聯(lián)的一應(yīng)用程序明細單,該應(yīng)用程序明細單包括足夠的信息,以唯一地標(biāo)識該應(yīng)用程序的每個組分;以及下載該應(yīng)用程序的組分至一本地存儲器,每個組分充分地自描述使依賴已經(jīng)安裝的組分的現(xiàn)有應(yīng)用程序繼續(xù)依賴那些已經(jīng)安裝的組分,而該應(yīng)用程序依賴與該應(yīng)用程序一起下載的組件。
13.如權(quán)利要求12所述的計算機可執(zhí)行的方法,其特征在于,所述方法進一步包括比較所述應(yīng)用程序明細單中的信息與本地安裝的應(yīng)用程序,以確定所述應(yīng)用程序的任何組分是否與一本地安裝的應(yīng)用程序一起存在,如果是,則將所述應(yīng)用程序的組分的下載限制成對那些還沒有和一本地安裝的應(yīng)用程序一起存在組分的下載。
14.如權(quán)利要求12所述的計算機可執(zhí)行的方法,其特征在于,所述應(yīng)用程序的組分包括應(yīng)用于相應(yīng)組分的安裝版本的修補程序,并進一步包括將所述應(yīng)用程序的組分的下載限制在該修補程序的下載。
15.如權(quán)利要求14所述的計算機可執(zhí)行的方法,其特征在于,所述預(yù)訂明細單進一步包括所述應(yīng)用程序明細單的位置的標(biāo)識符。
16.如權(quán)利要求12所述的計算機可執(zhí)行的方法,其特征在于,標(biāo)識所述應(yīng)用程序明細單包括下載一指向所述應(yīng)用程序明細單的預(yù)訂明細單。
17.如權(quán)利要求12所述的計算機可執(zhí)行的方法,其特征在于,所述方法進一步包括注冊根據(jù)預(yù)訂明細單中的變化而自動升級的應(yīng)用程序。
18.如權(quán)利要求12所述的計算機可執(zhí)行的方法,其特征在于,所述方法進一步包括根據(jù)預(yù)訂明細單中的修改重復(fù)所述方法,該預(yù)訂明細單是與所述應(yīng)用程序相關(guān)聯(lián)。
19.如權(quán)利要求18所述的計算機可執(zhí)行的方法,其特征在于,標(biāo)識所述應(yīng)用程序明細單包括下載指向所述應(yīng)用程序明細單的該預(yù)訂明細單。
20.一用數(shù)據(jù)結(jié)構(gòu)編碼的計算機可讀介質(zhì),其特征在于,所述計算機可讀介質(zhì)包括一第一字段,該字段包括一應(yīng)用程序的一唯一標(biāo)識符;一組第二字段,該字段標(biāo)識該應(yīng)用程序的每個組分,每個組分在其它組件中是可唯一地區(qū)分的;以及一組第三字段,該字段標(biāo)識該應(yīng)用程序的每個組分,而該應(yīng)用程序的每個組分依賴它而成功運行。
21.如權(quán)利要求20所述的計算機可讀介質(zhì),其特征在于,所述第一字段進一步包括與所述應(yīng)用程序相關(guān)聯(lián)的一雜湊值。
22.如權(quán)利要求20所述的計算機可讀介質(zhì),其特征在于,所述每個第二字段進一步包括與對應(yīng)于對應(yīng)的第二字段的一個組分相關(guān)聯(lián)的一雜湊值。
23.如權(quán)利要求20所述的計算機可讀介質(zhì),其特征在于,所述數(shù)據(jù)結(jié)構(gòu)包括一基于XML的文檔。
24.如權(quán)利要求20所述的計算機可讀介質(zhì),其特征在于,在所述第三字段組中所標(biāo)識的依賴關(guān)系用一強名稱標(biāo)識所述的被依賴的組分。
25.如權(quán)利要求24所述的計算機可讀介質(zhì),其特征在于,在所述第三字段組中所標(biāo)識的依賴關(guān)系用一公共密鑰令牌標(biāo)識所述的被依賴的組件。
全文摘要
所述的是一種機制,用于提供可從一遠程位置安裝的軟件應(yīng)用程序而不影響已經(jīng)安裝的軟件應(yīng)用程序。本發(fā)明提供一種機制,用于安裝包括完整地自描述組分的應(yīng)用程序。然后把一應(yīng)用程序的每個組分標(biāo)識在一與該應(yīng)用程序一起存儲的應(yīng)用程序明細單。該應(yīng)用程序明細單還包括描述該應(yīng)用程序的每個組分的各種依賴關(guān)系的信息。對該應(yīng)用程序感興趣的一遠程用戶可如該應(yīng)用程序明細單所述那樣下載該應(yīng)用程序至一本地存儲器位置。該應(yīng)用程序的任何共享組分也被共享,除了任何現(xiàn)有的、可能已經(jīng)依賴于該共享組分的一以前版本應(yīng)用程序繼續(xù)依賴該以前版本。一個應(yīng)用程序的不同版本是在本地并行地存儲的。
文檔編號G06F9/445GK1480837SQ03145240
公開日2004年3月10日 申請日期2003年6月25日 優(yōu)先權(quán)日2002年6月27日
發(fā)明者A·W·坎特, A W 坎特, M·鄧恩, S·帕塔薩拉蒂 申請人:微軟公司