專利名稱:網(wǎng)絡外圍設備的外圍設備驅(qū)動程序維護方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及網(wǎng)絡計算機系統(tǒng)。本發(fā)明尤其涉及在客戶機共享外圍設備(如打印機、掃描儀、多功能外圍設備等)的網(wǎng)絡環(huán)境中管理連網(wǎng)的外圍設備客戶的方法和計算機系統(tǒng)機制。網(wǎng)絡客戶依靠本地加載到客戶機的驅(qū)動程序和有關(guān)的驅(qū)動程序組件與共享的外圍設備通訊。
背景技術(shù):
在包括在網(wǎng)絡上互相連結(jié)的多個分別的用戶/計算機從企業(yè)中利用打印機及其它外圍設備的流行和經(jīng)濟的方法,是在多個分別的用戶/計算機之中共享連網(wǎng)的外圍設備。不是對每臺客戶機提供專用的外圍設備,網(wǎng)絡提供連網(wǎng)客戶機和服務器的特有的機器間通訊的能力,以在許多用戶中共享的外圍設備。那樣的共享通常改善了外圍設備的利用程度并降低了為連網(wǎng)的用戶提供設備服務的開銷。
由多個連網(wǎng)客戶共享外圍設備給出為每個客戶提供對多個外圍設備的范例(如打印機)的訪問的機會,且客戶通過驅(qū)動程序與支持各種外圍設備的服務器通訊。外圍設備驅(qū)動程序通常包括組合起來提供完整驅(qū)動程序的多個組件(如文件或文件的組合,也稱為“部件(assembly)”)。驅(qū)動程序支持為外圍設備連結(jié),在客戶與服務器之間交互的各種方面。
在包括由數(shù)以百計的用戶共享的多個外圍設備的大型網(wǎng)絡中,管理外圍設備驅(qū)動程序包括在客戶機上查找,存儲,安裝(激活),和更新驅(qū)動程序。在那樣的環(huán)境中,驅(qū)動程序的管理由管理員具體地走到每臺客戶機并具體地加載新的驅(qū)動程序,這不是容易實現(xiàn)的。以前在眾知的“定位打印(point-and-print)”的打印機驅(qū)動程序管理布局中,打印機驅(qū)動程序在“一個文件接著文件”的基礎上從源傳送到目標客戶機。那樣的更新機制引出一系列問題,包括對給定設備安裝不完整的軟件包;在文件更新期間不能對特定的外圍設備保留合適的驅(qū)動程序文件的版本;在加載到外圍設備服務器和客戶的驅(qū)動程序之間通常不能保持一致性/兼容性。
當外圍設備在客戶/服務器連網(wǎng)的外圍設備環(huán)境中使用時,外圍設備驅(qū)動程序的不匹配是一個問題。在運行同一版本驅(qū)動程序時,客戶和服務器操作得最好。然而,若一個客戶只能同時運行一個驅(qū)動程序版本,當客戶與運行同一驅(qū)動程序的不同版本的兩個服務器交互時,會引起驅(qū)動程序的不匹配。當在客戶機上安裝設備驅(qū)動程序時,只有具有同一名字的一個版本的驅(qū)動程序文件被安裝在客戶機上。在文件名在兩個不同驅(qū)動程序版本之間交疊的情況,客戶機/用戶只存儲兩個同名文件之一(如文件版本帶有更當前的文件創(chuàng)建日期)。結(jié)果,完全的客戶-服務器驅(qū)動程序的兼容性只能對客戶具有外圍設備連結(jié)的,運行不同驅(qū)動程序版本的,多個活動的服務器中的一個得到保證。這對于執(zhí)行一個設備驅(qū)動程序版本,它的一個或多個組件的版本已被活動的驅(qū)動程序目錄中其它驅(qū)動程序組件版本替代,的外圍設備服務器又引起不協(xié)調(diào)的功能。在客戶機上,活動的驅(qū)動程序的替代能在多個層次的任一個上發(fā)生,包括(1)在驅(qū)動程序?qū)哟紊?,其中一個驅(qū)動程序版本不同于第二個驅(qū)動程序版本;(2)在驅(qū)動程序組件層次上,其中組件的內(nèi)容在版本之間不同;(3)在驅(qū)動程序文件層次上,其中一個文件的兩個同名版本的內(nèi)容不同。
從改寫驅(qū)動程序/組件/文件的版本引起的不兼容/不協(xié)調(diào)的例子包括不支持的配置特征,操作,和用戶界面。
發(fā)明內(nèi)容
本發(fā)明尋求著手解決關(guān)于在連網(wǎng)的外圍設備環(huán)境中維護可能不同的驅(qū)動程序版本和它們在機器上相關(guān)的組件版本方面以前技術(shù)的缺點。揭示了維護多個同時活動的連網(wǎng)外圍設備驅(qū)動程序的方法。例如,此方法由連網(wǎng)機器實現(xiàn),以保證在下列情況下與所有連網(wǎng)的外圍設備/服務器的兼容性,其中不同的同時活動的連網(wǎng)外圍設備驅(qū)動程序可能包含帶有同一名字的不同的外圍設備驅(qū)動程序組件和/或文件。
本方法包括在機器上以包括由機器完成的下列步驟的方式存儲新的驅(qū)動程序。最初,機器建立一容件,用于存儲構(gòu)成連網(wǎng)外圍設備驅(qū)動程序的至少一個組件的一個版本的一組驅(qū)動程序文件。然后對該容件賦給單獨的識別符名。隨后將這組驅(qū)動程序文件插入該容件。
按本發(fā)明的另外方面,機器將活動的驅(qū)動程序保持在多層活動的網(wǎng)絡設備驅(qū)動程序訪問/存儲架構(gòu)內(nèi)。該架構(gòu)包括包含一組單獨識別的驅(qū)動程序版本的驅(qū)動程序版本識別層。在第二層,每個單獨識別的驅(qū)動程序版本參考一組構(gòu)成連網(wǎng)外圍設備驅(qū)動程序的版本的驅(qū)動程序組件。在本發(fā)明的一個實施例中,組件包括文件組,組成驅(qū)動程序組件版本的文件存儲在單獨識別的分配給組件版本的子目錄中。那樣驅(qū)動程序組件的單獨識別便于防止在后續(xù)的組建版本被加載到連網(wǎng)的系統(tǒng)的活動驅(qū)動程序存儲時,驅(qū)動程序文件的第一版本改寫帶有同一名字的驅(qū)動程序文件的第二版本。
雖然附后的權(quán)利要求詳細列出了本發(fā)明的特征,從下面結(jié)合附圖的詳細描述能更好的理解本發(fā)明及其優(yōu)點。附圖是圖1是描述用于實現(xiàn)本發(fā)明的實施例的示例性計算機系統(tǒng)的方框圖;圖2是描述很好地加入本發(fā)明的代表性網(wǎng)絡環(huán)境的高層原理圖;圖3是圖示地描述在本發(fā)明的示例性網(wǎng)絡實施例中,保存在服務器和客戶機中各種有關(guān)驅(qū)動程序的軟件和信息的原理圖;圖4a是描述在本發(fā)明的實施例中單個驅(qū)動程序包的示例性組件的方框圖;圖4b是示例性分層樹圖,描述用于在驅(qū)動程序和從中提取的它們的程序包的版本之間進行組織和區(qū)分的多個層次;圖5a是示例性活動的驅(qū)動程序目錄組織結(jié)構(gòu),包括一個清單和一組對應于每個安裝在活動的驅(qū)動程序目錄中的驅(qū)動程序的子目錄;圖5b圖示了示例性網(wǎng)絡外圍設備布局,其中單個客戶能同時支持與運行同一驅(qū)動程序的不同版本的兩個服務器的兼容性;圖6是用于元數(shù)據(jù)存儲的示例性數(shù)據(jù)庫;圖7是由對體現(xiàn)本發(fā)明的客戶的打印紙脫機程序支持的示例性方法/功能組;圖8是流程圖,概述了用于在驅(qū)動程序包存儲器中安裝軟件包的一組步驟;圖9是流程圖,概述了用于在對特定服務的客戶機上維護合適的驅(qū)動程序版本的一組步驟;和圖10是流程圖,概述了客戶在與服務器的交互過程中如何訪問驅(qū)動程序版本。
具體實施例方式
通過例子,本發(fā)明體現(xiàn)在包括客戶、服務器、和連網(wǎng)外圍設備(如打印機、掃描儀等)的網(wǎng)絡計算機系統(tǒng)環(huán)境中,例如,本發(fā)明在包括集中的驅(qū)動程序包存儲的網(wǎng)絡中實現(xiàn),存儲作為用于將外圍設備驅(qū)動程序安裝到請求的客戶的定點源操作。集中的驅(qū)動程序包存儲保存完整的驅(qū)動程序包的諸版本,包括由客戶使用的可能的多驅(qū)動程序/版本連網(wǎng)以便與網(wǎng)外圍設備的服務器通訊。
而且在本發(fā)明的實施例中,安裝在驅(qū)動程序包存儲器的軟件包的完整性被保證。驅(qū)動程序完整性是通過在該軟件包安裝在集中的驅(qū)動程序存儲或任何其它機器,為以后分配到請求的客戶機或從該軟件包安裝驅(qū)動程序所用同時,拷貝整組與驅(qū)動程序包相關(guān)的文件組而得以保證。不試圖消除冗余的文件。在安裝的包中完整地不加選擇地存儲所有與驅(qū)動程序有關(guān)的文件,保證了當客戶機請求安裝驅(qū)動程序時,與特定請求的驅(qū)動程序相關(guān)的文件組將是既兼容又完整。
這里揭示的驅(qū)動程序存儲和管理方案的又一方面包括在系統(tǒng)中保存活動的驅(qū)動程序的新方式。在本發(fā)明的一個實施例中,構(gòu)成單獨的驅(qū)動程序版本的至少一部分有關(guān)文件組保存在具有單獨識別符名的目錄密件中。這里提到的唯一識別符名提供了高度的保證,使具有同一識別符名的容件確實是同一個。通過組合在單獨的識別符名下構(gòu)成驅(qū)動版本的至少一部分的文件,在客戶機上能同時激活不同的驅(qū)動程序的版本。
單獨識別符名能以若干不同的格式出現(xiàn)。那樣單獨的識別符名的例子是在NET部件的上下文中使用的強名(Strong name)。另選地,通過使用GUID版本組合單獨地識別驅(qū)動程序的某個版本,能得到合適的功能。類似地,賦給驅(qū)動程序每個版本的GUID能本身用作單獨的識別符名。指定驅(qū)動程序/文件的版本的GUID不便于容易地判斷,兩個不同的驅(qū)動程序/文件僅是同一驅(qū)動程序文件的兩個版本,因而從驅(qū)動程序管理的觀點,至少結(jié)合版本識別符名使用一個驅(qū)動程序/產(chǎn)品GUID通常更有利。在又一個實施例中,安全性/可靠性部分(如為其密鑰的散列值)加到單獨的識別符名,以便于認證特定驅(qū)動程序或其它組件/文件的源。
按這里揭示的實施例,使用單獨的識別符名識別包含不同組成的驅(qū)動程序文件的不同版本的驅(qū)動程序,使客戶機能同時支持與執(zhí)行同一外圍設備驅(qū)動程序的不同版本的服務器相關(guān)的外圍設備(如打印機)連結(jié)。在兩個不同服務器上運行的那樣不同版本的例子是兩個服務器使用具有同一名字的驅(qū)動程序DLL文件的不同版本,不是改寫兩個驅(qū)動程序DLL文件之一,本發(fā)明意在存儲兩個不同DLL文件的每一個,到它自己單獨識別的目錄中。
在使用.NET部件約定的本發(fā)明的示例性實施例中,當對共享的外圍設備的驅(qū)動器版本開始存入集中的驅(qū)動程序存儲時,對驅(qū)動程序的特定版本確定強名。例如,強名由驅(qū)動程序作者提供。另選地,在不知道這里描述特定的驅(qū)動程序存儲器底層結(jié)構(gòu)/方法編著驅(qū)動程序的情況,在存儲驅(qū)動程序時,根據(jù)從與特定驅(qū)動程序版本相關(guān)的一個或多個文件提取的元數(shù)據(jù)(如版本號,時間標記,校驗組等)產(chǎn)生合適的單獨的識別符名。強名具有很高的似然率區(qū)分兩個不同文件的情況一從而保證高度的可靠性,兩個具有同一強名的文件確實是同一個。賦給各種版本容件的每一個的強名使集中的驅(qū)動程序存儲和驅(qū)動程序的接收方(如打印機客戶)從可能已存儲在機器中的其它版本中區(qū)分出一個驅(qū)動程序組件(如部件)版本。
在本發(fā)明的特定實施例中,元數(shù)據(jù)存儲以壓縮的格式保存有關(guān)安裝的包和驅(qū)動程序的信息。壓縮的格式(如數(shù)據(jù)庫)便于在以后當客戶請求通過任何合適的外圍設備驅(qū)動程序安裝方法/激活驅(qū)動程序時,容易地查找。
在揭示的本發(fā)明的實施例中,外圍設備驅(qū)動程序客戶存儲至少驅(qū)動程序的部分(或組件)到驅(qū)動程序?qū)iT版本的容件。當特定的驅(qū)動程序被放在客戶機的活動程序存儲時,它被賦予單獨的識別符名(如強名)。如上解釋,強名保證,驅(qū)動程序的特地告版本很容易從當時由客戶保存的同一驅(qū)動程序的其它版本中區(qū)分出來(版本信息的內(nèi)容還便于如根據(jù)哪個驅(qū)動程序更加新而作出決定)。一旦在接收的客戶機上激活了特定驅(qū)動程序版本,賦給特定驅(qū)動程序版本的強名便于從在客戶機上同一驅(qū)動程序的另外激活版本中區(qū)分出該驅(qū)動程序版本。
按客戶端驅(qū)動程序/存儲方案,在驅(qū)動程序安裝期間當具有同樣名字的驅(qū)動程序文件的以前版本被拷貝到驅(qū)動程序目錄時,它可能被改寫。與此方案相反,實施本發(fā)明的客戶端驅(qū)動程序管理/存儲方案時,客戶驅(qū)動程序管理工具程序能夠區(qū)分驅(qū)動程序機器相關(guān)組件/文件的各種版本。例如,當驅(qū)動程序的較新的版本從集中的驅(qū)動程序文件存活促安裝到客戶機時,客戶在其驅(qū)動程序文件存儲器中創(chuàng)建單獨識別的容件(如文件系統(tǒng)目錄),至少方便于與較新的驅(qū)動器版本有關(guān)的新組件。在本發(fā)明的一個實施例中,不是在新目錄下存儲整個驅(qū)動程序組件的組,只有新的組件版本被存儲在具有單獨識別符名的新的容件中,以便區(qū)分同一驅(qū)動程序組件的各個版本。同一驅(qū)動程序組件的以前安裝的老版本在其自己單獨識別的容件中保持不變。結(jié)果,連網(wǎng)的外圍設備(如打印機)客戶能同時支持對同時運行連網(wǎng)打印機驅(qū)動程序的兩個不同版本的兩個獨立的連網(wǎng)設備服務器的訪問。
轉(zhuǎn)向附圖,圖1畫出合適的操作環(huán)境100的例子,用于在加入本發(fā)明的共享的網(wǎng)絡外圍設備環(huán)境中落實集中的驅(qū)動程序包存儲器,外圍設備客戶和服務器。操作環(huán)境100僅是合適的操作環(huán)境的一個例子,不試圖對對本發(fā)明的使用或功能的范圍提出任何限止。適用于本發(fā)明的其它眾知的計算系統(tǒng),環(huán)境包括個人計算機,服務器計算器,膝上/便攜計算設備,手持計算設備,多處理系統(tǒng),基于微處理器的系統(tǒng),網(wǎng)絡PC。小型機,大型主機,包括任何上述系統(tǒng)和設備的分布式計算機環(huán)境等,但不限于這些。
本發(fā)明用如程序模塊那樣擬由計算機執(zhí)行的計算機可執(zhí)行指令完成的一組步驟和過程的一般上下文來描述。通常,程序模塊包括執(zhí)行特地告任務或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例行程序,對象,組件,數(shù)據(jù)結(jié)構(gòu)等。雖然參考在單臺計算機系統(tǒng)上本地執(zhí)行的過程描述示例性實施例,本發(fā)明可能加入到在分布式計算環(huán)境操作的網(wǎng)絡節(jié)點中,在那里任務由通過通訊網(wǎng)絡連接的遠程處理設備完成。在分布式計算環(huán)境中,程序模塊通常位于包括存儲器設備的本地和遠程的計算機存儲介質(zhì)中。
繼續(xù)參考圖1,實現(xiàn)本發(fā)明的示例性系統(tǒng)包括擬以計算機110形式的通用計算設備。計算機110的組件包括處理單元120,系統(tǒng)存活促其130,和將包括系統(tǒng)存儲器的各種組件連接到處理單元120的系統(tǒng),但不限于這些。系統(tǒng)總線121能是若干總線結(jié)構(gòu)的任一種,包括存儲器總線或存儲控制器,外圍總線,和使用各種總線提心結(jié)構(gòu)的任一種的局部總線。例如,那樣的體系結(jié)構(gòu)包括工業(yè)標準體系結(jié)構(gòu)(ISA)總線,圖形加速端口(AGP),微通道體系結(jié)構(gòu)(MCA)總線,增強的ISA(EISA)總線,視頻電子技術(shù)標準協(xié)會(VESA)局部總線,和外設部件互連(PCI)總線,后者也稱Mezzanine總線。
計算機110通常包括各種計算機可讀介質(zhì)。計算機可讀介質(zhì)能是任何由計算機110訪問的可得到的介質(zhì),并包括易失和非易失介質(zhì),可取走和不可取走介質(zhì)。例如,計算機可讀介質(zhì)可包括計算機存儲介質(zhì)和通訊介質(zhì),但不限于這些。計算機存儲介質(zhì)包括易任何存儲的方法和技術(shù)實現(xiàn)的易失和非易失,可取走和不可取走介質(zhì),用于存儲如計算機的可讀指令,數(shù)據(jù)結(jié)構(gòu),程序模塊或其它數(shù)據(jù)那樣的信息,計算機存儲介質(zhì)包括RAM,ROM,EEPROM,閃存或其它存儲技術(shù),CD-ROM數(shù)字多功能盤(DVD)或其它光盤存儲設備,或任何其它能存儲希望的信息并能由計算機110訪問的介質(zhì),但不限于這些。通訊介質(zhì)一般體現(xiàn)在計算機可讀指令名數(shù)據(jù)結(jié)構(gòu),或以如載波或其它傳輸機制的調(diào)制數(shù)據(jù)信號的數(shù)據(jù),并包括任何信息提交介質(zhì)。術(shù)語“調(diào)制數(shù)據(jù)信號”指的是具有以如在信號中編碼信息的方式設置或改變的一個或多個特征的信號。例如,通訊介質(zhì)包括如有線網(wǎng)絡或直線連結(jié)的有線介質(zhì),如聲波,RF,紅外線或其它無線介質(zhì)的無線介質(zhì),但不限于這些。任何上面的組合也包括在計算機可讀介質(zhì)的范圍中。
系統(tǒng)存儲器130包括以易失和/或非易失存儲器方式的計算機存儲介質(zhì),如只讀存儲器(ROM)131和隨機存儲器132。包含如在起動期間幫助在計算機110的各單元之間傳輸信息的基本例行程序的基本輸入/輸出系統(tǒng)133(BIOS)有時存儲在ROM131。RAM132通常包含由處理單元120立即訪問和/或當時操作的數(shù)據(jù)和/或程序模塊。例如圖1示出操作系統(tǒng)134,應用程序135,其它程序模塊136,和程序數(shù)據(jù)137,但不限于這些。
計算機110還能包括其它可取走/不可取走,易失/非易失計算機存儲介質(zhì)。僅作為例子,圖1示出讀寫不可取走,非易失磁介質(zhì)的硬盤驅(qū)動器140,讀寫可取走,非易失磁盤152的磁盤驅(qū)動器151,讀寫可取走,非易失光盤156,如CD-ROM或其它光介質(zhì)的光盤驅(qū)動器155。其它在示例性操作的環(huán)境可使用的可取走/不可取走,易失/非易失計算機存儲介質(zhì)包括盒式磁帶,閃存卡,數(shù)字多功能盤,數(shù)字視頻帶,固態(tài)RAM,固態(tài)ROM等,但不限于這些。硬盤驅(qū)動器141通常經(jīng)過如接口140那樣不可取走存儲器接口連接系統(tǒng)總線121,而磁盤驅(qū)動器151和光盤驅(qū)動器155通常通過如接口那樣的可取走存儲器接口連接系統(tǒng)總線121。
上述在圖1中示出的驅(qū)動器及其相關(guān)的計算機存儲介質(zhì)提供對計算機110的計算機可讀指令,數(shù)據(jù)結(jié)構(gòu),程序模塊和其它數(shù)據(jù)的存儲。例如在圖1中,硬盤141示作為存儲操作系統(tǒng)144,應用程序145,其它程序模塊146,和程序數(shù)據(jù)147。注意,這些組件能與操作系統(tǒng)134,應用程序135,其它程序模塊136,和程序數(shù)據(jù)137相同或不相同。在這里對操作系統(tǒng)144,應用程序145,其它程序模塊146,和程序數(shù)據(jù)給出不同序號以表明至少它們是不同的拷貝。用戶能通過如鍵盤和常稱為鼠標的定為設備,跟蹤球或接觸墊那樣的輸入設備輸入命令和信息到計算機110。其它輸入設備(未示出)能包括麥克風,操作桿,游戲墊,衛(wèi)星碟,掃描儀等。這些和其它輸入設備常常通過連接系統(tǒng)總線的用戶輸入接口160連接到處理單元120,但也能經(jīng)過如并行口,游戲?;蛲ㄓ么锌偩€USB那樣的其它接口和總線結(jié)構(gòu)連接。監(jiān)視器191和其它類型的顯示設備也能經(jīng)過如視頻接口190那樣的接口連接系統(tǒng)總線121。除監(jiān)視器以外,計算機也能包括通過輸出外圍接口190連接的其它外圍輸出設備,如揚聲器197和打印機196。
計算機110可能使用到如遠程計算機180那樣的一臺或多臺遠程計算機的邏輯連接在網(wǎng)絡管理環(huán)境中操作。遠程計算機180能是個人計算機,服務器,路由器,網(wǎng)絡PC,對等設備或其它公共網(wǎng)絡節(jié)點,并通常包括上述有關(guān)計算機110的許多或所有單元,雖然在圖1中只示出存儲器設備181。在圖1中畫的邏輯連接包括局域網(wǎng)(LAN)171和廣域網(wǎng)(WAN)173,但還能包括其它網(wǎng)絡。那樣的網(wǎng)絡環(huán)境在辦公室,企業(yè)范圍計算機網(wǎng)絡,內(nèi)聯(lián)網(wǎng)和因特網(wǎng)是常見的。
在LAN網(wǎng)絡環(huán)境使用時,計算機通過網(wǎng)絡接口或適配器170連接到LAN171。在WAN網(wǎng)絡環(huán)境使用時,計算機110通常包括調(diào)制解調(diào)器172或其它建立經(jīng)過因特網(wǎng)那樣的WAN173通訊的裝置。內(nèi)置或外接的調(diào)制解調(diào)器能經(jīng)過用戶輸入接口160或其它合適的機制連接系統(tǒng)總線121。在網(wǎng)絡環(huán)境中,關(guān)于計算機110畫出的程序模塊或其部分能存儲在遠程存儲設備中。例如,圖1示出駐留在存儲器設備181的遠程應用程序185。可以理解,示出的網(wǎng)絡連接時示例性的,能使用實現(xiàn)所述外圍設備驅(qū)動程序管理方案的其它裝置。
圖2畫出示例性網(wǎng)絡,包括參與按本發(fā)明的示例實施例的連網(wǎng)外圍設備(如打印機)驅(qū)動程序管理安排的一組網(wǎng)絡實體。示例性計算機網(wǎng)絡環(huán)境200包括一組為登錄的用戶執(zhí)行應用程序的客戶機202(1-n)。客戶機的數(shù)量(n)從幾臺計算機到成千上百是無所謂的。那樣的網(wǎng)絡設想包括廣域網(wǎng)鏈路,它向?qū)嶋H上任何數(shù)量的另外客戶機開放網(wǎng)絡??蛻魴C202通過網(wǎng)絡打印機驅(qū)動程序配置打印特征(如方向,分解率,打印方式等),并經(jīng)過網(wǎng)絡鏈路210移交請求到由打印服務器204和205保存的打印隊列。打印服務器204和205使用對應于由客戶機使用的打印機驅(qū)動程序的打印機驅(qū)動程序處理打印請求,提交這些請求到特定的打印隊列。打印服務器204和205使用與特定隊列相關(guān)的打印機驅(qū)動程序,移交用于合適打印機打印作業(yè),該打印機相應于打印作業(yè)所占據(jù)的打印隊列。隨后,打印服務器204和205為客戶機202通過網(wǎng)絡鏈路210將移交的打印作業(yè)送到一組連網(wǎng)打印機206和208的一個(按客戶的原始打印請求)。隨后,打印機206和208接收從打印服務器204和205移交的打印作業(yè),且打印機206和208產(chǎn)生打印文檔輸出。
在本發(fā)明的實施例中,客戶機的客戶計算機在首次安裝和激活與管理打印請求的打印服務器(如204或205)相關(guān)的合適的連網(wǎng)打印機驅(qū)動程序組件之后,發(fā)出打印請求。在本發(fā)明的實施例中,那樣的組件最初以驅(qū)動程序包的形式(下面參考圖4a和4b討論)保存在網(wǎng)絡200上集中的驅(qū)動程序存儲212。集中的驅(qū)動程序存儲212從該軟件包移交驅(qū)動程序(包括解壓縮的組件)和元數(shù)據(jù)。元數(shù)據(jù)用下列兩者之間充分詳細的區(qū)別識別軟件包和軟件包中的各驅(qū)動程序(每個可能包括許多組件/文件)(1)同一軟件包/驅(qū)動程序的不同版本,或(2)對應不同設備驅(qū)動程序的同一命名的文件。
在本發(fā)明的實施例中,客戶機202區(qū)分驅(qū)動程序和驅(qū)動程序的組成文件-存儲在由每個客戶機202維持的活動的驅(qū)動程序存儲302。與從集中的驅(qū)動程序存儲212安裝網(wǎng)絡設備驅(qū)動器相關(guān)(或間接的通過包含與所需驅(qū)動程序相關(guān)的組件/文件的完整組的任何其它網(wǎng)絡設備-如打印服務器204或205之一),客戶機202對每個各別的驅(qū)動程序創(chuàng)建分別的容件(如目錄)。從與該驅(qū)動調(diào)程序相關(guān)的簽署信息(至少部分地)移交賦給每個驅(qū)動程序容件的各別的標號。在本發(fā)明的另外實施例中,前述的信息具有各種形式。
上述網(wǎng)絡環(huán)境列出了較好的加入本發(fā)明的示例性計算機網(wǎng)絡環(huán)境。本專業(yè)行家理解,本發(fā)明可應用到各種情況,在那里連網(wǎng)外圍設備驅(qū)動程序的客戶希望(若不是必需)保存具有可能重疊的組成的驅(qū)動程序文件名的多個活動的驅(qū)動程序(包括同一驅(qū)動程序的多個版本),在描述了那樣的示例性網(wǎng)絡環(huán)境后,外圍設備驅(qū)動程序包的內(nèi)容,處理程序包,并分配及維持從該包提取的驅(qū)動程序,將在下面按本發(fā)明圖示的實施例予以討論。
現(xiàn)轉(zhuǎn)向圖3,設備在驅(qū)動程序存儲安排中各驅(qū)動程序和/或驅(qū)動程序信息的三個表示。驅(qū)動程序包存儲300以如由制造商發(fā)貨的形式存儲驅(qū)動程序包的完整拷貝。通常預期,軟件包將包括支持多個計算機環(huán)境的多個驅(qū)動程序,甚至基本上同一驅(qū)動程序的不同版本(如包括增加/修改的特征和/或錯誤排除的同一驅(qū)動程序的順序的發(fā)行)。在本發(fā)明的實施例中,驅(qū)動程序包存儲300位于集中的驅(qū)動程序存儲212。然而,驅(qū)動程序包存儲300能位于客戶機或服務器。在本發(fā)明中的兩種情況,驅(qū)動程序包存儲300放在分布式文件系統(tǒng)的公共目錄(文件共享)中。為節(jié)省空間,驅(qū)動程序包的內(nèi)容被壓縮。下面參考圖4a和4b詳細描述驅(qū)動程序包存儲300的示例版本的組件。
在本發(fā)明的實施例中,驅(qū)動程序文件從驅(qū)動程序包存儲300中提取并放在活動的驅(qū)動程序存儲302。通常在網(wǎng)絡中的服務器和客戶機上找到的活動的驅(qū)動程序存儲302是用于保持加載的,解壓縮的驅(qū)動程序文件的目錄結(jié)構(gòu)。在本發(fā)明的實施例中,活動的驅(qū)動程序存儲302的驅(qū)動程序文件保存在由網(wǎng)絡上其它客戶和服務器機器可訪問的分布式文件系統(tǒng)部分。在那樣的實施例中,在客戶或服務器機器上的活動的驅(qū)動程序存儲302與在機器存儲空間中其它的,非公共的組件隔離。下面參考圖5a和5b描述示例的驅(qū)動程序存儲302的形式和功能。
在網(wǎng)絡外圍設備驅(qū)動程序維護架構(gòu)的實施例中,元數(shù)據(jù)存儲304包括支持基于密鑰的安排,并搜索加載到以及可用于本地機器的驅(qū)動程序的數(shù)據(jù)庫。在本發(fā)明的實施例中,元數(shù)據(jù)存儲304還包括對每個驅(qū)動程序版本的清單,它列出一組構(gòu)成特定驅(qū)動程序版本的組件。例如,密鑰可搜索的字段的例子包括環(huán)境,制造商,驅(qū)動程序,和程序包。下面參考圖6描述示例的數(shù)據(jù)庫的方案。
轉(zhuǎn)向圖4a,在驅(qū)動程序包存儲300中的驅(qū)動程序包能采取各種形式。然而,在示例實施例中,驅(qū)動程序包包括三個主要部分INF文件400,CAT文件410,和經(jīng)壓縮并放入CAB文件420的驅(qū)動程序源文件。INF文件400描述驅(qū)動程序包的內(nèi)容。在本發(fā)明的實施例中,INF文件400包括由包ID和版本包的單獨的ID-便于在同一驅(qū)動程序的各版本之間作出區(qū)分。例如,版本由插入INF文件400的驅(qū)動程序版本字段的時間標記(年/月/日)指定。另選地,對特定程序包版本的單獨的ID從散列操作在CAT文件410或甚至CAB文件420中的簽署信息而產(chǎn)生。在又一個范例中,版本是包括識別較大/較小的版本并排除錯誤的發(fā)行的多個段的規(guī)格化的版本碼。由識別信息的合適版本對方數(shù)量與多樣性證明,本發(fā)明致力于與包相關(guān)的數(shù)據(jù)/元數(shù)據(jù),它們提供高度的可靠性,使得兩個具有同一版本值的包確實是同一個包。那樣的識別在這里稱為“強名-Strong name)。
INF400包括到訪問驅(qū)動程序包中CAT文件410的安裝程序的指向。CAT文件410包括認證該包的單獨的簽署。例如,CAT文件410還包括識別簽署成為有效的平臺的元數(shù)據(jù),和用于創(chuàng)建該簽署的認證,但不限于這些。除了識別CAT文410以外,INF文件400描述如何安排在驅(qū)動程序包中的文件,以移交一個或多個驅(qū)動程序部件-構(gòu)成特定驅(qū)動程序版本的一組有關(guān)的文件。INF還包括即插即用(Plug-and plug)ID。在本發(fā)明的實施例中,在CAB(“柜-Cabinet”)文件420中以壓縮的形式提供實際的驅(qū)動程序文件。
下面是INF400的簡單例子。
Package={package GUID};識別包的內(nèi)容Driver=mm/dd/yyyy識別修訂版(從包的其它版本區(qū)別此版本)[Manufacture]%FooCorp%=Foo,NT.5.1,NT.6.0;這些是Target OS Version Ids[Foo];Min 2k段Copy Files=@unidriv.dll,[Foo.NT.5.1]<XP(NT5.1)段,不必要butonhyuW2K,若與WK無區(qū)別,則能忽略> ;NT6.0段,被以前的操作系統(tǒng)版本所忽略Install Package=Infname;相對于當前dir參考的INFManifest=foo.manifest示例性INF包括對三個各別的操作系統(tǒng)的指向。第三個(Foo.NT.6.0)利用有關(guān)從包加載文件的增加的機制?!癐nstall Package識別對于應與當前的包一起安裝的另外包的INF。組件(NET部件是它的特定例子)是驅(qū)動程序的積木,并能包括多個文件,甚至其它組件。清單包含驅(qū)動程序的強名,和驅(qū)動程序的組件(如.NET部件)的強名。
在本發(fā)明的實施例中,支持只包含Unidrv的包,且INF輸送那個信息。在本發(fā)明的實施例中,這些需求由包括“CompName=CompGUID”的段標簽[PrintSoftware Components]實現(xiàn)。每個組件以段名CompGuid來描述。
例如[compGuid]
copyFiles=@Unidrv.dll,etc.
DriveVer=mm/dd/yyyys可選,若不同于[Version]段,則需要包被存入在可配置位置的驅(qū)動程序包存儲300。默認地,驅(qū)動程序包存儲駐留在本地機器(如集中的驅(qū)動程序存儲212)。然而在本發(fā)明的實施例中,驅(qū)動程序包存儲300的內(nèi)容使得能對其它連網(wǎng)機器可訪問。例如,那樣的可訪問性通過將程序包存儲300放在網(wǎng)絡上其它機器發(fā)布的分布式文件系統(tǒng)共享部分上而達到。
轉(zhuǎn)向圖4b,分層的樹型圖畫出了如由INF文件400規(guī)定的在驅(qū)動程序包存儲300中驅(qū)動程序容件(如程序包。驅(qū)動程序、部件)和文件的分層的安排/聯(lián)系。注意到,在一個文件在不同的驅(qū)動程序部件使用多次的情況,在包內(nèi)存儲單個拷貝,且在包中存儲到單個驅(qū)動程序拷貝的諸連接口,以節(jié)省存儲文件的完整拷貝。
在共享驅(qū)動程序包存儲300的最高層,驅(qū)動程序包容件450對應于共享目錄的根部。在下面一層,一組包GUID-限定的包容件460,462和464可能保持單獨地識別的包(由對每個包的分別的GUID區(qū)分)的多個版本。在示例性實施例中,包容件保持兩個包470和472-每個在圖4b中由賦給每個特定包版本的強名如程序包的日期)代表的目錄結(jié)構(gòu)中單獨地識別。在本發(fā)明的實施例中。其中使用GUID+版本方法而不是強名,在圖4b中畫出的分層的樹對應于下面目錄安排Root{Package GUID1}\Package Data1\包含第一程序包的一個版本Root\{Package GUID1}\Package Data2\包含第一程序包的新的版本Root\{Package GUID2}\Package Data3\包含第二程序包的版本Root{Package GUIDn}\Package Data4\包含第n程序包的版本在本發(fā)明的實施例中,包數(shù)據(jù)格式是yyyymmdd。在又一個示例性實施例中,為識別/區(qū)分驅(qū)動程序包版本使用強名,或甚至只用GUID值。
此外如圖4b所示,除了包含如規(guī)定構(gòu)成特定的驅(qū)動程序版本(由單獨的識別符名識別)的組件的驅(qū)動程序清單那樣非驅(qū)動程序組件與有的文件外,包472分別對驅(qū)動程序A和驅(qū)動程序B規(guī)定驅(qū)動程序組件專有的容件480和482。另選地。給予每個驅(qū)動程序它自己的容件(但是在組件對包中的許多不同驅(qū)動程序是公共的情況這是不希望的)。在本發(fā)明的實施例中,驅(qū)動程序組件專有的容件480和482由模型-和-提供者(model-and-Provide)GUIDMPG的組合指定,后者區(qū)分如由不同驅(qū)動程序軟件提供者分配的具有同一名字的驅(qū)動程序組件。驅(qū)動程序組件專有的容件480(驅(qū)動程序A)又包括對應于驅(qū)動程序組件A的版本1和2的兩個版本容件(如部件)490和492。在本發(fā)明的實施例中,部件包含組合起來完成驅(qū)動程序功能的一個或多個文件的組。
在本發(fā)明的示例性實施例中,從其它驅(qū)動程序版本區(qū)分出驅(qū)動程序版本的驅(qū)動程序版本的至少一部分(如一組件)被存入分別的各自加標號的容件。此安排使連網(wǎng)外圍設備客戶能支持一個驅(qū)動程序的多個不同的版本。在本發(fā)明的特定實施例中,構(gòu)成驅(qū)動程序組件的特定版本的文件以部件形式組合在一起。每個部件被賦予加不同標號的容件(如目錄服務的子目錄),使得與同一驅(qū)動程序的不同版本相關(guān)的部件被賦予不同的標號。
驅(qū)動程序組件(如部件)的版本通過用單獨的識別符名對每個驅(qū)動程序部件容件加標號而區(qū)分,識別符名是任何合適的識別符,它在區(qū)分特定驅(qū)動程序的兩個不同版本方面達到高的似然率。在特定示例性實施例中,單獨的識別符名是.NET強名。強名包括賦給構(gòu)成特定驅(qū)動程序版本的至少一部分的有關(guān)的驅(qū)動程序文件(如一個部件)的組的版本日期。另選地,以用a.b.c.d格式顯示的64位值的格式提供版本,其中a.b代表特征版本號,而c.d代表錯誤排除號。在又一個實施例中,強名是基于在從其它驅(qū)動程序版本區(qū)分出該驅(qū)動程序版本的信息上完成的校驗和或散列操作。
轉(zhuǎn)向圖5a,通常在網(wǎng)絡中的服務器和客戶上找到的活動的驅(qū)動程序存儲302是保存加載的,解壓縮的驅(qū)動程序文件502和清單信息504的目錄結(jié)構(gòu)。在本發(fā)明的實施例中使用兩類清單(1)組件清單描述組件的內(nèi)容(如識別構(gòu)成一個組件和任何其它需要的組件的文件),和(2)驅(qū)動程序清單描述驅(qū)動程序的組件(只是需要的組件,不受任何文件信息,因為驅(qū)動程序本身不具有不是組件的部分的任何文件)。在本發(fā)明的實施例中,每個驅(qū)動程序組件的每個版本在活動的驅(qū)動程序存儲302中被分配,它自己的單獨識別的容件(如子目錄)。而且,活動的驅(qū)動程序存儲302包括按組件的清單信息,它描述/列舉保存在活動的驅(qū)動程序存儲302中與每個特定的驅(qū)動程序組件版本(容件)有關(guān)的文件的組。
在本發(fā)明的實施例中,清單信息504還包括在由單獨的識別符(對每個驅(qū)動程序版本)加標號的文件中的列表,識別符識別在活動的驅(qū)動程序存儲302中構(gòu)成驅(qū)動程序版本的組件。向每個特定的驅(qū)動程序版本提供它自己的單獨識別的容件(如一文件),它只包含列舉驅(qū)動程序版本的組件的驅(qū)動程序清單(不是其它文件)。在本發(fā)明的實施例中,驅(qū)動程序清單容件(文件)位于活動的驅(qū)動程序存儲302中,或在另選的實施例中,位于某個另選合適的位置(包括在元數(shù)據(jù)存儲304中的驅(qū)動程序版本表)。例如,對每個驅(qū)動程序/組件的容件的單獨識別符名是一單獨的名,它根據(jù)從驅(qū)動程序/組件的版本可提取的特征數(shù)據(jù)的任何組合創(chuàng)建,以保證同一驅(qū)動程序/組件的兩個不同版本具有不同的容件名。如上提到,那樣單獨的識別符名的例子是(1)強名。和(2)模型-和-提供者GUID(MPG)和版本組合。
在本發(fā)明的實施例中,包含用于設置對特定驅(qū)動器的上下的版本信息的組件描述,在將特定的驅(qū)動程序組件版本存入活動的驅(qū)動程序存儲302的時刻被存入清單信息504中。然后,使用特定驅(qū)動程序的服務或應用在加載驅(qū)動程序組件文件之前,根據(jù)清單信息504設置上下文。該上下文(如“激活上下文”)是在包含那樣信息的存儲器中的數(shù)據(jù)結(jié)構(gòu),系統(tǒng)使用該信息重定向應用,以加載特定的文件版本/部件。在此情況,它從驅(qū)動程序的清單文件創(chuàng)建。該上下文確定,對特定的驅(qū)動程序版本應使用可能的文件(如D4)的許多版本的哪一個。例如該上下文能被管理員取代。
下面表示對賦給在活動的驅(qū)動程序存儲302的驅(qū)動程序文件502中兩個不同的子目錄容件的特定驅(qū)動程序組件/部件(包括兩個相關(guān)文件)的兩個版本的兩個清單信息504的輸入項。
Assembly 1Foo.dll(vx.y)Fooi.dll(va.b)Assembly 1’Foo.dll(vx.y’)Fooui.dll(va.b)部件1’具有Foo.dll和Fooui.dll兩者的不同版本。在本發(fā)明的實施例中。在特定的驅(qū)動程序組件的兩組文件之間的任何差別導致建立具有對應于驅(qū)動程序文件502中的子目錄的它們自己的清單的不同的組件(部件)。
在本發(fā)明的實施例中,活動的驅(qū)動程序存儲302的驅(qū)動程序文件502被保存在由網(wǎng)絡上其它客戶和服務器機器可訪問的分布式文件系統(tǒng)共享部分中。在那樣的實施例中,在客戶或服務器機器上的活動的驅(qū)動程序存儲302與在機器的存儲空間中其它非公共的組件隔離。在分布式文件系統(tǒng)共享部分中驅(qū)動程序文件502的安排對應于由清單信息504識別的部件。
轉(zhuǎn)向圖5b,圖示了示例性范例,其中本發(fā)明特別有用-即那時客戶540保持到運行同一驅(qū)動程序(“Foo”)的兩個不同版本(“x”和“y”)的第一服務器550和第二服務器560的兩個不同的連結(jié)。在此圖示情況,客戶540利用其能力同時保持驅(qū)動程序Foo555的版本x和驅(qū)動程序Foo565的版本y活動,以達到在處理與對應的連網(wǎng)外圍設備570和580有關(guān)的外圍設備設置時與服務器550(運行版本x556)和服務器560(運行版本y566)兩者的完全同時的兼容性。那樣的設置分別繼續(xù)存在于服務器550和560中的設置557和567。繼續(xù)存在的設置557和567被分別拷貝到保存在客戶540的設置558和568之中。保持完全的驅(qū)動程序版本兼容性的失敗引起客戶540在解釋服務器550和560上的設置558和568方面可能的無能。
轉(zhuǎn)向圖6,數(shù)據(jù)庫方案畫出了示例的驅(qū)動管理工具軟件的元數(shù)據(jù)存儲304的示例安排。上面提到,元數(shù)據(jù)存儲304保存在至少一臺客戶機上,并以有序方式概括了機器上加載的活動的驅(qū)動程序。元數(shù)據(jù)存儲304不需要實現(xiàn)本發(fā)明。但是,它的存在提供了管理在網(wǎng)絡環(huán)境中大量外圍設備驅(qū)動程序的方便的方法。在本發(fā)明的實施例中,元數(shù)據(jù)存儲304由假脫機程序服務管理。
在圖6中概括的示例的數(shù)據(jù)庫的方案如下地安排/訪問。在包的表600在的輸入項由Compacklookup函數(shù)610通過提交“PackagID”來引用。對Package(包)表600中的輸入項提供的子字段包括每個被識別的包的PackageGUID,版本,和INFName。
ComPackLookup函數(shù)610還通過“ComponentID”訪問在組件表620中的輸入項。當列舉組件時,它們包括EnvID,ComponentGUID,ComponentName和Version(版本)。EnvID字段提供能用作在Environments(環(huán)境)表630上搜索關(guān)鍵字的值。Environments表630的輸入項包括對識別的環(huán)境(如WindowsNT×86,WindowsNTIA64等)的對應的EnvName。
另外預期的表輸入項搜索函數(shù)是PhysDriverComponentLookup函數(shù)640。PhysDriverComponentLookup函數(shù)640通過ComponentID搜索關(guān)鍵字訪問Component表620中的輸入項。PhysDriverComponentLookup函數(shù)640還通過PhysDriverID搜索關(guān)鍵字訪問PhysicalDriver表650。在列舉PhysicalDriver表650中具體的驅(qū)動程序輸入項時,它們包括邏輯driverID,EnvID,和languageID(語言ID)。EnvID字段提供用于搜索Environment表630的值。此外,邏輯driverID字段提供用于搜索logicalDrivers表660的值。在本發(fā)明的實施例中,PhysicalDrivers表650還存儲對每個單獨識別的具體的驅(qū)動程序/版本組合的驅(qū)動程序清單表。
因此,在本發(fā)明的實施例中,邏輯驅(qū)動程序指的是從對特定平臺編輯的驅(qū)動程序提取的或限定于特定用戶語言(如英語)的驅(qū)動程序。具體的驅(qū)動程序附屬于對其已進行編譯并可能對其已限定語言的特定識別的環(huán)境(如“WindowsNT×86”,“WindowsNTIA64”)。被識別的具體的驅(qū)動程序可能包括若干組件(如HPLaserJet4 Customization,sRGB Profile and Unidrv)。注意,不是所有組件具有對特定環(huán)境(如Image Color Management(ICM)profiles,or GPD(一般的打印機描述))的依賴性。
LogicalDriver表660的輸入項包括驅(qū)動程序名,制造商ID,plug-n-playID,版本,和providerID。制造商ID轉(zhuǎn)而又參考制造商(Manufacturers)表670的輸入項。例如制造商表670的字段包括名字字段和URL字段。
在本發(fā)明的實施例中,元數(shù)據(jù)存儲304數(shù)據(jù)庫在提供驅(qū)動程序存儲的服務的首次自舉時被創(chuàng)建。在本發(fā)明的實施例中,打印機假脫機程序提供那樣的服務。在另外范例中使用專用的驅(qū)動程序管理服務。元數(shù)據(jù)存儲304數(shù)據(jù)庫從與操作系統(tǒng)的拷貝一起提供的INF內(nèi)容填入。另選地,將預填入的數(shù)據(jù)庫加載到該構(gòu)造中一以復雜化該構(gòu)造的處理為代價(因為在數(shù)據(jù)庫中的信息對在INF中的信息是冗余的,必須有新的構(gòu)造后的步驟)。
關(guān)于如上解釋的包的表,PachageID(由包的INF提供)不能可靠地使用來區(qū)分基本上同一個包的兩個版本,因為作為規(guī)則,PackageID不隨整個包的每次改變而改變(只要INF不改變)。相反,一旦包被創(chuàng)建,由INF設置的PackageID不(在版本之間)改變。因此,存儲在包中的DriverVer輸入項被用于區(qū)分具有同一PackageID值的包的兩個版本。
討論了由網(wǎng)絡環(huán)境中客戶使用的外圍設備驅(qū)動程序維護工具軟件的底層組織之后,注意力轉(zhuǎn)向使用這里描述的底層架構(gòu)實現(xiàn)的系統(tǒng)和示例方法的功能性界面。開始轉(zhuǎn)向圖7,對加載/安裝的包和驅(qū)動程序識別一組示例的(打印機驅(qū)動程序有關(guān)的)應用程序界面(API)。使用如遠程過程調(diào)用幫助程序庫實現(xiàn)API。結(jié)果,各功能不需由所有外圍設備提供者實現(xiàn)。
Upload Printer Driver Package( )API700Upload Printer Driver PackageAPI700便于上載打印機驅(qū)動程序包。UploadPrinter Driver PackageAPI700是異步API。下面是Upload Printer DriverPackageAPI700的示例格式。
HRESULTUpload Printer Driver Package(IN LPCTSTR psz Server,IN LPCTSTR psz INFPath,IN DWORDdw Flags,IN HANDLE hEvent,OUT HRESULT*pError,OUT DWORD*pdw CancelId,OUT PDDRIVER_PACKAGE_ID pPackageId);其中下面說明引用的參數(shù)psz Server是加載該包的服務器的全民。若服務器是集群的,則此參數(shù)以集群名開始。
Psz INFPath是全路徑和INF文件名,后者被處理以產(chǎn)生打印機驅(qū)動程序包。INF的處理發(fā)生在客戶端以避免若INF文件不能從服務器訪問引起的問題,如當INF文件在CD上,而CD在客戶機上未被共享出來。分析INF文件并準備所有參考的的文件的表。每個文件以全路徑出現(xiàn)在表中。該表被送到服務器,而在那里上載對應的文件。通過讀出下面在服務器上注冊關(guān)鍵字的DriverStorageShareName值,找出在服務器上的上載包的位置SYSTEM\\Current Control Set\\Control\\Print\\Driver Storage Root-它能如通過用戶界面由打印服務員管理員配置。如上解釋,每個包被賦予單獨加標號的子目錄。在本發(fā)明的示例實施性中,對上載的包產(chǎn)生GUID,且使用包的GUID在DriverStrorgeShareName下創(chuàng)建一目錄名。在該目錄下創(chuàng)建子目錄,它具有下述格式Y(jié)YYYMMDD,其中YYYY,MM,和DD是包的當前版本的年,月和日期。所有包文件在該子目錄下被拷貝。由包的INF文件提供的結(jié)構(gòu)管理包的目錄的樹結(jié)構(gòu)。
DwFlags提供用于修改API的行為的機制。例如,若dwFlags的值等于0×01,則若該包已存在于服務器上,在上載期間它將被改寫/替代。Dwflags參數(shù)還對該包設置平臺。
hEvent是由調(diào)用者提供的事件處理程序。當上載作業(yè)完成時,通知對應的事件。若hEvent是空,則調(diào)用被轉(zhuǎn)換成同步的。
pError是到HRESULT的指針,后者是寫從異步調(diào)用返回的值的地方。在hEvent被通知以后該值有效。
pdwCancelId是到DWORD值的指針,它能用于通過對UploadCancel API(下面討論)的調(diào)用刪除異步的Upload Printer Driver Pachage。在返回UploadPrinter Driver Package之后,pdwCancelId的值立即生效。
PpackageId是到下面類型的PackageId結(jié)構(gòu)的指針Typedef struct_DRIVER_PACKAGE_ID{DWORD dw Size;GUID DpackageGuid;SYSTEMTIME DpackageTime;}DRIVER_PACKAGE_ID,*PDDRIVER_PACKAGE_ID;當異步調(diào)用完成,它指向的結(jié)構(gòu)將包含該包的GUID和時間。使用接收的DRIVER_PACKAGE_ID給包的子目錄加標號。
InstallDriverFromPackage( )AP1710InstallDriverFromPackage( )API710安裝來自安裝的包的驅(qū)動程序。標志參數(shù)規(guī)定擬安裝的驅(qū)動程序的類型(打印機驅(qū)動程序,端口監(jiān)視器,打印處理器等)。安裝方法更新了元數(shù)據(jù)存儲304和清單信息504以反映新安裝的驅(qū)動程序。就安裝的驅(qū)動器的組件尚未出現(xiàn)在活動的驅(qū)動程序存儲302的情況而言,新的子目錄被加入,新的組件被存入新組件的容件中。下面是InstallDriverFromPackage API710的示例格式。
H RESULTWINAPIInstallPrinterDriverFromPackage(IN LPCTSTR psz Server,IN DRIVER_PACKAG_IDPackageID,IN LPCSTR psz Model Name,
IN LPCSTR psz EvironmentIN DWORDdw Version,IN DWORDdw Flags);在上面概括的API中PszServer規(guī)定一服務器名。使用NUL1值從本地的包存儲安裝驅(qū)動程序。注意在本發(fā)明實施例中,驅(qū)動程序包已經(jīng)用Upload Printer Driver PackageAPI700安裝在由識別的pszServer定義的機器上。
PackageID定義了安裝的包,我們從該包安裝打印機驅(qū)動程序。對PackageID的值由Upload Printer Driver Package API700返回。
PszModelName是打印機驅(qū)動程序的名。被識別的打印機驅(qū)動程序必須存在于由Package定義的包中。
PszEvironment是擬安裝驅(qū)動程序的環(huán)境。在本發(fā)明的實施例中使用字符串名。那樣字符串名的例子包括“WindowsNT×86”,“WindowsIA64”和“WindowsNT AMD64”。
DwVersion規(guī)定擬安裝的驅(qū)動程序的版本。
DwFlags便于規(guī)定對API默認行為的客戶化。示例的標志能從眾知的AddPrinterDriverAPIcounterpart推導出來,并包括IDFP_STRICT_UPGRADEIDFP_STRICT_DOWNGRADEIDFP_COPY_ALL_FILESIDFP_COPY_NEW_FILESIDFP_DON’T_COPY_FILES_TO_CLUSTERIDFP_COPY_TO_ALL_SPOOLERSIDFP_NO_UIIDFP_INSTALL_WARNED_DRIVER在AddPrinterDriver中的某些標志的InstallDriverFromPackage API710中沒有付本。這些是APD_COPY_FROM_DIRECTORY-因為我們沒有傳送-DRIVER_INFO_6結(jié)構(gòu),那是不需要的。
APD_RETURN_BLOKING_STATUS_CODE-由于沒有低層客戶調(diào)用此函數(shù),此API總是返回成塊碼。
APD_DON’T_SET_CHECKPOINT-因為若試圖安裝未簽署的驅(qū)動程序,此API總是設置校驗點。
在本發(fā)明的實施例中,標志組包括給予調(diào)用者關(guān)于從INF中安裝哪些組件的更大的控制的那些。這些標志包括IDFP_INSTALL_PRINTER_DRIVERINFP_INSTALL_LANG_MONITORINDP INSTALL_PRINT_PROCIDFP_INSTALL_ICM_PROFILEIDFP_INSTALL_ASP_PAGES未簽署的驅(qū)動程序由InstallDriverFromPackage API 710如下地處理·若安裝遠程地發(fā)生,它失敗。
·若用戶不是管理員,它失敗。
·若用戶是管理員,類似于PnP用服務器方/客戶方安裝的那樣,在用戶的上下文重試安裝。
GetDriverStorageRoot720調(diào)用GetDriverStorageRoot函數(shù)尋找服務器存儲驅(qū)動程序包存儲300的驅(qū)動程序包的根位置。在本發(fā)明實施例中,包存儲的根的位置通常由管理員設置。例如,GetDriverStorageRoot720函數(shù)的格式如下HRESULTGetDriverStorageRoot(IN LPCTSTR psz Server,OUT LPTSTR*ppDslrorageRootBuffer);pszServer是驅(qū)動程序包存儲300駐留的服務器的全民。若服務器是集群,則全民用集群名開始。
PpDStorageRootBuffer是指向擬寫緩沖器地址的指針的指針,該緩沖器包含到驅(qū)動程序存儲的根的路徑。在本發(fā)明的實施例中,路徑是零結(jié)尾的。對該緩沖器的存儲器由API分配。調(diào)用者通過調(diào)用Local FreeAPI響應空出緩沖器。
GetPrinterPackageInfo 730GetPrinterInfo 730函數(shù)使客戶能請求列舉包信息,下面是GetPrinterPackageInfo 730函數(shù)的示例格式HRESULTGetPrinterPackageInfo([in,string,unique]LPCTSRT psz ServerNme,[in] PQUERY_CONTAINER pQuery Container,[out] DWORD*pc GUIDs//GUID count[out] GUID**pp Guid Array,[out] SYSTEMTIME**pp Version Array);Upload Cancel 740UploadCancel 740函數(shù)取消以前引用的對UploadPrinterDriverPackageAPI700的異步調(diào)用。下面是UploadCancel740函數(shù)的示例格式HRESULTWINAPIUploadcancel(In DWORD dwCanceld);dwCancelId是由擬被取消的UploadPrinterDriverPackageAPI700的調(diào)用返回的識別符。DwCancelId參數(shù)的有效值是正的。若異步調(diào)用能被取消,該UploadCancel740函數(shù)返回S_OK。在此情況,Upload Printer Driver Package API700清除,且隨后通知對應的事件。若異步API不能被取消或若dwCancelId的值無效,則UploadCance1740函數(shù)返回E_FAIL。
IprintSetup750在本發(fā)明的實施例中,IPrintSetup750界面在如從假脫機驅(qū)動程序(如Winspool.drv)使用的單個COM界面中展示所有新的界面。Iprintsetup750界面是所有新函數(shù)的封裝處理程序。
OpenDriver( )760OpenDriver( )760函數(shù)對每個驅(qū)動程序建立標識值。下面是OpenDriver()760函數(shù)的示例格式。開始提供數(shù)據(jù)結(jié)構(gòu)。然后概括示例方法格式。
<pre listing-type="program-listing">Struct LOGICAL_DRIVER_ID{GUIDModel Prov Guid;HYPER Version;//HYPER是類型64位有符號整數(shù)}enum eEvironmentEnvX86,EnvIA64,EnvAMD64,EnvAlpha,EnvWin9x}Struct PHYSICAL_DRIVER_ID{LOGICAL_DRIVER_IDlogDriver;eEvironment Env;DWORDcVersion;LANGID LanguageId;}struct DRIVER_OPTIONS{DWORDcbSize;DWORDdwFlags;}HRESULTOpenDriver(IN PCTSTR pszServerName,IN PHYSICAL_DRIVER_ID *pDriver,IN OPTIONAL DRIVER_OPTION *pOptin,OUT HANDLE *pHandle<!-- SIPO <DP n="22"> --><dp n="d22"/>);</pre>SetDriver()770SetDriver()770函數(shù)便于設置與驅(qū)動程序有關(guān)的特定參數(shù)。示例的SetDriver()770函數(shù)具有如下格式HRESULTSetDriverData([in]HANDLE hDriver,[in]PTSTR psz DataName,[in]DWORD Bufsize[in]VOID*pBuf);GetDriverData()780GetDriverData()780函數(shù)使能檢索與驅(qū)動器有關(guān)的特定參數(shù)。示例的GetDriverData()780函數(shù)具有下列格式HRESULTGetDriverData([in]HANDLEhDriver. DWORD BufSize,[out]VOID*pBuf,[out]DWORD*pReqBufSize);CloseDriver()790CloseDriver( )790函數(shù)使能釋放以前打開的驅(qū)動器,從而使安裝驅(qū)動程序的特定客戶上的客戶不活動。示例的CloseDriver( )790函數(shù)具有下列格式HRESULTCloseDriver([in]HANDLE hDriver).
轉(zhuǎn)向圖8,概括一組步驟,用于安裝一個包(如打印機驅(qū)動程序包)到具有如圖4畫出的邏輯結(jié)構(gòu)類型的計算機系統(tǒng)的驅(qū)動程序包存儲300。如上解釋,在安裝包時,不是只安裝包的選擇部分,而是在特定的包容件上安裝整個包。最初在步驟800,保存驅(qū)動程序包存儲300的計算機系統(tǒng)接收安裝完整的目標包到驅(qū)動程序包存儲300的調(diào)用(如UploadPrinterDriverPackage700)。作為響應,在步驟810期間從擬安裝的包提取區(qū)分信息,在本發(fā)明的實施例中,在步驟810期間安裝程序?qū)碜詳M安裝的包中的INF文件的包GUID和版本讀到驅(qū)動程序包存儲300。
接著在步驟820期間,安裝程序訪問包容件450,并判斷在步驟810提取的包GUID是否作為在驅(qū)動程序包容件450中的一個包GUID容件名出現(xiàn)。若提取的包GUID未出現(xiàn),則控制轉(zhuǎn)到步驟830,在那里創(chuàng)造新的包GUID容件并賦予提取的包GUID。于是,在本發(fā)明的示例實施例中,包GUID容件保持具有同一包GUID的所有包的版本??刂迫缓筠D(zhuǎn)到步驟840。
在步驟840創(chuàng)建一版本容件,以保持驅(qū)動程序包的特定版本。在本發(fā)明的實施例中,版本容件按在步驟810提取的版本加標號。例如,版本是賦給驅(qū)動程序包的日期,或者更規(guī)格化的版本名包括指定主發(fā)行,子發(fā)行,和錯誤排除發(fā)行的多個級聯(lián)的數(shù)字字符值。在特定實施例中,版本包括4字節(jié)的粒度(granularity)。
在創(chuàng)建了保存包的新的版本容件后,在步驟850期間包被存入新的版本容件。存儲的包的格式隨選擇的本發(fā)明的實施例而變。然而在特定實施例中,在步驟850期間驅(qū)動程序文件從安裝的原始包的CAB文件提取。至少在某些范例中,驅(qū)動程序的那樣的提取包括解壓縮該文件。按照由INF文件對安裝的包定義的部件創(chuàng)建容件/子目錄,它在文件系統(tǒng)(如子目錄)位置存儲提取的驅(qū)動程序,此位置在第一層由模型及提供者的GUID(MPG)確定,隨后在第二層由版本確定。例如,版本由日期或分段在字符序列指定-以類似于存儲包的版本的方式。另選地,驅(qū)動程序被存儲在由強名識別的容件中。
如圖8的步驟860表示,在存儲文件到驅(qū)動程序包存儲300的目錄結(jié)果之后,描述包括其驅(qū)動程序的存儲的包的元數(shù)據(jù)被加到元數(shù)據(jù)存儲304數(shù)據(jù)庫。保存那樣的數(shù)據(jù)庫便于相當快地搜索集中的驅(qū)動程序存儲300的文件內(nèi)容。注意,步驟860實際上沒有依賴人能和以前特定的步驟,因而能發(fā)生在安裝驅(qū)動程序包的任何時刻。然而通過一直等到包確實安裝在驅(qū)動程序包300,元數(shù)據(jù)存儲的內(nèi)容的準確性被保證??刂齐S后轉(zhuǎn)到結(jié)束(End)。
回到步驟820,若提取的包GUID在驅(qū)動程序包容件450中被識別(表明對現(xiàn)有的包的GUID容件的匹配),則控制轉(zhuǎn)到步驟870。在步驟870,包版本(強名)與現(xiàn)有的包版本比較。若提取的包版本不匹配在包的GUID容件中識別的包版本,則此識別的包特定的版本尚未存在于驅(qū)動程序包存儲300中,控制轉(zhuǎn)到840。另一方面,若提取的包版本匹配在包的GUID容件中識別的包版本,則該包的特定的版本已存在于驅(qū)動程序包存儲300中,控制轉(zhuǎn)到880。
在步驟880,為安裝程序提供改寫該驅(qū)動程序的當前的,認為是同一版本發(fā)選項。若希望改寫,則控制轉(zhuǎn)到步驟850。在匹配包版本容件標號下的以前現(xiàn)存的包的版本被替代。若不希望改寫,控制轉(zhuǎn)到結(jié)束。在結(jié)束時注意,上述包裝方法是以便于區(qū)分包的版本和包中驅(qū)動程序的版本的方式存儲包的過程的示例。本專業(yè)的行家容易理解,看到這里揭示內(nèi)容后,諸步驟能修改及重新安排而同時保持區(qū)分安裝的版本的能力。
轉(zhuǎn)向圖9,概括了一組步驟,為客戶和服務器建立對連網(wǎng)外圍設備的可兼容驅(qū)動程序。在示例步驟中,客戶以使得驅(qū)動程序的不同版本被分別保存的方式,從驅(qū)動程序包存儲300中,將驅(qū)動程序安裝到客戶計算機系統(tǒng)的活動的驅(qū)動器存儲302中。每個驅(qū)動程序版本與單獨識別的存儲在活動的驅(qū)動程序存儲302中的組件的表(如清單)相關(guān)。對每個單獨識別的組件,一個清單存儲在活動的驅(qū)動程序存儲302中。此外,每個驅(qū)動程序清單/表被存儲在對應于保存的客戶上的元數(shù)據(jù)存儲304的Physical Drivers表650中特定驅(qū)動程序版本的一個輸入項中。
存在若干方法,預期能用于同時支持包括具有同一名字的不同文件的同一驅(qū)動程序的多個分別的版本。在本發(fā)明的實施例中通過將每個活動的驅(qū)動程序版本的所有組件/文件存儲到單獨識別的文件系統(tǒng)容件(如子目錄),達到那樣的隔離。然而,許多驅(qū)動程序使用特定的驅(qū)動程序組件(如unidriver),而對每個驅(qū)動程序/版本組合保存拷貝將浪費存儲空間。因此,本發(fā)明的另外實施例對在單獨識別的子目錄容件中的特定的驅(qū)動程序存儲不完整的文件組。替代地,從存儲活動驅(qū)動程序存儲302的多個子目錄中的組件創(chuàng)建完整的驅(qū)動程序。感覺對在元數(shù)據(jù)存儲304中的驅(qū)動程序的清單的內(nèi)容構(gòu)造完整的驅(qū)動程序。
按本發(fā)明的各個實施例區(qū)分在特定子目錄中合并文件/組件的層。在一個實施例中,每個包括一個或多個文件的組件版本被賦予在活動的驅(qū)動程序存儲302中的一個子目錄。在另一個實施例中,對每個驅(qū)動程序版本建立單獨識別的子目錄,而該子目錄包含與那個特定驅(qū)動程序相關(guān)的非共享組件/文件。驅(qū)動程序版本的共享組件包含在活動的驅(qū)動程序存儲302的其它位置。
在本發(fā)明的特定實施例中,保含驅(qū)動程序文件的子目錄被存儲在推廣的目錄下,后者存儲包括應用軟件的有關(guān)軟件模塊的組。隨后通過對特定驅(qū)動程序版本存儲在清單信息504或元數(shù)據(jù)存儲304清單的組件清單,向依賴于對特定驅(qū)動程序版本的驅(qū)動程序文件的客戶軟件提供賦給每個子目錄的單獨的識別符名(如強名)。而且在本發(fā)明的實施例中,包含各種驅(qū)動程序組的子目錄使得其它機器能從客戶機讀出或下載驅(qū)動程序一稱為“共享出來”的目錄。下面(對連網(wǎng)打印機驅(qū)動程序)描述的一組步驟假設,客戶和該客戶尋求建立連接的服務器均支持上述包和驅(qū)動程序版本區(qū)分的能力。
在步驟900中,客戶機請求從打印服務器請求識別特定的設備驅(qū)動程序。例如,此請求是GetPrinterDriver或GetDriverData調(diào)用。接著在步驟910,打印服務器向請求的客戶返回足以在由驅(qū)動程序包存儲300保存的驅(qū)動程序文件系統(tǒng)結(jié)構(gòu)中定位特定驅(qū)動程序版本的驅(qū)動程序識別信息。在本發(fā)明的特定實施例中,打印服務器返回包GUID和版本,和驅(qū)動程序MPG和版本。在本發(fā)明的示例實施例中,此信息足以在元數(shù)據(jù)存儲304,活動的驅(qū)動程序302,或驅(qū)動程序包存儲300文件系統(tǒng)中規(guī)定-驅(qū)動程序版本。而且MPG和版本足以使請求的客戶能通過訪問元數(shù)據(jù)存儲304或活動的驅(qū)動程序存儲302(它也包含驅(qū)動程序版本和相關(guān)的清單)判斷,所需要的打印驅(qū)動程序是否已經(jīng)在客戶機的活動的驅(qū)動程序存儲302中。
接收了識別信息后,在步驟920中客戶機判斷,識別的驅(qū)動程序版本(如MPG和版本)是否已經(jīng)在其活動的驅(qū)動程序存儲302中。若在服務的響應中識別的驅(qū)動程序版本在客戶的活動的驅(qū)動程序存儲302中,則客戶具有為完成與服務器的全兼容互相作用所必需的驅(qū)動程序組件,因而控制轉(zhuǎn)到結(jié)束。然而若識別的驅(qū)動程序未出現(xiàn),控制從步驟920轉(zhuǎn)到步驟930。在那樣客戶機判斷,識別的包GUID和版本是否在已知位置可得到(本地的或在另外機器上某個已知的共享出來的位置,如中央驅(qū)動程序存儲212)。若識別的包GUID和版本不對應于客戶可到的包,則控制轉(zhuǎn)到步驟940。
在步驟940客戶機確定在網(wǎng)絡中識別的包和版本的位置。在本發(fā)明的示例實施例中,客戶機向驅(qū)動程序包存儲300發(fā)出請求。例如,驅(qū)動程序包存儲300通過打印服務器(或中央驅(qū)動程序存儲212)的服務提供,后者保存所有驅(qū)動程序包和它們相應位置(由共享名識別)的表。因此在步驟940,驅(qū)動程序包存儲300返回如\\server(服務器)\share name(共享名),它由客戶使用,請求在步驟910中識別的包版本的拷貝。應注意,本例子利用包版本的識別而不是驅(qū)動程序版本的識別。然而在驅(qū)動程序被共享出來的本發(fā)明另選的實施例中,客戶能夠請求對特定的驅(qū)動器版本的位置。在接收了請求的網(wǎng)絡位置后,控制轉(zhuǎn)到步驟950。
在步驟950中,客戶請求從包(或者驅(qū)動程序)的版本的已知位置上載已識別的該包的版本。例如,上載的版本包括服務器名,共享名,packageGUID和版本。在接收了請求的驅(qū)動程序包版本后,客戶機按照如參考圖8描述的步驟在其本地的驅(qū)動程序包存儲300中安裝該包。控制隨后轉(zhuǎn)到步驟960。
在步驟960中,客戶機引用方法/函數(shù),從包存儲300安裝在步驟910中識別的驅(qū)動程序版本到活動驅(qū)動程序存儲302。在步驟960,在活動的驅(qū)動程序存儲302中創(chuàng)建一個或多個新的子目錄容件,用于存儲安裝的驅(qū)動程序的組件,為新的子目錄提供單獨的識別符名(如MPG和版本),在步驟910識別的對應于該驅(qū)動程序版本的驅(qū)動程序/組件版本的驅(qū)動程序文件從該包拷貝到新的子目錄。隨后控制轉(zhuǎn)到步驟970,在那里更新活動的驅(qū)動程序存儲302的清單信息,使包括與新安裝的驅(qū)動器版本相關(guān)的任何新清單(包括存儲列出構(gòu)成新驅(qū)動程序版本的組件的驅(qū)動程序清單的新文件),且在本發(fā)明的實施例中,在對應于新的活動的驅(qū)動程序的元數(shù)據(jù)存儲304中創(chuàng)建新的輸入項。新的輸入項/清單信息包括通過單獨識別符名列出在構(gòu)成新安裝的驅(qū)動程序版本的活動的驅(qū)動程序存儲302中的組件的驅(qū)動程序清單。通過如在對每個新的驅(qū)動程序版本的元數(shù)據(jù)存儲304中創(chuàng)建新的清單信息/驅(qū)動程序輸入項,并在單獨識別的子目錄中存儲驅(qū)動程序組件/文件的不同版本,上述方法避免了改寫包含同一名字但有不同內(nèi)容(如同一驅(qū)動程序文件的不同版本)的任何驅(qū)動程序文件。然后控制從步驟970轉(zhuǎn)到結(jié)束。
回到步驟930,若識別的包對客戶(本地的或在已知的文件共享上)可得到,控制轉(zhuǎn)到步驟980。在步驟980,若包的版本不存儲在本地,控制轉(zhuǎn)到步驟950。否則若包本地能得到,控制轉(zhuǎn)到960。且在步驟910中識別的驅(qū)動程序版本被安裝在客戶的活動的驅(qū)動程序存儲302中。
在討論了驅(qū)動程序版本如何識別并存入活動的驅(qū)動程序存儲302之后,在圖10中概括了一組步驟,使處理來自于活動的驅(qū)動程序存儲302的特定驅(qū)動程序版本的打印客戶,與使用當前存儲在客戶的活動的驅(qū)動程序存儲302的,已知的驅(qū)動程序版本操作的特定的打印服務器交互作用。
最初在步驟1000,客戶應用程序請求使用服務對象,如對于由特定打印服務器支持的打印機的打印隊列。對一個打印隊列,那樣的請求必須是對由打印隊列驅(qū)動的打印機的可打印區(qū)域,此類數(shù)據(jù)通過封裝程序(wrapper)層(這是操作系統(tǒng)及其API的部分)從打印驅(qū)動程序提供。那樣的請求通過如由文字處理應用的打印請求而起動。接著在步驟1010,操作系統(tǒng)查找對特定打印隊列所需要的正確的打印機版本(此打印驅(qū)動程序版本當前被與當前的隊列有關(guān)的打印服務器使用)。這能以若干已知的對-隊列確定所需打印機驅(qū)動程序的方法的任一種來實現(xiàn)。示例的實施例通過確定驅(qū)動程序的版本加上該驅(qū)動程序本身的一般識別建立以前已知的版本。
接著在步驟1020,打印系統(tǒng)從用于運行特定驅(qū)動程序版本的驅(qū)動程序的清單創(chuàng)建激活的上下文。該激活上下文為操作系統(tǒng)提供搜索路徑,以按照單獨識別的驅(qū)動程序版本訪問驅(qū)動程序組件的版本。該上下文引導用于查出識別的驅(qū)動程序版本的組件的位置的次序。因此,若應用程序(在此例中是操作系統(tǒng)的打印子系統(tǒng))請求Unidrv而未規(guī)定版本(換言之,若它未規(guī)定強名而只是其一部分),激活的上下文提供引起加載特定版本的信息。提供上下文使得能僅僅通過切換從中導出該上下文的驅(qū)動程序清單而從一個驅(qū)動程序組件到另一個地切換應用程序(如切換到共享組件更新版本)??傊せ钜簧舷挛粚诩せ钆c特定驅(qū)動程序版本相關(guān)的特定搜索路徑。
在創(chuàng)建激活的上下文之后,在步驟1030系統(tǒng)根據(jù)激活的上下文加載與特定驅(qū)動程序版本有關(guān)的驅(qū)動程序組件,然后調(diào)用該驅(qū)動程序來完成與特定驅(qū)動程序版本相關(guān)的命令/操作。
接著在步驟1040,驅(qū)動程序能加載附加的文件(如配置文件,幫助程序DLL)。若這樣做,按照在驅(qū)動程序清單中規(guī)定的位置/路徑得到那些組件的版本。在本發(fā)明的實施例中,驅(qū)動程序的組件也能包括定義附加驅(qū)動程序的文件/組件的清單。這些附加文件也由版本信息加上使得在客戶機上完成的特定驅(qū)動程序版本能匹配服務器機器的版本的GUID來識別。這些版本由當前激活的上下文(由驅(qū)動程序及其組件的清單驅(qū)動)來操縱。
最后在步驟1050,在完成提交給驅(qū)動程序的請求后,打印系統(tǒng)抑制該上下文,控制轉(zhuǎn)到結(jié)束。注意,雖然本例子參考網(wǎng)絡打印驅(qū)動程序給出,本發(fā)明能應于其它共享的連網(wǎng)外圍設備,包括傳真機,掃描儀等。
本領(lǐng)域的技術(shù)人員理解,已經(jīng)描述了新的有用的方法和系統(tǒng),用于維護在連網(wǎng)外圍設備環(huán)境中的外圍設備驅(qū)動程序和它們的組成組件??吹搅四軕诒景l(fā)明的原則的許多可能的環(huán)境和設計及完成軟件實用程序及工具程序的靈活性,應該認為這里描述的實施例僅是示例性的,不看作對本發(fā)明的范圍的限止。應用本發(fā)明的專業(yè)的行家認識到,諸實施例能在安排及細節(jié)上加以修改而不背離本發(fā)明的精神。因此,這里描述的本發(fā)明預計,所有那樣的實施例能落入下面權(quán)利要求及其等價物的范疇。
權(quán)利要求
1.用于在連網(wǎng)的機器上維持多個同步活動的連網(wǎng)的外圍設備驅(qū)動程序的組件的方法,其中同時活動的連網(wǎng)的外圍設備驅(qū)動程序的不同組件可能包含帶有同一名字的不同的外圍設備驅(qū)動程序文件,該方法包括建立用于存儲組成連網(wǎng)的外圍設備驅(qū)動程序組件的版本的一組驅(qū)動程序文件的容件;對此容件賦予單獨的識別符名;和將該組驅(qū)動程序文件插入該容件。
2.如權(quán)利要求1的方法,其特征在于,該容件是文件系統(tǒng)子目錄。
3.如權(quán)利要求1的方法,其特征在于,單獨的識別符名包括該設備驅(qū)動程序組件的版本識別。
4.如權(quán)利要求3的方法,其特征在于,版本包括日期。
5.如權(quán)利要求3的方法,其特征在于,版本包括一編碼的多段的值。
6.如權(quán)利要求1的方法,其特征在于,還包括對由連網(wǎng)的外圍設備的服務器保持的外圍設備隊列,請求驅(qū)動程序識別信息;和響應請求的步驟,接收規(guī)定連網(wǎng)外圍設備驅(qū)動程序的特定版本的驅(qū)動程序的識別。
7.如權(quán)利要求6的方法,其特征在于,包括將該驅(qū)動程序識別與當前保持在該目錄結(jié)構(gòu)中的一組驅(qū)動程序版本比較。
8.如權(quán)利要求7的方法,其特征在于,還包括判定該組驅(qū)動程序版本未包括對應于該驅(qū)動程序識別的驅(qū)動程序版本;和上載該驅(qū)動程序版本的拷貝。
9.如權(quán)利要求8的方法,其特征在于,該驅(qū)動程序識別還規(guī)定驅(qū)動程序包的識別,它包括對應于包含連網(wǎng)外圍設備驅(qū)動程序的版本的驅(qū)動程序包版本的版本信息,該方法還包括將驅(qū)動程序包識別與一組可得到的包版本進行比較。
10.如權(quán)利要求9的方法,其特征在于,還包括判定該驅(qū)動程序包識別不對應于在包版本組中的一個包版本;和發(fā)出包括該驅(qū)動程序包識別的查詢到連網(wǎng)的驅(qū)動程序包的目錄。
11.如權(quán)利要求8的方法,其特征在于,上載步驟包括上載包含該驅(qū)動程序的拷貝的驅(qū)動程序包的版本的完整拷貝。
12.如權(quán)利要求1的方法,其特征在于,還包括提供該容件的活動的驅(qū)動程序組件存儲。
13.用于在連網(wǎng)的機器上維持多個同時活動的連網(wǎng)外圍設備驅(qū)動程序的系統(tǒng),其中不同的同時活動的連網(wǎng)外圍設備驅(qū)動程序可能包含帶有同一名字的不同的外圍設備驅(qū)動程序文件,該系統(tǒng)包括建立用于存儲組成連網(wǎng)的外圍設備驅(qū)動程序組件的版本的一組驅(qū)動程序文件的容件的裝置;對此容件賦予單獨的識別符名的裝置;和將該組件驅(qū)動程序文件插入該容件的裝置。
14.如權(quán)利要求13的系統(tǒng),其特征在于,該容件是文件系統(tǒng)子目錄。
15.如權(quán)利要求13的系統(tǒng),其特征在于,單獨的識別符名包括該設備驅(qū)動程序組件的版本識別。
16.如權(quán)利要求15的系統(tǒng),其特征在于,版本包括日期。
17.如權(quán)利要求15的系統(tǒng),其特征在于,版本包括一編碼的多段的值。
18.如權(quán)利要求13的系統(tǒng),其特征在于,還包括對由連網(wǎng)的外圍設備的服務器保持的外圍設備隊列,請求驅(qū)動程序識別信息的裝置;和響應用于請求的裝置,接收規(guī)定連網(wǎng)外圍設備驅(qū)動程序的特定版本的驅(qū)動程序的識別的裝置。
19.如權(quán)利要求18的系統(tǒng),其特征在于,還包括將該驅(qū)動程序識別與當前保持在該目錄結(jié)構(gòu)中的一組驅(qū)動程序版本作比較的裝置。
20.如權(quán)利要求19的系統(tǒng),其特征在于,還包括判定該驅(qū)動程序版本未包括對應于該驅(qū)動程序識別的驅(qū)動程序版本的裝置;和上載該驅(qū)動程序版本的一個拷貝的裝置。
21.如權(quán)利要求20的系統(tǒng),其特征在于,該驅(qū)動程序識別還規(guī)定驅(qū)動程序包的識別,它包括對應于包含連網(wǎng)外圍設備驅(qū)動程序的版本的驅(qū)動程序包版本的版本信息,系統(tǒng)還包括將驅(qū)動程序包括識別與一組可得到的包版本進行比較的裝置。
22.如權(quán)利要求21的系統(tǒng),其特征在于,還包括判定該驅(qū)動程序包識別不對應于包版本組中的一個包版本的裝置;和發(fā)出包括該驅(qū)動程序包識別的查詢到連網(wǎng)的驅(qū)動程序包的目錄的裝置。
23.如權(quán)利要求20的系統(tǒng),其特征在于,用于上載的裝載獲得包含該驅(qū)動程序的拷貝的驅(qū)動程序的版本的完整拷貝。
24.如權(quán)利要求13的系統(tǒng),其特征在于,還包括提供保持該容件的活動的驅(qū)動程序組件存儲的裝置。
25.多層的活動的網(wǎng)絡設備驅(qū)動程序存儲/訪問架構(gòu),包括一驅(qū)動程序版本識別層,包括單獨識別的驅(qū)動程序版本描述,其中驅(qū)動程序版本描述包括組成連網(wǎng)外圍設備驅(qū)動程序版本的組件的表;和一驅(qū)動程序組件層,包括由單獨的識別符名識別的版本專有的組件容件,其中該組件容件保存在驅(qū)動程序版本描述中列出的規(guī)定的組件版本的內(nèi)容。
26.如權(quán)利要求25的多層的活動的網(wǎng)絡設備驅(qū)動程序存儲/訪問架構(gòu),其特征在于,該驅(qū)動程序版本識別層由包括驅(qū)動程序版本描述的數(shù)據(jù)庫實現(xiàn)。
27.如權(quán)利要求25的多層的活動的網(wǎng)絡設備驅(qū)動程序存儲/訪問架構(gòu),其特征在于,該驅(qū)動程序版本識別層由包括單獨識別的驅(qū)動程序版本描述的組的文件系統(tǒng)結(jié)構(gòu)實現(xiàn)。
28.如權(quán)利要求25的多層的活動的網(wǎng)絡設備驅(qū)動程序存儲/訪問架構(gòu),其特征在于,組件包括其子組件的表。
29.如權(quán)利要求28的多層的活動的網(wǎng)絡設備驅(qū)動程序存儲/訪問架構(gòu),其特征在于,該組件包括組成至少一部分構(gòu)成組件的驅(qū)動程序文件的一組驅(qū)動程序文件。
30.如權(quán)利要求25的多層的活動的網(wǎng)絡設備驅(qū)動程序存儲/訪問架構(gòu),其特征在于,對組件的單獨識別符名包括版本識別。
31.如權(quán)利要求25的多層的活動的網(wǎng)絡設備驅(qū)動程序存儲/訪問架構(gòu),其特征在于,對組件的單獨識別符名包括簽署的日期。
32.用于在網(wǎng)絡中保持驅(qū)動程序包的多個版本的方法,其中不同的驅(qū)動程序可能帶有同一名字,該方法包括在目錄結(jié)構(gòu)中建立用于存儲包括一組文件的驅(qū)動程序包版本的新的容件,該組文件包括至少一個包括驅(qū)動程序文件的文件;將一個強名賦給單獨識別驅(qū)動程序包的版本的新的容件;和將該組驅(qū)動程序包版本的文件插入新的驅(qū)動程序包的容件。
33.包括用于使方便在連網(wǎng)機器上保存多個同時活動的連網(wǎng)外圍設備驅(qū)動程序的組件的計算機可執(zhí)行指令的計算機可讀介質(zhì),其中同時活動的連網(wǎng)外圍設備驅(qū)動程序的不同組件可能包括帶有同一名字的不同的外圍設備驅(qū)動程序,該計算機可執(zhí)行指令便于執(zhí)行一方法,包括建立用于存儲組成連網(wǎng)外圍設備驅(qū)動程序組件的版本的一組驅(qū)動程序文件的容件;將唯一的識別符名賦給該容件;和插入該組驅(qū)動程序文件到該容件。
34.如權(quán)利要求33的計算機可讀介質(zhì),其特征在于,該容件是文件系統(tǒng)的子目錄。
35.如權(quán)利要求33的計算機可讀介質(zhì),其特征在于,該單獨的識別符名包括該設備驅(qū)動程序組件的版本識別。
36.如權(quán)利要求35的計算機可讀介質(zhì),其特征在于,該版本包括一日期。
37.如權(quán)利要求35的計算機可讀介質(zhì),其特征在于,該版本包括一編碼的多段的值。
38.如權(quán)利要求33的計算機可讀介質(zhì),其特征在于,還包括計算機可執(zhí)行指令,便于執(zhí)行對由連網(wǎng)的外圍設備的服務器保持的外圍設備隊列請求驅(qū)動程序識別信息;和響應請求的步驟,接收規(guī)定連網(wǎng)外圍設備驅(qū)動程序的特定版本的驅(qū)動程序的識別。
39.如權(quán)利要求38的計算機可讀介質(zhì),其特征在于,還包括計算機可執(zhí)行指令,便于執(zhí)行將該驅(qū)動程序識別與一組當前保持在該目錄結(jié)構(gòu)中的一組驅(qū)動程序版本作比較。
40.如權(quán)利要求39的計算機可讀介質(zhì),其特征在于,還包括計算機可執(zhí)行指令,便于執(zhí)行判定該組驅(qū)動程序版本未包括對應于該驅(qū)動程序識別的驅(qū)動程序版本;和上載該驅(qū)動程序版本的拷貝。
41.如權(quán)利要求40的計算機可讀介質(zhì),其特征在于,該驅(qū)動程序識別還規(guī)定驅(qū)動程序包的識別,它包括對應于包含連網(wǎng)外圍設備驅(qū)動程序的版本的驅(qū)動程序版本的版本信息,還包括計算可執(zhí)行指令,便于執(zhí)行將驅(qū)動程序包識別與一組可得到的包版本進行比較。
42.如權(quán)利要求41的計算機可讀介質(zhì),其特征在于,還包括計算機可執(zhí)行指令,便于執(zhí)行判定該驅(qū)動程序包識別不對應于在包版本組中的一個包版本;和發(fā)出包括該驅(qū)動程序包識別的查詢到連網(wǎng)的驅(qū)動程序的目錄。
43.如權(quán)利要求40的計算機可讀介質(zhì),其特征在于,上載步驟包括上載包含該驅(qū)動程序的拷貝的驅(qū)動程序包的版本的完整拷貝。
44.如權(quán)利要求33的計算機可讀介質(zhì),其特征在于,還包括計算機可執(zhí)行指令,便于執(zhí)行提供保持該容件的活動的驅(qū)動程序組件存儲。
45.包括便于在網(wǎng)絡中保持多個驅(qū)動程序包的版本的計算機可執(zhí)行指令的計算機可讀介質(zhì),其中不同的驅(qū)動程序包可能帶有同一名字,計算機可執(zhí)行指令便于執(zhí)行一方法,包括在目錄結(jié)構(gòu)中建立用于存儲包括一組文件的驅(qū)動程序包版本的新的容件,該組文件包括至少一個包括驅(qū)動程序文件的文件;將一個強名賦給單獨識別驅(qū)動程序包的版本的新的容件;和將該組驅(qū)動程序包版本的文件插入新的驅(qū)動程序包的容件。
全文摘要
揭示了網(wǎng)絡外圍設備驅(qū)動程序維護架構(gòu)和對應的方法。該架構(gòu)包括驅(qū)動程序版本識別層,它包括一組驅(qū)動程序描述。每個驅(qū)動程序版本包括一組構(gòu)成每個特定的驅(qū)動程序版本的組件版本。在驅(qū)動程序版本識別層下的驅(qū)動程序組件層包括單獨識別的組件版本(容件),后者包括組成由驅(qū)動程序版本識別的組件版本的驅(qū)動程序文件的組。揭示了用于保持多個同時活動的連網(wǎng)外圍設備驅(qū)動程序的方法。該方法包括在機器上以包括由機器完成的下列步驟的方式存儲新的驅(qū)動程序。最初,機器在目錄結(jié)構(gòu)中建立一容件,用于存儲組成驅(qū)動程序組件的版本的一組驅(qū)動程序文件。對該新的容件賦予單獨的識別符名。一組與組件版本相關(guān)的驅(qū)動程序文件被插入該容件。
文檔編號G06F13/10GK1534449SQ20041003232
公開日2004年10月6日 申請日期2004年3月26日 優(yōu)先權(quán)日2003年3月31日
發(fā)明者R·E·奧萊斯, R E 奧萊斯, E·G·安托諾夫, 安托諾夫, M·P·郝洛爾, 郝洛爾, T·J·萊特爾, 萊特爾, T·羅斯, 汀, A·L·汀 申請人:微軟公司