專利名稱:修復(fù)遭破壞的軟件的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件修復(fù)。
技術(shù)背景
現(xiàn)代計(jì)算機(jī)系統(tǒng)運(yùn)行從操作系統(tǒng)(0 到應(yīng)用程序的大量各種軟件。單單OS就可包括數(shù)萬文件。相關(guān)文件可被編組成軟件組件。
計(jì)算機(jī)系統(tǒng)的用戶知道要更新安裝在他們的計(jì)算機(jī)系統(tǒng)上的軟件。更新可包括用于防止新發(fā)現(xiàn)的潛在攻擊的隱錯(cuò)補(bǔ)丁或安全更新。另外,更新可以發(fā)布該軟件的早先版本中不包括的新特征。不管更新的原因如何,用戶的計(jì)算機(jī)系統(tǒng)上的遭破壞的軟件組件可能阻止正確安裝軟件更新。
這樣的破壞可具有多種原因之一。可因?yàn)橐氲接?jì)算機(jī)系統(tǒng)的病毒或由惡意一方進(jìn)行的某種其他攻擊而發(fā)生破壞。軟件誤配置和硬件組件(如存儲(chǔ)器和非易失性存儲(chǔ))中的故障也可造成組件破壞。
不管原因如何,破壞可阻止完成更新。例如,微軟公司所銷售的WINDOWS 操作系統(tǒng)包括訪問稱為WINDOWS UPDATE 的遠(yuǎn)程服務(wù)來安裝WINDOWS 操作系統(tǒng)的各組件的新版本的軟件更新服務(wù)。這一服務(wù)所進(jìn)行的更新通常需要在安裝各組件的經(jīng)更新版本之前卸載這些組件的較舊版本。如果較舊版本被破壞,則卸載動(dòng)作可能不能進(jìn)行。這將阻止經(jīng)更新組件的安裝,從而留給用戶過期的計(jì)算機(jī)系統(tǒng)。發(fā)明內(nèi)容
使用用于修復(fù)遭破壞的軟件的方法可達(dá)到經(jīng)改進(jìn)的計(jì)算機(jī)系統(tǒng)穩(wěn)定性和可靠性。 修復(fù)遭破壞的軟件組件例如可允許卸載各組件的舊版本,以便可以安裝經(jīng)更新的組件。隨后使用最新組件來操作該系統(tǒng)以得到經(jīng)改進(jìn)的系統(tǒng)穩(wěn)定性和可靠性。
在懷疑軟件的完整性的任何時(shí)刻,對(duì)該軟件進(jìn)行修復(fù)是重要的。例如,如果軟件已被破壞或沒有正確工作,則計(jì)算機(jī)系統(tǒng)可以從對(duì)該軟件進(jìn)行修復(fù)中受益。具體而言,修復(fù)軟件的方法在可能的最低粒度級(jí)工作是有利的。例如,如果發(fā)現(xiàn)軟件組件遭破壞并且需要修復(fù),則該系統(tǒng)應(yīng)只修復(fù)修補(bǔ)該破壞所必須的最小文件集合。
不管修復(fù)遭破壞的軟件組件的原因如何,可以通過檢測遭破壞的軟件組件并對(duì)遭破壞的文件列表來進(jìn)行修復(fù)??啥ㄎ徊⑾螺d修復(fù)遭破壞的文件所必需的一組文件。隨后可使用所下載的文件來修復(fù)遭破壞的組件。
在一些實(shí)施例中,文件破壞是使用散列函數(shù)和分開存儲(chǔ)的散列鍵來檢測的。計(jì)算機(jī)系統(tǒng)隨后下載與遭破壞的文件相對(duì)應(yīng)的修復(fù)文件的集合。一些實(shí)施例包括確保計(jì)算機(jī)系統(tǒng)接收到的修復(fù)文件是真實(shí)的且安裝安全的確認(rèn)動(dòng)作。
在一些實(shí)施例中,修復(fù)遭破壞的文件的方法被用于軟件更新過程中。如果確定待更新的組件遭破壞,則該組件將被修復(fù)和卸載。只在這時(shí)才安裝該組件的經(jīng)更新的版本。
在其他實(shí)施例中,遭破壞的軟件的修復(fù)可由用戶手動(dòng)地觸發(fā)。或者,它可由諸如反病毒軟件應(yīng)用程序等系統(tǒng)健康檢查程序觸發(fā)。
以上是對(duì)由所附權(quán)利要求書所定義的本發(fā)明的非限定性的概述。
附圖不旨在按比例繪制。在附圖中,各個(gè)附圖中示出的每個(gè)相同或近乎完全相同的組件由同樣的附圖標(biāo)記來表示。出于簡明的目的,不是每個(gè)組件在每張附圖中均被標(biāo)記。 在附圖中
圖1是本發(fā)明的各實(shí)施例可以在其中操作的示例性環(huán)境的框圖2是根據(jù)本發(fā)明的一些實(shí)施例的計(jì)算設(shè)備的框圖3是本發(fā)明的一些實(shí)施例中的修復(fù)遭破壞的軟件的示例性過程的流程圖4是本發(fā)明的一些實(shí)施例中的更新遭破壞的軟件的示例性過程的流程圖5是本發(fā)明的一些實(shí)施例中的定位修復(fù)文件的示例性過程的流程圖;以及
圖6是本發(fā)明的一些實(shí)施例中的確定一組件是否遭破壞的示例性過程的流程圖。
具體實(shí)施方式
發(fā)明人認(rèn)識(shí)到并明白,修復(fù)遭破壞的軟件組件可以便于更新在計(jì)算機(jī)系統(tǒng)上執(zhí)行的軟件組件并且可產(chǎn)生更穩(wěn)定和可靠的計(jì)算機(jī)系統(tǒng)。本文呈現(xiàn)的系統(tǒng)和方法可以在最小用戶干預(yù)下對(duì)組件進(jìn)行修復(fù)。通過使用自動(dòng)化的修復(fù)服務(wù),可降低用戶挫折感且用戶可花費(fèi)較少時(shí)間來解決軟件更新過程中發(fā)生的因故障引起的問題。
在一些實(shí)施例中,組件修復(fù)服務(wù)可以在計(jì)算設(shè)備上執(zhí)行。該修復(fù)服務(wù)可以響應(yīng)于一個(gè)或多個(gè)觸發(fā)來操作,如計(jì)算設(shè)備上的更新服務(wù)完成更新時(shí)的故障或來自反病毒組件或其他反惡意軟件組件的指示可能遭破壞的組件或組件集合(如,軟件子系統(tǒng))的指示。作為替換或補(bǔ)充,可使用其他觸發(fā)。在一些實(shí)施例中,觸發(fā)可以是來自待驗(yàn)證子系統(tǒng)的明確請(qǐng)求。在其他實(shí)施例中,觸發(fā)可以是系統(tǒng)完整性受損的任何指示。
不管修復(fù)的觸發(fā)如何,修復(fù)服務(wù)可以從合適的源獲得作為遭破壞的組件的一部分的一個(gè)或多個(gè)文件的副本。所獲得的文件可以提供對(duì)遭破壞的組件的破壞有責(zé)任的遭破壞文件的未遭破壞的版本。所下載的文件可以是與安裝在計(jì)算設(shè)備上文件相同的版本,并且可被用來修復(fù)這些文件,可能通過替換它們來進(jìn)行修復(fù)。
修復(fù)文件的合適的源可取決于實(shí)施例而變化。在一些實(shí)施例中,該源是外部服務(wù)器。在一些實(shí)施例中,這一外部是可信源。它可以由本領(lǐng)域已知的確認(rèn)過程來驗(yàn)證。它可以是計(jì)算機(jī)連接到的本地網(wǎng)絡(luò)上的服務(wù)器。或者,源不必是傳統(tǒng)服務(wù)器,而是改為對(duì)等網(wǎng)絡(luò)源。在一些實(shí)施例中,合適的源可以是內(nèi)部存儲(chǔ)或盤。OS可保持即使在計(jì)算機(jī)未連接到網(wǎng)絡(luò)時(shí)也可被用來修復(fù)軟件組件的軟件文件的存儲(chǔ)。作為示例,OS開發(fā)人員可以鼓勵(lì)原始設(shè)備制造商裝運(yùn)帶有已存儲(chǔ)到計(jì)算機(jī)存儲(chǔ)設(shè)備的恢復(fù)區(qū)的計(jì)算機(jī)硬件。
經(jīng)修復(fù)的文件隨后可被用作遭破壞的組件的卸載操作的一部分。隨后可使用未遭破壞的文件來重新安裝該組件。可基于經(jīng)修復(fù)的文件來重新安裝該組件的同一版本,這是在目標(biāo)是修復(fù)遭破壞的軟件時(shí)的情況。但在一些實(shí)施例中,可以安裝該組件的經(jīng)更新的版本,這可以是在目標(biāo)是更新被發(fā)現(xiàn)已遭破壞的軟件時(shí)的情況。
可以使用任何合適的機(jī)制來標(biāo)識(shí)與遭破壞的組件相對(duì)應(yīng)的一組文件。在一些實(shí)施例中,文件可以對(duì)應(yīng)于遭破壞的組件的子集。為了標(biāo)識(shí)這一子集,可以測試這些文件(在它們存在于計(jì)算設(shè)備上時(shí))以確定是否某一個(gè)已遭破壞。這樣的測試需要使用散列函數(shù)并將與該組件的各文件相關(guān)聯(lián)的一個(gè)或多個(gè)散列結(jié)果同未遭破壞的各文件的相應(yīng)的散列結(jié)果進(jìn)行比較以標(biāo)識(shí)表示破壞的任何偏差。
可以從任何合適的源獲得未遭破壞的文件的散列結(jié)果。在一些實(shí)施例中,可以由一個(gè)或多個(gè)包來實(shí)現(xiàn)軟件組件,每一個(gè)包包括清單和凈荷。凈荷可包括包含被執(zhí)行來執(zhí)行該組件的功能的計(jì)算機(jī)可執(zhí)行指令的文件。清單可標(biāo)識(shí)形成該包的一部分的文件并且可另外存儲(chǔ)每一文件的預(yù)期散列結(jié)果。例如,通過在文件存在于計(jì)算設(shè)備上時(shí)計(jì)算該文件的散列結(jié)果并將計(jì)算得到的散列結(jié)果與清單中的結(jié)果進(jìn)行比較,來檢測文件中的破壞。
在一些實(shí)施例中,還可檢查清單的有效性以確保該包中的各文件的散列結(jié)果或該清單的其他部分尚未被破壞。這樣的檢查可以在存儲(chǔ)在清單中的各單獨(dú)文件的散列結(jié)果被用來測試這些文件之前執(zhí)行,以使得清單可以在用來測試凈荷文件之前被修復(fù)。對(duì)清單的檢查可以基于在安裝該組件時(shí)存儲(chǔ)在計(jì)算設(shè)備上的散列結(jié)果。例如,一些操作系統(tǒng)使用數(shù)據(jù)庫(可被稱為“注冊表”)來存儲(chǔ)關(guān)于安裝在計(jì)算設(shè)備上的軟件或硬件組件的信息。當(dāng)在安裝時(shí)對(duì)包進(jìn)行了確認(rèn)時(shí),例如,組件的安裝可將與該組件相關(guān)聯(lián)的每一清單的散列結(jié)果值寫入注冊表。這一散列結(jié)果值隨后可被用來標(biāo)識(shí)清單的任何破壞。
這樣的分開測試清單和凈荷文件的方法允許標(biāo)識(shí)該組件中需要修復(fù)的各部分并隨后從可信源獲取這些部分。雖然可以在計(jì)算設(shè)備上使用安全技術(shù)來維護(hù)安裝在計(jì)算設(shè)備上的該組件的備份副本的可信存儲(chǔ),但在一些實(shí)施例中,各組件的可信源可以是服務(wù)器或該計(jì)算設(shè)備外部的其他設(shè)備。在一些實(shí)施例中,用來修復(fù)計(jì)算設(shè)備上的遭破壞的文件的文件源可以是更新服務(wù)器,如帶有WINDOWS 操作系統(tǒng)的計(jì)算機(jī)中的WINDOWS UPDATE 服務(wù)器。
更新服務(wù)器常規(guī)上向計(jì)算機(jī)系統(tǒng)提供整個(gè)包以供下載。這些包可以很大并且利用計(jì)算機(jī)系統(tǒng)的可用帶寬的很大一部分。為了支持修復(fù)遭破壞的軟件組件,更新服務(wù)器可以允許計(jì)算設(shè)備將其下載限于修復(fù)遭破壞的組件所必需的文件,而非下載整個(gè)更新包。
所下載的文件可以是任何合適的形式。在一些實(shí)施例中,只下載修復(fù)所需的最小片段??捎糜谙螺d的最小單位可以是所修復(fù)的總體軟件環(huán)境的任何大小單位。所下載的最小單位可以是整個(gè)組件、單獨(dú)文件、或甚至是需要修復(fù)的文件的一部分。所下載的文件不必是任何特定格式的。在一些實(shí)施例中,文件可被編碼或加密。在其他實(shí)施例中,可不下載整個(gè)文件,而是只下載文件的一部分。
在一些實(shí)施例中,可能需要映射來將計(jì)算設(shè)備上的特定文件與可在外部服務(wù)器上訪問的內(nèi)容的特定單元進(jìn)行相關(guān)。例如,更新服務(wù)器可以將文件組織成組件,這些組件進(jìn)而被置于包中,這些包進(jìn)而按版本來組織??梢赃M(jìn)行所標(biāo)識(shí)的故障文件與更新服務(wù)器或其他可信源可提供的內(nèi)容的單元之間的映射,以確定包含用于修復(fù)計(jì)算設(shè)備上的遭破壞文件的文件的一個(gè)或多個(gè)適當(dāng)單元。這一映射可以在任何合適的位置執(zhí)行,包括在計(jì)算設(shè)備上、在外部服務(wù)器上、或部分在計(jì)算設(shè)備上且部分在外部服務(wù)器上。
圖1示出了可在其上實(shí)現(xiàn)本發(fā)明的合適的計(jì)算系統(tǒng)環(huán)境100的示例。計(jì)算系統(tǒng)環(huán)境100只是合適計(jì)算環(huán)境的一個(gè)示例,而非意在暗示對(duì)本發(fā)明使用范圍或功能有任何限制。也不應(yīng)該將計(jì)算環(huán)境100解釋為對(duì)示例性操作環(huán)境100中示出的任一組件或其組合有任何依賴性或要求。
本發(fā)明可用各種其他通用或?qū)S糜?jì)算系統(tǒng)環(huán)境或配置來操作。適合在本發(fā)明中使用的公知的計(jì)算系統(tǒng)、環(huán)境和/或配置的示例包括,但不限于,個(gè)人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、 手持或膝上型設(shè)備、平板計(jì)算機(jī)、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、機(jī)頂盒、可編程消費(fèi)電子產(chǎn)品、網(wǎng)絡(luò)PC、小型機(jī)、大型計(jì)算機(jī)、包含上述系統(tǒng)或設(shè)備中的任一個(gè)的分布式計(jì)算環(huán)±音絕視寸。
該計(jì)算環(huán)境可以執(zhí)行計(jì)算機(jī)可執(zhí)行指令,如程序模塊。一般而言,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等。本發(fā)明也可以在其中任務(wù)由通過通信網(wǎng)絡(luò)鏈接的遠(yuǎn)程處理設(shè)備執(zhí)行的分布式計(jì)算環(huán)境中實(shí)現(xiàn)。在分布式計(jì)算環(huán)境中,程序模塊可以位于包括存儲(chǔ)器存儲(chǔ)設(shè)備在內(nèi)的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì)中。
參考圖1,用于實(shí)現(xiàn)本發(fā)明的示例性系統(tǒng)包括計(jì)算機(jī)110形式的通用計(jì)算設(shè)備。計(jì)算機(jī)110是可選擇性地修復(fù)操作系統(tǒng)的各組件或計(jì)算設(shè)備上的其他軟件的計(jì)算設(shè)備的示例。計(jì)算機(jī)Iio的組件可包括,但不限于,處理單元120、系統(tǒng)存儲(chǔ)器130、以及將包括系統(tǒng)存儲(chǔ)器的各種系統(tǒng)組件耦合到處理單元120的系統(tǒng)總線121。系統(tǒng)總線121可以是若干類型的總線結(jié)構(gòu)中的任一種,包括使用各種總線體系結(jié)構(gòu)中的任一種的存儲(chǔ)器總線或存儲(chǔ)器控制器、外圍總線、以及局部總線。作為示例而非限制,這樣的體系結(jié)構(gòu)包括工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(ISA)總線、微通道體系結(jié)構(gòu)(MCA)總線、增強(qiáng)型ISA(EISA)總線、視頻電子標(biāo)準(zhǔn)協(xié)會(huì) (VESA)局部總線,以及也稱為夾層總線的外圍部件互連(PCI)總線。
計(jì)算機(jī)110通常包括各種計(jì)算機(jī)可讀介質(zhì)。計(jì)算機(jī)可讀介質(zhì)可以是能由計(jì)算機(jī) 110訪問的任何可用介質(zhì),而且包含易失性和非易失性介質(zhì)、可移動(dòng)和不可移動(dòng)介質(zhì)。作為示例而非限制,計(jì)算機(jī)可讀介質(zhì)可包括計(jì)算機(jī)存儲(chǔ)介質(zhì)和通信介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括以用于存儲(chǔ)諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)等信息的任何方法或技術(shù)實(shí)現(xiàn)的易失性和非易失性、可移動(dòng)和不可移動(dòng)介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括,但不限于, RAM、ROM、EEPR0M、閃存或其他存儲(chǔ)器技術(shù),CD-ROM、數(shù)字多功能盤(DVD)或其他光盤存儲(chǔ)設(shè)備,磁帶盒、磁帶、磁盤存儲(chǔ)設(shè)備或其他磁存儲(chǔ)設(shè)備,或者能用于存儲(chǔ)所需信息且可以由計(jì)算機(jī)110訪問的任何其他介質(zhì)。通信介質(zhì)通常以諸如載波或其他傳輸機(jī)制等已調(diào)制數(shù)據(jù)信號(hào)來體現(xiàn)計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù),并包括任意信息傳送介質(zhì)。術(shù)語“已調(diào)制數(shù)據(jù)信號(hào)”是指具有以在信號(hào)中編碼信息的方式被設(shè)定或改變其一個(gè)或多個(gè)特征的信號(hào)。作為示例而非限制,通信介質(zhì)包括諸如有線網(wǎng)絡(luò)或直接線連接之類的有線介質(zhì), 以及諸如聲學(xué)、RF、紅外及其他無線介質(zhì)之類的無線介質(zhì)。上述中任一組合也應(yīng)包括在計(jì)算機(jī)可讀介質(zhì)的范圍之內(nèi)。
系統(tǒng)存儲(chǔ)器130包括易失性和/或非易失性存儲(chǔ)器形式的計(jì)算機(jī)存儲(chǔ)介質(zhì),如只讀存儲(chǔ)器(ROM) 131和隨機(jī)存取存儲(chǔ)器(RAM) 132。包含諸如在啟動(dòng)期間幫助在計(jì)算機(jī)110內(nèi)的元件之間傳輸信息的基本例程的基本輸入/輸出系統(tǒng)133 ¢10 通常儲(chǔ)存儲(chǔ)在ROM 131 中。RAM 132通常包含處理單元120可立即訪問和/或目前正在操作的數(shù)據(jù)和/或程序模塊。作為示例而非限制,圖1示出操作系統(tǒng)134、應(yīng)用程序135、其他程序模塊136和程序數(shù)據(jù) 137。
計(jì)算機(jī)110也可以包括其他可移動(dòng)/不可移動(dòng)、易失性/非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)。僅作為示例,圖1示出了從不可移動(dòng)、非易失性磁介質(zhì)中讀取或向其寫入的硬盤驅(qū)動(dòng)器 140,從可移動(dòng)、非易失性磁盤152中讀取或向其寫入的磁盤驅(qū)動(dòng)器151,以及從諸如⑶ROM 或其他光學(xué)介質(zhì)等可移動(dòng)、非易失性光盤156中讀取或向其寫入的光盤驅(qū)動(dòng)器155??稍谑纠圆僮鳝h(huán)境中使用的其他可移動(dòng)/不可移動(dòng)、易失性/非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)包括但不限于,磁帶盒、閃存卡、數(shù)字多功能盤、數(shù)字錄像帶、固態(tài)RAM、固態(tài)ROM等。硬盤驅(qū)動(dòng)器 141通常由例如接口 140等不可移動(dòng)存儲(chǔ)器接口連接至系統(tǒng)總線121,而磁盤驅(qū)動(dòng)器151和光盤驅(qū)動(dòng)器155通常由例如接口 150等可移動(dòng)存儲(chǔ)器接口連接至系統(tǒng)總線121。
以上討論并在圖1中示出的驅(qū)動(dòng)器及其相關(guān)聯(lián)的計(jì)算機(jī)存儲(chǔ)介質(zhì)為計(jì)算機(jī)110提供了對(duì)計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其他數(shù)據(jù)的存儲(chǔ)。在圖1中,例如,硬盤驅(qū)動(dòng)器141被示為存儲(chǔ)操作系統(tǒng)144、應(yīng)用程序145、其他程序模塊146和程序數(shù)據(jù)147。注意, 這些組件可以與操作系統(tǒng)134、應(yīng)用程序135、其他程序模塊136和程序數(shù)據(jù)137相同或不同。在此操作系統(tǒng)144、應(yīng)用程序145、其他程序模塊146以及程序數(shù)據(jù)147被給予了不同的編號(hào),以說明至少它們是不同的副本。用戶101可以通過輸入設(shè)備,如鍵盤162和定點(diǎn)設(shè)備161(通常被稱為鼠標(biāo)、跟蹤球或觸摸墊)向計(jì)算機(jī)110輸入命令和信息。其他輸入設(shè)備 (未示出)可包括話筒、操縱桿、游戲手柄、圓盤式衛(wèi)星天線、掃描儀等。這些和其他輸入設(shè)備通常通過耦合至系統(tǒng)總線的用戶輸入接口 160連接至處理單元120,但也可以由其他接口和總線結(jié)構(gòu),例如并行端口、游戲端口或通用串行總線(USB)來連接。監(jiān)視器191或其他類型的顯示設(shè)備也通過諸如視頻接口 190之類的接口連接至系統(tǒng)總線121。除監(jiān)視器之外, 計(jì)算機(jī)還可以包括可以通過輸出外圍接口 195連接的諸如揚(yáng)聲器197和打印機(jī)196之類的其他外圍輸出設(shè)備。
計(jì)算機(jī)110可以使用到一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī)(如遠(yuǎn)程計(jì)算機(jī)180)的邏輯連接, 以在聯(lián)網(wǎng)環(huán)境中操作。遠(yuǎn)程計(jì)算機(jī)180可以是個(gè)人計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對(duì)等設(shè)備或其他常見網(wǎng)絡(luò)節(jié)點(diǎn)。遠(yuǎn)程計(jì)算節(jié)點(diǎn)180可以是更新服務(wù)器的示例。
遠(yuǎn)程計(jì)算機(jī)180可以通常包括相對(duì)于計(jì)算機(jī)110所描述的元件中的許多或全部, 但在圖1中僅示出了存儲(chǔ)器存儲(chǔ)設(shè)備181。圖1中所描繪的邏輯連接包括局域網(wǎng)(LAN) 171 和廣域網(wǎng)(WAN) 173,但還可包括其他網(wǎng)絡(luò)。這些聯(lián)網(wǎng)環(huán)境在辦公室、企業(yè)范圍計(jì)算機(jī)網(wǎng)絡(luò)、 內(nèi)聯(lián)網(wǎng)和因特網(wǎng)中是常見的。
當(dāng)用于LAN聯(lián)網(wǎng)環(huán)境中時(shí),計(jì)算機(jī)110通過網(wǎng)絡(luò)接口或適配器170連接到LAN 171。當(dāng)在WAN聯(lián)網(wǎng)環(huán)境中使用時(shí),計(jì)算機(jī)110通常包括調(diào)制解調(diào)器172或用于通過諸如因特網(wǎng)等WAN 173建立通信的其他手段。調(diào)制解調(diào)器172,可以是內(nèi)置的或外置的,可以經(jīng)由用戶輸入接口 160或其他適當(dāng)?shù)臋C(jī)制,連接到系統(tǒng)總線121。在聯(lián)網(wǎng)環(huán)境中,相對(duì)于計(jì)算機(jī) 110所描述的程序模塊或其部分可被存儲(chǔ)在遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中。作為示例而非限制, 圖1示出了遠(yuǎn)程應(yīng)用程序185駐留在存儲(chǔ)器設(shè)備181上。應(yīng)當(dāng)理解,所示的網(wǎng)絡(luò)連接是示例性的,并且可使用在計(jì)算機(jī)之間建立通信鏈路的其他手段。
圖2示出與本發(fā)明的一些實(shí)施例相關(guān)的計(jì)算機(jī)環(huán)境200的各部分。計(jì)算機(jī)系統(tǒng)210 具有用于執(zhí)行軟件的至少一個(gè)處理器214。如圖1所示,該軟件可包括操作系統(tǒng)(OS) 134、 應(yīng)用程序135、以及其他程序模塊136。但是,應(yīng)當(dāng)明白,在計(jì)算機(jī)系統(tǒng)210上執(zhí)行的軟件的類型或被修復(fù)的軟件的類型對(duì)本發(fā)明而言不是關(guān)鍵的。
處理器214連接到至少一個(gè)存儲(chǔ)設(shè)備220。這一存儲(chǔ)設(shè)備可以是諸如RAM132等易失性存儲(chǔ)器、諸如硬盤驅(qū)動(dòng)器或閃存等非易失性存儲(chǔ)器141、或非易失性和易失性存儲(chǔ)器的組合。該存儲(chǔ)設(shè)備存儲(chǔ)多個(gè)軟件組件240、250、260和270。每一軟件組件240、250、260和 270是各個(gè)彼此相關(guān)的單獨(dú)文件的集合。在此,“文件”可以是以預(yù)定義格式存儲(chǔ)在由文件管理組件(未示出)所分配的存儲(chǔ)器中的數(shù)字?jǐn)?shù)據(jù)的有組織的編組。但是,應(yīng)當(dāng)明白,“文件”可以是可被操縱的任何合適的數(shù)據(jù)集,并且這樣的“文件”的具體結(jié)構(gòu)對(duì)本發(fā)明而言不是關(guān)鍵的。在所示示例中,組件270包括凈荷文件272/274和元數(shù)據(jù)文件276,在一些實(shí)施例中元數(shù)據(jù)文件276被實(shí)現(xiàn)成組件的“清單”。凈荷文件是計(jì)算機(jī)系統(tǒng)210的處理器214在執(zhí)行組件270時(shí)所使用的文件。這些文件可包括可執(zhí)行文件,這些文件有時(shí)被格式化成動(dòng)態(tài)鏈接庫(DLL)。元數(shù)據(jù)文件276存儲(chǔ)關(guān)于凈荷文件的信息,如與組件270的各可執(zhí)行文件之間的依賴關(guān)系有關(guān)的細(xì)節(jié)。例如,如果凈荷272依賴于凈荷274,則這將被顯式地記錄在元數(shù)據(jù)文件276中。本發(fā)明不限于上述文件類型。可以支持任何合適格式的文件并且文件的格式可依賴于被修復(fù)的組件。元數(shù)據(jù)文件276還存儲(chǔ)允許測試凈荷文件是否遭破壞的信息。在所示實(shí)施例中, 該信息是散列函數(shù)2 的一個(gè)或多個(gè)散列鍵278的形式,它也被存儲(chǔ)在存儲(chǔ)設(shè)備220上。散列鍵278是對(duì)凈荷274的未遭破壞的版本運(yùn)算散列函數(shù)2 所得到的結(jié)果。散列函數(shù)2 是可被應(yīng)用于文件來生成散列結(jié)果的計(jì)算機(jī)可執(zhí)行組件。這一散列函數(shù)2 優(yōu)選地是密碼地安全的,但無需如此限制。如果散列函數(shù)2 是對(duì)凈荷274的遭破壞的版本執(zhí)行的,則得自該散列函數(shù)的值將與所存儲(chǔ)的散列鍵278不同。這一差異擔(dān)當(dāng)凈荷文件274在某些方面已經(jīng)改變——并且潛在地是以對(duì)計(jì)算機(jī)系統(tǒng)210有害的方式被改變的——的清楚指示。元數(shù)據(jù)文件276本身也可被破壞。因此,將散列鍵232存儲(chǔ)在系統(tǒng)上的其他位置是有用的。用于存儲(chǔ)元數(shù)據(jù)文件276的散列鍵232的合適位置的示例是注冊表230中。但是,應(yīng)當(dāng)明白,圖2只表示允許標(biāo)識(shí)遭破壞的文件的信息的安排的一個(gè)示例。在一些實(shí)施例中,將元數(shù)據(jù)包括在凈荷文件274中使得無需單獨(dú)的元數(shù)據(jù)文件276是可能的。 在這種情況下,散列鍵278可與元數(shù)據(jù)的其余部分一起被包括在凈荷文件274中。存儲(chǔ)設(shè)備220還存儲(chǔ)組件修復(fù)服務(wù)222。這也是優(yōu)選地作為OS 134的一部分的軟件,但也可以是單獨(dú)的應(yīng)用程序135。將結(jié)合圖3來討論組件修復(fù)服務(wù)222的操作,圖3詳細(xì)描述了修復(fù)遭破壞的軟件組件的方法的實(shí)施例??梢杂萌舾刹煌绞街械娜魏我环N方式來啟動(dòng)302組件修復(fù)服務(wù)222。在一些實(shí)施例中,由手動(dòng)地運(yùn)行組件修復(fù)服務(wù)222的用戶101來啟動(dòng)它。在另一實(shí)施例中,組件修復(fù)服務(wù)222可以由諸如反病毒程序2 等系統(tǒng)健康檢查程序響應(yīng)于檢測到潛在破壞來激活。 在又一實(shí)施例中,組件修復(fù)服務(wù)222可由于軟件更新服務(wù)2M中的故障而執(zhí)行。如上所述, 在一些情況下,軟件組件270在遭破壞的情況下不能正確地更新到新版本。因此,遭破壞的組件270可由組件修復(fù)服務(wù)222在軟件更新服務(wù)2M完成更新之前修復(fù)。應(yīng)當(dāng)明白,更新只是其中可以執(zhí)行對(duì)遭破壞的組件的修復(fù)的場景的一個(gè)示例。其他場景的示例包括軟件子系統(tǒng)請(qǐng)求驗(yàn)證。在一些實(shí)施例中,可基于來自系統(tǒng)健康檢查程序的標(biāo)識(shí)了潛在破壞的指示來執(zhí)行破壞修復(fù)。其他實(shí)施例可以選擇基于遭破壞的軟件未正確工作并致使系統(tǒng)的完整性受損的任何指示來修復(fù)該軟件。如本文所描述的,修復(fù)服務(wù)222和更新服務(wù)2M是分開的組件。然而,在一些實(shí)施例中,修復(fù)服務(wù)222可以是更新服務(wù)224的一部分。這樣的實(shí)施例可依賴于用于訪問外部更新服務(wù)并掛起對(duì)軟件組件的訪問的現(xiàn)有特征和由修復(fù)服務(wù)和更新服務(wù)類似地執(zhí)行的任何其他操作。
不管觸發(fā)組件修復(fù)服務(wù)222的操作的事件的類型如何,一旦在動(dòng)作302處啟動(dòng)了組件修復(fù)服務(wù)222,它就將在動(dòng)作304檢測遭破壞的組件。這可使用散列函數(shù)2 來實(shí)現(xiàn), 如在圖6中更詳細(xì)地示出的。圖6中的過程在602處通過執(zhí)行組件修復(fù)服務(wù)222來啟動(dòng)。 作為所示過程的一部分,在動(dòng)作604處,組件修復(fù)服務(wù)222對(duì)作為正在測試的組件270的一部分的文件274運(yùn)行散列函數(shù)2 該文件可表示凈荷文件274、清單文件276、或任何其他合適的文件。隨后在動(dòng)作606處,文件包含清單276或鍵278以及凈荷文件274的情況下, 將從對(duì)文件運(yùn)算散列函數(shù)所得到的散列值與所存儲(chǔ)的散列鍵232進(jìn)行比較。如果所生成的散列值不匹配所存儲(chǔ)的散列鍵278,則該文件與原始安裝的文件不同,這指示文件破壞。
在動(dòng)作608處,組件修復(fù)服務(wù)222檢查是否還有文件要評(píng)估。如果還有文件要評(píng)估,則循環(huán)以重復(fù)在604處對(duì)下一文件進(jìn)行散列并在606處將散列值與散列鍵進(jìn)行比較的過程。如果沒有其它文件要檢查,則組件修復(fù)服務(wù)222將在動(dòng)作610處結(jié)束對(duì)遭破壞的組件的檢測。
是否還有文件要評(píng)估可以用任何合適的方式來確定,并且可取決于什么事件觸發(fā)了組件修復(fù)服務(wù)222的操作。在一些實(shí)施例中,將檢查計(jì)算機(jī)系統(tǒng)210的每一組件M0、 250,260和270來確定是否遭破壞。在其他實(shí)施例中,只測試所選的一組組件。例如,如果諸如反病毒程序2 等系統(tǒng)健康檢查程序指示特定組件可能遭破壞,則在動(dòng)作304對(duì)遭破壞組件的檢測可以只對(duì)加標(biāo)志的組件運(yùn)行,使得只有這些組件的文件才在圖6的過程中被評(píng)估。
不管在圖6的過程中評(píng)估了哪些文件,這些評(píng)估的結(jié)果可被用于圖3的過程中。在動(dòng)作306,組件修復(fù)服務(wù)222確定需要修復(fù)的遭破壞文件的集合。在此時(shí)才確定在動(dòng)作304 被檢測為遭破壞的組件和文件中的哪一些應(yīng)被修復(fù)。
在動(dòng)作308處,組件修復(fù)服務(wù)222定位將由計(jì)算機(jī)系統(tǒng)210用來修理遭破壞的文件的修復(fù)文件的集合四4、296和四8。例如,可以在外部服務(wù)器280上定位這些文件。圖5 示出這一動(dòng)作的一個(gè)可能實(shí)施例。
該例程在動(dòng)作502處在組件修復(fù)服務(wù)222啟動(dòng)圖3的動(dòng)作308時(shí)開始。在動(dòng)作504 處,將遭破壞的組件270映射到包四2。這一映射可以允許標(biāo)識(shí)組件或組件的各單獨(dú)文件的適當(dāng)副本,尤其是在修復(fù)文件四4、296和四8的源將軟件組織成與組件修復(fù)服務(wù)222用來標(biāo)識(shí)遭破壞的組件所使用的格式所不同的格式時(shí)。例如,外部服務(wù)器280可以將各組文件存儲(chǔ)在各個(gè)包中。同樣,可以存在用于同一組件的多個(gè)版本的軟件,對(duì)應(yīng)于被修復(fù)的OS的不同版本或該組件本身的不同版本。不管外部服務(wù)器上的軟件的具體組織如何,該映射可標(biāo)識(shí)可以被下載的軟件的適當(dāng)單位。在所示示例中,軟件的該單位是包。軟件單位可另選地是單獨(dú)文件或組件。
一旦確定了包四2,這些包必須位于外部服務(wù)器280上,這在動(dòng)作506中實(shí)現(xiàn)。位置可以由反映包存儲(chǔ)四0內(nèi)的位置的統(tǒng)一資源定位符(URL)或某一其他形式的數(shù)據(jù)來表示。一旦確定了位置,動(dòng)作308在動(dòng)作508處終止。
如果要獲得多個(gè)文件,則可以對(duì)每一這樣的文件重復(fù)圖5的過程。如圖3所示,隨后使用所確定的一個(gè)或多個(gè)位置。在動(dòng)作310處,組件修復(fù)服務(wù)222使用所確定的所有必需的修復(fù)文件四4、四6和298的一個(gè)或多個(gè)位置,以下載修復(fù)文件,如文件四4、296和298 (圖 2)。在一些實(shí)施例中,計(jì)算機(jī)系統(tǒng)210使用網(wǎng)絡(luò)適配器212來與外部服務(wù)器280進(jìn)行通信, 外部服務(wù)器280也通過網(wǎng)絡(luò)適配器282進(jìn)行通信。如本領(lǐng)域公知的,網(wǎng)絡(luò)適配器可用于這一目的。然而,存在將計(jì)算機(jī)系統(tǒng)210連接到外部服務(wù)器觀0的許多方式。它可以是直接連接、局域網(wǎng)、廣域網(wǎng)、因特網(wǎng)、或內(nèi)聯(lián)網(wǎng)。本領(lǐng)域普通技術(shù)人員將理解,可以使用任何合適的連接來將計(jì)算機(jī)系統(tǒng)210連接到外部服務(wù)器觀0。此外,應(yīng)當(dāng)明白,文件不必從外部服務(wù)器獲得。文件也可從對(duì)等網(wǎng)絡(luò)源獲得。該源也不必被限于外部源。在一些實(shí)施例中,修復(fù)文件的本地存儲(chǔ)可被存儲(chǔ)在計(jì)算機(jī)系統(tǒng)210上。當(dāng)計(jì)算機(jī)系統(tǒng)210在動(dòng)作310接收到修復(fù)文件四4、296和四8時(shí),在動(dòng)作312,組件修復(fù)服務(wù)222可任選地確認(rèn)修復(fù)文件四4-四8。這一確認(rèn)過程可依賴于在動(dòng)作304被用于檢測遭破壞的組件的相同密碼地安全的散列函數(shù)2 和散列鍵278。然而,使用與散列函數(shù)2 無關(guān)的確認(rèn)過程是可能的,并且可以使用任何合適的確認(rèn)技術(shù),如伴隨修復(fù)文件的證書或簽名。此外,可以對(duì)不同的文件或不同的文件類型使用不同的確認(rèn)技術(shù)。例如,清單 276可以與凈荷文件274不同地確認(rèn)。如果確認(rèn)動(dòng)作使用相同的散列函數(shù)228,則該過程非常類似于圖6中示出的過程。 散列函數(shù)2 對(duì)每一接收到的文件進(jìn)行散列,并且所得的值與所存儲(chǔ)的散列鍵278進(jìn)行比較。如果散列函數(shù)2 所返回的值與散列鍵278匹配,則假定修復(fù)文件298是有效的。圖3中示出的過程的最終動(dòng)作314是修復(fù)遭破壞的組件。在一些實(shí)施例中,這可通過刪除遭破壞的文件274并用修復(fù)文件298替換它們以蓋寫遭破壞的文件274來實(shí)現(xiàn)。更復(fù)雜的修復(fù)過程也是可能的,如從修復(fù)文件298選擇特定信息來修復(fù)遭破壞的文件274的特定部分。不管所使用的具體修復(fù)過程如何,可對(duì)在動(dòng)作308被確定為需要修復(fù)的每一文件執(zhí)行該過程。但是,在一些實(shí)施例中,可以標(biāo)識(shí)不同類型的文件或不同類型的錯(cuò)誤,并且給予不同的修復(fù)優(yōu)先級(jí),使得并非所有遭破壞的文件必須被一次修復(fù)。一旦在動(dòng)作314修復(fù)了需要修復(fù)的所有文件,則在動(dòng)作316處,組件修復(fù)服務(wù)222軟件停止執(zhí)行。所描述的各實(shí)施例標(biāo)識(shí)并修復(fù)與遭破壞的組件相關(guān)聯(lián)的各單獨(dú)的遭破壞的文件。 盡管這樣的方法可以允許快速執(zhí)行修復(fù)同時(shí)消耗相對(duì)小量的網(wǎng)絡(luò)帶寬,但不要求在文件級(jí)對(duì)組件進(jìn)行修復(fù)。軟件的任何合適的單位可被標(biāo)識(shí)為遭破壞的并被修復(fù)。在一些實(shí)施例中, 只下載修復(fù)所需的最小片段??捎糜谙螺d的最小單位可以是所修復(fù)的總體軟件環(huán)境的任何大小單位。所下載的最小單位可以是整個(gè)組件、單獨(dú)文件、或甚至是需要修復(fù)的文件的一部分。在一些實(shí)施例中,可不必下載整個(gè)文件,而是改為只下載文件的一部分。此外,各實(shí)施例描述了被修復(fù)的操作系統(tǒng)。應(yīng)當(dāng)明白,可以使用本文描述的技術(shù)來更新任何軟件(包括應(yīng)用程序)。在本發(fā)明的又一實(shí)施例中,組件修復(fù)服務(wù)222可以結(jié)合軟件更新服務(wù)2M來使用以提供帶有最小用戶交互的無縫軟件更新。圖4中示出了這一方法的一實(shí)施例。軟件更新服務(wù)2 可以用任何合適的方式來啟動(dòng)402。例如,它可以自動(dòng)啟動(dòng)、基于定時(shí)時(shí)間表或在更新可用時(shí)啟動(dòng),或它可由計(jì)算機(jī)系統(tǒng)210的用戶101手動(dòng)啟動(dòng)。在動(dòng)作404,軟件更新服務(wù)2M隨后接收更新特定軟件的請(qǐng)求。該請(qǐng)求可來自用戶 101、來自O(shè)S 134、來自應(yīng)用程序135、來自其他程序模塊136、或可能來自外部源,如提供關(guān)于可用更新的信息的外部更新服務(wù)。在動(dòng)作406處,軟件更新服務(wù)2M確定要更新哪些組件。對(duì)軟件進(jìn)行更新的請(qǐng)求可以指定應(yīng)當(dāng)更新的特定組件270。或者,可具有用于確定要更新哪一組件的一組規(guī)則。例如,該請(qǐng)求可以指示應(yīng)當(dāng)對(duì)最近未被更新的所有組件執(zhí)行更新。 在另一實(shí)施例中,軟件更新服務(wù)2M可以檢查計(jì)算機(jī)系統(tǒng)210的所有組件上的更新并更新具有可用更新的組件。因此,觸發(fā)一更新的具體事件以及所更新的具體組件對(duì)本發(fā)明而言不是關(guān)鍵的。
一旦在動(dòng)作406確定了要更新的組件,則軟件更新服務(wù)2 將選擇組件270之一并在動(dòng)作300修復(fù)遭破壞的文件。這一動(dòng)作可以與結(jié)合圖3詳細(xì)描述的組件修復(fù)服務(wù)222 過程相同。這一過程可由組件修復(fù)服務(wù)222來執(zhí)行。如果被更新的組件遭破壞,則它必須首先被組件修復(fù)服務(wù)222修復(fù)。
在被修復(fù)之后,組件270不再是遭破壞的,并且在動(dòng)作412處組件270可被正確地卸載。卸載該組件可包括更新注冊表230、改變和/或刪除與該組件相關(guān)聯(lián)的文件272-276、 以及其他管理任務(wù)。在動(dòng)作414處,從外部服務(wù)器280下載該組件的經(jīng)更新版本。這些組件可以是位于包存儲(chǔ)單元四0中的包的一部分。在動(dòng)作416處,隨后安裝經(jīng)更新的組件。
如果還有組件需要更新,如在動(dòng)作418處所確定的,則軟件更新服務(wù)2 將返回動(dòng)作408,選擇要更新的下一組件并對(duì)每一其余的組件重復(fù)更新過程。一旦更新了被確定為需要更新的所有組件,軟件更新服務(wù)222在動(dòng)作420處終止。
注意,圖4中的各動(dòng)作的次序不限于本文所呈現(xiàn)的次序。例如,在動(dòng)作414下載經(jīng)更新的組件可以發(fā)生在該過程中的任何先前時(shí)間點(diǎn)處。此外,該過程中的動(dòng)作可以同時(shí)執(zhí)行。例如,在動(dòng)作414中組件的下載可以在動(dòng)作300中修復(fù)遭破壞的組件時(shí)發(fā)生。同樣,在移動(dòng)到下一組件之前,每一組件不必完全更新。相反,所有動(dòng)作可以對(duì)由軟件更新服務(wù)2M 更新的每一組件同時(shí)執(zhí)行。
在又一實(shí)施例中,對(duì)遭破壞的文件的修復(fù)可以串接。例如,如果元數(shù)據(jù)文件276遭破壞,則不能依賴它來提供有效的散列鍵278來檢測凈荷文件274中的破壞。因此,元數(shù)據(jù)文件276必須首先被修復(fù)。一旦修復(fù)了它,則組件修復(fù)服務(wù)222可以使用散列鍵278來檢查凈荷274是否遭破壞并完成凈荷274的修復(fù)過程。
在上述實(shí)施例中,當(dāng)前執(zhí)行的OS的組件240、250、260和270被修復(fù)。在這樣的實(shí)施例中,對(duì)正被修復(fù)或更新的任何組件的訪問可被阻塞。臨時(shí)阻止對(duì)其訪問的任何組件因而可被更新,即使在OS正在使用中時(shí)。然而,在一替換實(shí)施例中,正在執(zhí)行的OS可以修復(fù)當(dāng)前沒有被計(jì)算機(jī)系統(tǒng)執(zhí)行的分開的OS的鏡像的各組件。這可以通過允許當(dāng)前執(zhí)行的OS 將它的組件修復(fù)服務(wù)用于存儲(chǔ)在存儲(chǔ)設(shè)備210或某一其他外部或可移動(dòng)存儲(chǔ)介質(zhì)中的OS 鏡像中的文件上來實(shí)現(xiàn)。
至此描述了本發(fā)明的至少一個(gè)實(shí)施例的若干方面,可以理解,本領(lǐng)域的技術(shù)人員可容易地想到各種更改、修改和改進(jìn)。這樣的更改、修改和改進(jìn)旨在是本發(fā)明的一部分,且旨在處于本發(fā)明的精神和范圍內(nèi)。從而,上述描述和附圖僅用作示例。
可以多種方式中的任一種來實(shí)現(xiàn)本發(fā)明的上述實(shí)施例。例如,可使用硬件、軟件或其組合來實(shí)現(xiàn)各實(shí)施例。當(dāng)使用軟件實(shí)現(xiàn)時(shí),該軟件代碼可在無論是在單個(gè)計(jì)算機(jī)中提供的還是在多個(gè)計(jì)算機(jī)之間分布的任何合適的處理器或處理器集合上執(zhí)行。該處理器可被實(shí)現(xiàn)為集成電路,集成電路組件中具有一個(gè)或多個(gè)處理器。然而,可使用電路按照任何適合的方式來實(shí)現(xiàn)處理器。此外,應(yīng)當(dāng)理解,計(jì)算機(jī)可以用多種形式中的任一種來具體化,如機(jī)架式計(jì)算機(jī)、 臺(tái)式計(jì)算機(jī)、膝上型計(jì)算機(jī)、或平板計(jì)算機(jī)。此外,計(jì)算機(jī)可以具體化在通常不被認(rèn)為是計(jì)算機(jī)但具有合適的處理能力的設(shè)備中,包括個(gè)人數(shù)字助理(PDA)、智能電話、或任何其他適合的便攜式或固定電子設(shè)備。同樣,計(jì)算機(jī)可以具有一個(gè)或多個(gè)輸入和輸出設(shè)備。這些設(shè)備主要可用于呈現(xiàn)用戶界面。可用于提供用戶界面的輸出設(shè)備的示例包括用于可視地呈現(xiàn)輸出的打印機(jī)或顯示屏和用于可聽地呈現(xiàn)輸出的揚(yáng)聲器或其他聲音生成設(shè)備。可用于用戶界面的輸入設(shè)備的示例包括鍵盤和諸如鼠標(biāo)、觸摸板和數(shù)字化輸入板等定點(diǎn)設(shè)備。作為另一示例,計(jì)算機(jī)可以通過語音識(shí)別或以其他可聽格式來接收輸入信息。這些計(jì)算機(jī)可以通過任何合適形式的一個(gè)或多個(gè)網(wǎng)絡(luò)來互連,包括作為局域網(wǎng)或廣域網(wǎng),如企業(yè)網(wǎng)絡(luò)或因特網(wǎng)。這些網(wǎng)絡(luò)可以基于任何合適的技術(shù)并可以根據(jù)任何合適的協(xié)議來操作,并且可以包括無線網(wǎng)絡(luò)、有線網(wǎng)絡(luò)或光纖網(wǎng)絡(luò)。而且,此處略述的各種方法或過程可被編碼為可在采用各種操作系統(tǒng)或平臺(tái)中任何一種的一個(gè)或多個(gè)處理器上執(zhí)行的軟件。此外,這樣的軟件可使用多種合適的程序設(shè)計(jì)語言和/或程序設(shè)計(jì)或腳本工具中的任何一種來編寫,而且它們還可被編譯為可執(zhí)行機(jī)器語言代碼或在框架或虛擬機(jī)上執(zhí)行的中間代碼。就此,本發(fā)明可被具體化為用一個(gè)或多個(gè)程序編碼的一個(gè)計(jì)算機(jī)可讀介質(zhì)(或多個(gè)計(jì)算機(jī)可讀介質(zhì))(例如,計(jì)算機(jī)存儲(chǔ)器、一個(gè)或多個(gè)軟盤、緊致盤(CD)、光盤、數(shù)字視頻盤(DVD)、磁帶、閃存、現(xiàn)場可編程門陣列或其他半導(dǎo)體器件中的電路配置、或其他非瞬態(tài)的有形計(jì)算機(jī)存儲(chǔ)介質(zhì)),當(dāng)這些程序在一個(gè)或多個(gè)計(jì)算機(jī)或其他處理器上執(zhí)行時(shí),它們執(zhí)行實(shí)現(xiàn)本發(fā)明的上述各個(gè)實(shí)施例的方法。這一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)可以是便攜的,使得其上存儲(chǔ)的一個(gè)或多個(gè)程序可被加載到一個(gè)或多個(gè)不同的計(jì)算機(jī)或其他處理器上以便實(shí)現(xiàn)本發(fā)明上述的各個(gè)方面。如此處所使用的,術(shù)語“非瞬態(tài)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)”只包含可被認(rèn)為是產(chǎn)品(即,制品)或機(jī)器的計(jì)算機(jī)可讀介質(zhì)。此處以一般的意義使用術(shù)語“程序”或“軟件”來指可被用來對(duì)計(jì)算機(jī)或其他處理器編程以實(shí)現(xiàn)本發(fā)明上述的各個(gè)方面的任何類型的計(jì)算機(jī)代碼或計(jì)算機(jī)可執(zhí)行指令集。另外,應(yīng)當(dāng)理解,根據(jù)本實(shí)施例的一個(gè)方面,當(dāng)被執(zhí)行時(shí)實(shí)現(xiàn)本發(fā)明的方法的一個(gè)或多個(gè)計(jì)算機(jī)程序不必駐留在單個(gè)計(jì)算機(jī)或處理器上,而是可以按模塊化的方式分布在多個(gè)不同的計(jì)算機(jī)或處理器之間以實(shí)現(xiàn)本發(fā)明的各方面。計(jì)算機(jī)可執(zhí)行指令可以具有可由一個(gè)或多個(gè)計(jì)算機(jī)或其他設(shè)備執(zhí)行的各種形式, 諸如程序模塊。一般而言,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等。通常,程序模塊的功能可以按需在多個(gè)實(shí)施例中進(jìn)行組合或分布。而且,數(shù)據(jù)結(jié)構(gòu)能以任何適合的形式存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上。為簡化說明,數(shù)據(jù)結(jié)構(gòu)可被示為具有通過該數(shù)據(jù)結(jié)構(gòu)中的位置而相關(guān)的字段。這些關(guān)系同樣可以通過對(duì)各字段的存儲(chǔ)分配傳達(dá)各字段之間的關(guān)系的計(jì)算機(jī)可讀介質(zhì)中的位置來得到。然而,可以使用任何適合的機(jī)制在數(shù)據(jù)結(jié)構(gòu)的各字段中的信息之間建立關(guān)系,包括通過使用指針、標(biāo)簽、或在數(shù)據(jù)元素之間建立關(guān)系的其他機(jī)制。
本發(fā)明的各個(gè)方面可單獨(dú)、組合或以未在前述實(shí)施例中特別討論的各種安排來使用,從而并不將其應(yīng)用限于前述描述中所述或附圖形中所示的組件的細(xì)節(jié)和安排。例如,可使用任何方式將一個(gè)實(shí)施例中描述的各方面與其他實(shí)施例中描述的各方面組合。
同樣,本發(fā)明可被具體化為方法,其示例已經(jīng)提供。作為該方法的一部分所執(zhí)行的動(dòng)作可以按任何適合的方式來排序。因此,可以構(gòu)建各個(gè)實(shí)施例,其中各動(dòng)作以與所示的次序所不同的次序執(zhí)行,不同的次序可包括同時(shí)執(zhí)行某些動(dòng)作,即使這些動(dòng)作在各說明性實(shí)施例中被示為順序動(dòng)作。
在權(quán)利要求書中使用諸如“第一”、“第二”、“第三”等序數(shù)詞來修飾權(quán)利要求元素本身并不意味著一個(gè)權(quán)利要求元素較之另一個(gè)權(quán)利要求元素的優(yōu)先級(jí)、先后次序或順序、 或者方法的各動(dòng)作執(zhí)行的時(shí)間順序,而僅用作將具有某一名字的一個(gè)權(quán)利要求元素與(若不是使用序數(shù)詞則)具有同一名字的另一元素區(qū)分開的標(biāo)簽以區(qū)分各權(quán)利要求元素。
同樣,此處所使用的短語和術(shù)語是出于描述的目的而不應(yīng)被認(rèn)為是限制。此處對(duì) “包括”、“包含”、或“具有”、“含有”、“涉及“及其變型的使用旨在包括其后所列的項(xiàng)目及其等效方案以及其他項(xiàng)目。
權(quán)利要求
1.一種用于修復(fù)計(jì)算機(jī)系統(tǒng)的軟件的方法,所述方法包括 使用至少一個(gè)計(jì)算設(shè)備檢測軟件的遭破壞的組件,所述遭破壞的組件包括多個(gè)文件; 確定從所述多個(gè)文件選擇的一組遭破壞的文件,該組遭破壞的文件需要修復(fù)以修理所述遭破壞的組件;獲取一組修復(fù)文件,該組修復(fù)文件對(duì)應(yīng)于所述一組遭破壞的文件;以及修復(fù)所述至少一個(gè)遭破壞的組件。
2.如權(quán)利要求1所述的方法,其特征在于,還包括使用密碼地安全的散列鍵來確認(rèn)所述一組修復(fù)文件中的每一單獨(dú)的修復(fù)文件。
3.如權(quán)利要求1所述的方法,其特征在于,還包括在外部服務(wù)器上定位(308)所述一組修復(fù)文件,其中定位所述一組修復(fù)文件包括將所述遭破壞的組件映射到包;以及將所述包映射到所述外部服務(wù)器上的位置。
4.如權(quán)利要求1所述的方法,其特征在于,檢測所述遭破壞的組件是通過從系統(tǒng)健康檢查程序組件接收到的通知來觸發(fā)的,所述通知指示所述遭破壞的組件是遭破壞的。
5.如權(quán)利要求1所述的方法,其特征在于,獲取一組修復(fù)文件包括從所述計(jì)算機(jī)系統(tǒng)本地的存儲(chǔ)中讀取或從對(duì)等網(wǎng)絡(luò)源中獲取。
6.一種用于更新安裝在計(jì)算設(shè)備上的一個(gè)或多個(gè)遭破壞的軟件組件的系統(tǒng),所述系統(tǒng)包括處理器;在所述處理器上執(zhí)行的軟件更新服務(wù),所述軟件更新服務(wù)被編程成 接收更新請(qǐng)求;確定要更新的一個(gè)或多個(gè)遭破壞的軟件組件;選擇要更新的第一組件,所述第一組件是從所確定的要更新的一個(gè)或多個(gè)組件中選擇的;在所述處理器上執(zhí)行的組件修復(fù)服務(wù),所述組件修復(fù)服務(wù)被編程成檢測所述第一組件是遭破壞的,所述第一組件包括多個(gè)文件;確定所述多個(gè)文件中的一組遭破壞的文件;下載與所述一組遭破壞的文件相對(duì)應(yīng)的一組修復(fù)文件;使用所述修復(fù)文件來修復(fù)所述第一組件;所述軟件更新服務(wù)還被編程成卸載經(jīng)修復(fù)的第一組件;下載所述第一組件的經(jīng)更新版本;以及安裝所述第一組件的經(jīng)更新版本。
7.如權(quán)利要求6所述的系統(tǒng),其特征在于,所述組件修復(fù)服務(wù)還被編程成使用密碼地安全的散列鍵來確認(rèn)所述一組修復(fù)文件中的每一修復(fù)文件。
8.如權(quán)利要求6所述的系統(tǒng),其特征在于,所述組件修復(fù)服務(wù)還被編程成在所述外部服務(wù)器上定位所述一組修復(fù)文件,其中定位(308)所述一組修復(fù)文件包括將所述遭破壞的組件映射到包;以及將所述包映射到所述外部服務(wù)器上的位置。
9.如權(quán)利要求6所述的系統(tǒng),其特征在于,所述組件修復(fù)服務(wù)是通過從所述軟件更新服務(wù)接收到的出錯(cuò)消息來啟動(dòng)的。
10.如權(quán)利要求6所述的系統(tǒng),其特征在于,所述軟件更新服務(wù)還被編程成 檢查所有遭破壞的軟件組件是否已被更新;以及響應(yīng)于確定所述遭破壞的軟件組件中的一個(gè)或多個(gè)尚未被更新,選擇要更新的第二組
全文摘要
本發(fā)明涉及修復(fù)遭破壞的軟件。用于修復(fù)計(jì)算機(jī)系統(tǒng)的遭破壞的軟件組件的系統(tǒng)和方法。利用自動(dòng)化組件修復(fù)服務(wù)來檢測并修復(fù)遭破壞的軟件。從外部存儲(chǔ)位置下載修復(fù)文件并將其用來修復(fù)破壞。所下載的文件優(yōu)選地是修復(fù)所標(biāo)識(shí)的破壞所必需的最小數(shù)據(jù)量。修復(fù)遭破壞的文件的過程結(jié)合軟件更新服務(wù)來使用,通過允許修復(fù)并隨后卸載遭破壞的組件以使得經(jīng)更新的組件可被正確安裝來解決在更新遭破壞的軟件時(shí)發(fā)生的問題。
文檔編號(hào)G06F11/14GK102521081SQ201110405228
公開日2012年6月27日 申請(qǐng)日期2011年11月30日 優(yōu)先權(quán)日2010年12月1日
發(fā)明者A·B·巴克, A·米什拉, C·基恩, D·里瓦特, M·戴, M·費(fèi), R·西格瓦爾德 申請(qǐng)人:微軟公司