|
論壇說明 | 標記討論區已讀 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2004-12-03, 04:07 AM | #1 |
榮譽會員
|
讓Windows 2000自動安裝驅動程式
讓Windows 2000自動安裝驅動程式
把Service Pack 2整合到Windows 2000安裝程序中,只是我們萬里長征的第一步,我們還需要把以前手工進行操作的驅動程式的安裝整合到Windows 2000的安裝文件中,需要說明一點的是,這種驅動程式的整合方式是關於Windows的OEM版本的製作方式。 ----------------==========================小知識==================------------- OEM版本的Windows Original Equipment Manufacturer,原始設備生產商的縮寫。一些著名的品牌商品製造商,常常因為自己的廠房不能達到大批量生產的要求,又或者需要某些特定的零件,因此向其他廠商求助,這些伸出援手的廠商就被稱為OEM。 對於Windows來說,由於像Dell、HP等PC廠商不能生產Windows 2000但是又需要大批量Windows,因此就和微軟形成OEM關係,同時由於需要商品是大批量的,所以也會在一定程度上降低單價,並且為OEM 版本的Windows進行一定程度上的設定——比如增加驅動程式、應用程式等。 這也是我們可以自動安裝以下驅動程式的源泉——製作類似於OEM版本的Windows。 ----------------==================================================-------------- 1. RAID容錯式獨立磁碟陣列、SCSI磁牒控制器驅動安裝 對於Windows 2000/XP之類的關於NT內核的操作系統,即插即用硬體的安裝可以安排在系統安裝之後再進去行(即系統安裝到GUI模式階段才開始安裝);不過對於SCSI、RAID容錯式獨立磁碟陣列卡的驅動安裝情況可能有所不同,如果你需要將操作系統安裝在RAID容錯式獨立磁碟陣列或SCSI硬碟上,那麼它們的 驅動程式必須在安裝系統之前就正確載入(它們的安裝時機應是位於系統安裝的TextMode階段)。關於這樣的原因,磁牒控制器之類的硬體和一般的即插即用硬體的驅動程式安裝方式肯定是不一樣的,我們應該區別對待。 安裝此類驅動程式一般的模式是將硬體的驅動程式拷貝到軟碟上,這樣在系統開始安裝的時候按下F6,然後系統會為你載入軟碟中的驅動程式。這樣的驅動程式軟碟根目錄下肯定有一個名為Txtsetup.oem的文件,它會告訴安裝程序怎樣安裝SCSI、RAI D卡的驅動程式,至於這個文件的詳細資料我們不再詳細加以介紹,如果你有興趣的話,可以參考微軟的驅動開發包中相關部分。 實例——在最初的我安裝Windows 2000的時候,總是先將IWill SIDERAID容錯式獨立磁碟陣列 100的驅動程式放入軟式磁碟機,然後再安裝的初期及時按下F6來載入RAID容錯式獨立磁碟陣列卡的驅動程式,通過以下方式改造可以讓我的RAID容錯式獨立磁碟陣列卡的驅動直接載入(就如同它已經內裝了驅動程式一樣)。 (1)把Windows 2000原版光碟上的所有檔案拷貝到f:\win2k下,並在i386目錄下建立一個$OEM$ 子目錄(f:\win2k\i386\$OEM$); (2) 在$OEM$目錄下新增TEXTMODE子目錄(f:\win2k\i386\$OEM$\TEXTMODE); (3) 把RAID容錯式獨立磁碟陣列卡的Windows 2000驅動程式都拷貝到TEXTMODE目錄下(RAID容錯式獨立磁碟陣列卡隨盤驅動程式可能還包括Windows NT/XP的驅動程式,請拷貝相應的文件,Windows 2000驅動程式一般位於Win2000目錄下),通常驅動程式包括以下幾個文件: Driver.sys Driver.dll Driver.inf Driver.cat Txtsetup.oem 我這裡是: Disk1 Hpt3xxNT.sys Hpt3xxNT.inf TXTSETUP.OEM 注意: A.有的驅動程式可能並不包括.cat文件和.dll文件,但肯定要包含TxtSetup.oem、.inf和.sys文件; B.所有在Txtsetup.oem文件中出現的文件都應該拷貝到textmode目錄中; C.這些文件還必須拷貝到回應文件中OemPnPDriversPath鍵指定的相關目錄中,比如我們後文是f:\win2k\i386\$OEM$\$1\PnPdrvrs\RAID容錯式獨立磁碟陣列100 D.所有TextMode目錄中的檔案名還必須列舉在回應文件的 [OEMBootFiles]段中。 (4) 用任何文本編輯器編輯Txtsetup.oem文件,移除任何和Windows 2000驅動無關的訊息,並且把 [disks] 段中的目錄相關資訊改成指向當前目錄,比如我這裡是: [Disks] d1 = "HPT370 UDMA/ATA100 RAID容錯式獨立磁碟陣列 Driver Diskette", \Disk1, \ d2 = "HPT370 UDMA/ATA100 RAID容錯式獨立磁碟陣列 Driver Diskette", \Disk1, \Winnt d3 = "HPT370 UDMA/ATA100 RAID容錯式獨立磁碟陣列 Driver Diskette", \Disk1, \Win2k 修改成: [Disks] d1 = "HPT370 UDMA/ATA100 RAID容錯式獨立磁碟陣列 Driver Diskette", Disk1, . 注意: A.上邊的「d1 = "HPT370 UDMA/ATA100 RAID容錯式獨立磁碟陣列 Driver Diskette", Disk1, .」後邊有一個表示當前路徑的英文句號「.」; B.由於我們修改了目錄訊息(只保留了一個d1),所以請將後文相關部分的d3也改成d1(標幟Windows 2000驅動程式): [Files.scsi.Hpt3xx2K] driver = d1, HPT3xxNT.sys, Hpt3xxNT inf = d1, hpt3xxNT.inf, Hpt3xxNT (5) 用文本編輯器編輯unattend.txt並且加入以下段: [MassStorageDrivers] " Iwill SIDE RAID容錯式獨立磁碟陣列100 IDE RAID容錯式獨立磁碟陣列 Controller for Win2000" = "OEM" 其中的「Iwill SIDE RAID容錯式獨立磁碟陣列100 IDE RAID容錯式獨立磁碟陣列 Controller for Win2000」來自於Txtsetup.oem文件[scsi]段中標誌Windows 2000控制器的文字。 (6)在回應文件中,新增 [OEMBootFiles]段,將TextMode目錄下的所有文件列表填寫進去,我這裡是: [OEMBootFiles] Disk1 Hpt3xxNT.sys Hpt3xxNT.inf TXTSETUP.OEM 注意: 如果你的電腦上有多個儲存於控制卡,請只將啟動設備的驅動程式加入回應文件的[MassStorageDrivers] 和[OEMBootFiles]段中,至於其它儲存於設備的驅動程式,我們可以按照後文「即插即用硬體驅動安裝」中介紹的方法來安裝。 (7)為了保證Windows安裝程序自動去搜尋我們增加進去的第三方驅動程式,我們還需要在回應文件中[Unattended]中增加一行: OemPreinstall=Yes 2. 即插即用硬體驅動安裝 即插即用硬體驅動的安裝我們不但可以安裝Windows不能識別的硬體的驅動程式,並且可以昇級Windows可以正確識別的硬體驅動,我們需要做的就是將硬體的驅動程式分目錄放好,並且在回應文件中指定驅動程式存放的位置即可。 (1)目錄結構的建立 本文需要安裝、昇級的驅動包括AU10、V3800和CMD DMA66,所以我們只需要建立三個目錄AU10、V3800和CMD66即可,這些驅動程式的預設路徑位於$OEM$\$1目錄下,為了目錄結構更加明瞭,我在$1下新增了一個PnPDrvrs目錄來專門存放這三種驅動程式的三個目錄;另外我們前邊說過 「RAID容錯式獨立磁碟陣列、SCSI磁牒控制器驅動安裝」的驅動程式也需要拷貝到這個目錄下,所以加上HPT370應該為四個目錄, 2)為Windows安裝程序指定驅動程式目錄 回應文件的 [Unattended]段中應該包括如下選項: [Unattended] OemPreinstall=Yes DriverSigningPolicy=Ignore OemPnPDriversPath=" PnPDrvrs\Au10; PnPDrvrs\v3800; PnPDrvrs\cmd; PnPDrvrs\HPT370" 說明: 1.即插即用硬體的驅動可以儲存分類儲存在不同的目錄中,每個目錄都需要在回應文件的[unattend]段中指定路徑(相對於$OEM$\$1的路徑),路徑之間以「;」分隔(我們這裡需要安裝V3800、CMD和AU10驅動,所以有在OemPnPDriversPath中指定PnPDrvrs\Au10、PnPDrvrs\v3800、PnPDrvrs \cmd等不同的路徑,它們之間以分號分開); 2.為了防止沒有通過微軟的WHQL認證的驅動安裝失敗,需要指定DriverSigningPolicy=Ignore來忽略WHQL認證檢查。 3.所有的驅動程式必須都是可以通過.inf來進行安裝,對於那些必須執行Setup.exe才能進行安裝的驅動不能採用此法安裝。 四、自動安裝應用程式 前面我們已經完成了Windows 2000系統和硬體驅動的安裝,現在我們來完成那些一般的應用軟體的自動安裝和組態,這裡簡化一下就只為你安裝IE 5.5 SP2、DirectX 8.1、Windows Media Player 7.1和ActivePerl等。 1.常用的兩種安裝方式 我們可以通過兩種方式來使Windows安裝程序為你自動安裝應用程式,第一種方式是借助於Cmdlines.txt這個文件,第二種方式是通過在回應文件的[GuiRunOnce]段來完成。 (1)CMDLines.txt方式 Cmdlines.txt文件位於$OEM$目錄下,文件格式如下: [Commands] 「command 1」 「command 2」 「command 3」 說明: A.「Command 1」、「Command 2」和「Command x」分別代表你需要Windows為你安裝的程序,可以是可執行文件、批次處理文件等等,一般位於$OEM$目錄和其子目錄中;需要注意的是所有的指令必須加上引號。 B.所有通過Windows Installer安裝(直接執行.msi文件進行安裝)的應用程式不能採用這種方式安裝。 實例:我這裡已經將IE 5.5 SP2、DirectX 8.1和Windows Media Player 7.1下載下來,分別儲存在F:\win2k\I386\$OEM$下的IE5.5、WMP71和DirectX目錄中,然後在$OEM$目錄中新增三個批次處理文件InstDX8.bat、InstIE5.bat和InstWMP7.bat,內容分別如下 : InstDX8.bat @echo off echo Installing DirectX 8.1a echo. echo Loading... directx\dx81ntchs.exe /Q /R:N InstIE5.bat .\ie5.5\Ie5setup.exe /Q:A /C:"ie5wzd /S:""#e"" /Q /R:N" InstWMP7.bat @echo off echo Installing Windows Media Player 7.1 echo. echo Loading... wmp71\mp71.exe /Q:A /R:N 說明:上述的批次處理文件中的參數/Q表示無提示安裝(自動安裝當然需要無提示^_^),/R:N表示安裝之後不重新啟動,這樣可以保證將所有的程序一次安裝完畢。 現在CMDLines.txt中增加相應以下內容: [Commands] 「.\InstDX8.bat」 「.\instWMP7.bat」 「.\instie5.bat」 注意:為了保證Windows安裝程序會自動尋找執行CMDlines.txt,你同樣需要在回應文件的[unattend]段中指定OemPreinstall = Yes。 (2)GuiRunOnce方式 這裡我們以安裝ActiveState公司有名的ActivePerl為例加以介紹。在回應文件中的[GUIRunOnce]段中增加以下內容: rem Perl from http://www.activestate.com/ Start /wait msiexec /qb /i perl-5.6.0-ds.msi TARGETDIR="C:\" PERL_PATH="Yes" --------------=================小技巧========================------------- 長檔案名的問題 由於Windows安裝的時候採用的是8.3文件格式,對長檔案名不能很好的支持,怎麼辦呢?我們可以在$OEM$目錄中的每個子目錄中建立一個$$RENAME.TXT file,文件格式如下: [section name] short name 1 = 「long name 1「 short name 2 = 「long name 2「 --------------=================小技巧========================------------- 五、自動組態程序設定 驅動程式Windows 2000可以說明 你完成,應用程式的安裝Windows 2000也可以替代你去實現,可是應用程式的組態呢?比如像我一樣,心愛的下載軟體FlashGet的代理伺服器設定就是一個要花費比較長的時間來輸入的,難道每次都來手工Type…… 1.註冊表匯入法 對於只是儲存在註冊表中的最簡單的應用程式組態,我們可以將這個組態儲存為一個Reg文件,並放在$OEM$目錄中,比如我的FlashGet的代理伺服器組態——FGProxy.REG,然後在CMDLines.txt中增加一項: [Commands] " regedit /s FGProxy.reg " 說明:/s參數可以讓Regedit在將FGProxy.reg增加到註冊表中時不會提示我們。 2.使用Sysdiff自動組態應用程式 如果你對註冊表沒有熟悉到可以知道你需要的應用程式組態在註冊表中的儲存位置,SysDiff可以說明 你。Sysdiff是Windows NT中內裝的一個小工具(Windows 2000用戶只有從Windows 2000 Resource Kit中得到),主要用途就是用來檢視安裝應用程式前後註冊表和硬碟上文件的變化,下邊我們就以如何安裝、組態FlashGet為例來加以介紹。 (1)安裝一個全新的操作系統,然後執行以下指令得到系統的原始抓圖 : sysdiff /snap f:\sysdiff\snap.img (2)安裝Flashget。 (3)FlashGet安裝、組態完畢後,再執行以下指令看系統有什麼變化: sysdiff /diff f:\sysdiff\snap.img f:\sysdiff\diff.img (4)將應用程式整合在Windows安裝目錄中 sysdiff /inf /m f:\sysdiff\diff.img f:\win2k\i386 說明:/M參數用來將應用程式的快捷鍵增加到「開始」表單中。 六、其它選項調整 到此為止我們的Windows 2000安裝程序應該算是「武裝到了牙齒「,可是你有沒有想到更偷懶一些,讓Windows幫你輸入安裝序列號、甚至幫你組態網路設定和IE代理相關? 1. 自動輸入序列號 Windows 2000安裝的時候需要你輸入一個25位的註冊碼,我們也可以省卻輸入之苦的(請尊重Windows版權,用你自己的註冊碼註冊)。 在回應文件中的[UserData]段中,新增一個ProductID鍵值,並且賦值為自己的Windows 2000註冊碼: [UserData] FullName = "cLinuxer" OrgName = "Linux-China" ComputerName = "1pig" ProductID= "xxxxx-xxxxx-xxxxx-xxxxx-xxxxx" OK,現在Windows 2000安裝程序會替代你輸入註冊碼。 -----------================小技巧==================----------------- Windows 2000免輸註冊碼令類方法 其實我們可以編輯Windows 2000安裝目錄下的i386目錄中的SETUPP.INI文件,將其中的Pid=52273000後邊的三位改成270,以後你安裝Windows 2000同樣不需要輸入註冊碼。 修改後SETUPP.INI文件內容如下: [Pid] ExtraData=7376666563697363646E0C297ACFA6 Pid=52273270 -----------=======================================------------------ 2. 在安裝的時候選項分區 也許有的朋友已經發現,通過上述設定的安裝程序來安裝Windows還有一個缺陷——Windows安裝分區是自動選項的,我們不能在安裝程序中指定分區!◎#¥% 在回應文件中新增[Data]段,並輸入以下訊息可以讓你在安裝程序中選項安裝分區。 [Data] AutoPartition = 0 Unattendmode = Yes MSDosInitiated = "0" OemSkipEula=Yes 七、硬碟安裝 & 光碟安裝 通過以上步驟,我們已經設定了高度自動化的Windows 2000安裝程序,我們可以從硬碟直接安裝或者燒到光碟上從光碟啟動進行安裝,不過需要注意的是硬碟和光碟安裝的目錄結構和操作方式還是有些區別的。 1. 硬碟安裝 如果從硬碟上使用安裝程序來安裝Windows, $OEM$目錄應該位於i386目錄下,並且回應文件應該位於i386目錄下,這裡假設檔案名為unattend.txt,然後執行以下指令進行安裝: DOS下: Winnt /u:unattend.txt /s:f:\win2k\i386 Windows下: Winnt32 /unattend:unattend.txt 2. 光碟安裝 如果你要從光碟啟動進行安裝,首先需要把$OEM$目錄放在光碟的根目錄下(和i386是同級目錄),而不是位於i386目錄下,同時在i386目錄下新增一個名為WinNT.sif的文本$OEM$目錄結構 $OEM$ $OEM$目錄根據你安裝方式的不同放置位置有所不同——光碟安裝位於光碟的根目錄下,硬碟安裝位於i386目錄下。如果你在回應文件中設定了OEMFILESPATH鍵值,你也可以將$OEM$放在Windows安裝程序可以訪問的任何地方。 $OEM$\textmode $OEM$\textmode子目錄包含有SCSI、RAID容錯式獨立磁碟陣列卡的驅動程式或者HALS(硬體抽像層驅動),該目錄下需要至少一個Txtsetup.oem、一個inf和一個sys文件,而且這些文件必須在回應文件的 [OEMBootFiles]段中列出。 $OEM$\$$ $OEM$\$$子目錄等同於%systemroot%或者%windir%指定的路徑(一般是c:\Winnt——這裡假定Windows 2000安裝在C碟),比如$OEM$\$$\System32下的所有文件都會被拷貝到%windir%\System32目錄下。 $OEM$\$1 $OEM$\$1等同於%systemdrive%環境變數指定的路徑。舉個例子來說,加入Windows 2000安裝在C碟,則$OEM$\$1等同於D。 $OEM$\$1\pnpdrvrs 你也可以通過在$OEM$\$1\pnpdrvrs子目錄下為Windows 2000指定即插即用驅動程式,該檔案夾中的所有內容都會被拷貝到%systemdrive%\pnpdrvrs下,這個路徑可以通過回應文件中的OemPnPDriversPath鍵值來指定。 $OEM$\$1\Sysprep $OEM$\$1\Sysprep目錄是一個可選項,只有當你使用Sysprep方式安裝才需要,詳細情況請參照相關資料,由於與本文內容無關,這裡不再贅述。 $OEM$\drive_letter 在TextMode安裝階段$OEM$\drive_letter目錄下的所有文件會被拷貝到相應的驅動器上。比如$OEM$\D下的所有文件/資料夾會被拷貝到D:碟上,$OEM$\E\Misc下的所有內容將被拷貝到E:盤根目錄下的Misc子目錄。 文件,文件內容等同於回應文件Unattend.txt。 |
送花文章: 3,
|