可以利用 txtsetup.sif 向你的安裝檔案中添加第三方驅動, 修改安裝Windows 的最小系統需求, 添加或刪除註冊表預設, 以及更多。
製作自己的安裝光碟,這個檔案就必須仔細研究一下,有用的地方不少。txtsetup.sif是製作安裝光碟中極為重要的一個檔案,裡面記錄了安裝檔案所在位置以及安裝時檔案拷貝的目標資料夾,實際作用其實就是把指定的檔案按要求拷貝到預設好的位置上最可能用到的是以下幾段:
[SourceDisksNames.x86]——用代碼表示源檔案的位置
[WinntDirectories]——用代碼表示檔案拷貝的目標資料夾,其根目錄為 %WinDir%,即安裝指定的Windows資料夾
[SourceDisksFiles]——根據前面設定的代碼表示檔案拷貝的具體細節
下面3段為集成 SATA、SCSI 等驅動時所用:
[HardwareIdsDatabase] —— 硬體標識
[SCSI.Load] —— SCSI驅動載入
[SCSI] —— SCSI設備說明
[HiveInfs.Fresh] —— 全新安裝時根據指定的 inf 檔案中的欄位添加註冊表信息
[HiveInfs.Upgrade] —— 升級安裝時根據指定的 inf 檔案中的欄位添加註冊表信息
若想把 txtsetup.sif 中的某行移除掉,那么應該在此行前添加一個分號(;)或是把這行整個的刪掉,通常,把 txtsetup.sif 中的某行刪掉之後,那么還需要把 dosnet.inf 中的對應行刪掉。如果想添加一行,那就比較複雜了,下面是 txtsetup.sif 的某個示例行:
locsecw.chm = 1,,,,,,,21,0,0,defrag.chm
locsecw.chm 是 Windows 安裝檔案中的某個檔案。
1 代表著它是個初始(RTM)XP 檔案,通常你會看到 1 或 100,1 的定義來自於[SourceDisksNames.x86],表示源檔案為原版本且在光碟上i386資料夾,100表示源檔案為SP補丁中較新版本的檔案,100 代表它是個SPx 檔案(SP1,SP2..SPx);
21 代表著它的複製目的地,其相對於 %windir% 資料夾,在這裡,21 是讓安裝程式把 locsecw.chm 複製到 %windir%help。具體哪些值代表哪些目錄可以在 [WinntDirectories] 中找到。一般情況下,[WinntDirectories] 中定義的目錄都是相對於 %windir% 資料夾的子目錄,這就意味著你把檔案添加到 txtsetup.sif 中,那么它就會被複製到 %windir% 資料夾中(可能在其子資料夾中)。
第一個0為升級代碼位,含義為:(升級時)
0-總拷貝檔案
1-安裝資料夾中有該檔案才拷貝
2-安裝資料夾中有該檔案時不拷貝;
3-不拷貝檔案
第二個0為新安裝代碼位,含義同上(全新安裝時)另外據說此代碼若不為0,其前面需多加2個逗號
defrag.chm表示將目標檔案改名為此,因此,這一行表明,不管是升級還是全新安裝都將源檔案locsecw.chm拷貝到%WinDir%\help資料夾下並改名為defrag.chm,就如在示例中所看到的一樣,可以在行的末尾重命名要複製的檔案。Microsoft 用它來區分 Windows XP Home 和 Pro 版。Home 的檔案帶有P, Pro 的檔案帶有 W。W 可能是代表著工作站(WorkStation) 的意思,P 可能是代表著個人版(Personal) 的意思,Windows XP Home 最初就叫做 Whistler Personal。
示例;
cmconW.chm = 1,,,,,,,21,0,0,cmconcepts.chm - xp pro txtsetup.sif
cmconP.chm = 1,,,,,,,21,0,0,cmconcepts.chm - xp home txtsetup.sif
就如所見的一樣,XP Home 和 XP Pro 的檔案並不相同,但是最後複製到系統中的檔案名稱稱都一樣。同時請注意,txtsetup.sif 支持長檔案名稱。
現在來看看另一行:
autofmt.exe = 1,,,,,,_x,2,0,0,,1,2
“_x”代表著這個安裝盤上的這個檔案沒有經過壓縮,如果沒有這個,那么安裝程式會認為這個檔案已被壓縮過了。這個對於保證安全性和可靠性很重要。每個 XP 檔案都被列在了“layout.inf”中,包括這個檔案的大小(按位元組計算),很明顯,一個檔案的壓縮前和壓縮後的大小是不會相同的。如果“txtsetup.sif”告訴安裝程式“某個檔案未被壓縮”,那么安裝程式就會在“layout.inf”中查找它的檔案大小以確保這個檔案未經修改或是損壞。如果檔案大小與“layout.inf”中記錄的不同,那么 XP 安裝程式就會報錯並停止安裝。這個能夠保證安裝程式的安全性,以確定檔案是否被修改過。它還能驗證檔案是否已被損壞,如果檔案已被損壞,那么稍後安裝時就可能會出現問題。如果以“_x”為關鍵字在“txtsetup.sif”進行搜尋,那么就能找到所有未經壓縮的 Windows 安裝檔案。
有個很重要的事情就是,txtsetup.sif 並沒有告訴安裝程式應當從哪裡獲取安裝檔案。它唯一的功能就是把按照正確的檔案名稱把檔案複製到正確的目錄中。
舉例說明:
比如說,把 tweakui 集成到 Windows 安裝檔案中,但是不想使用無人值守的方式。那么利用 txtsetup.sif 可以很輕鬆地做到這點。
第一步:下載 Tweak UI:下載後,用 WinRAR 把 tweakui.exe 提取出來,或是先安裝這個程式再把windows\system32 中的tweakui.exe 複製出來;
第二步:把 tweakui.exe 複製到 XP 安裝檔案所在的資料夾中,把 XP 安裝盤上的檔案複製到硬碟上,然後把 tweakui.exe 放到 i386 資料夾中;
第三步:修改 txtsetup.sif 和 dosnet.inf,把以下行添加到 dosnet.inf 中:
d1,tweakui.exe
把以下行添加到txtsetup.sif 中:
tweakui.exe = 1,,,,,,,2,0,0
現在運行安裝程式,dosnet.inf 會把 tweakui.exe 複製到 C:\$WIN_NT$.~LSi386 中,接著重啟之後,就會進入文本安裝模式了,而 txtsetup.sif 會把 C:\$WIN_NT$.~LSi386 中的 tweakui.exe 複製到 C:\Windows\System32 中,當整個安裝進程完成之後,若要運行 tweakui.exe,那么只需轉到 “開始”>”運行”>輸入:tweakui,點擊確定就行了。那為什麼不在新添加的行中使用“_x”呢?這是因為 tweakui.exe 不是 XP 的初始安裝檔案,XP 不需要檢查它(因為它未在 layout.inf 中進行定義).
[B]利用“Txtsetup.sif”和“xpinstall”集成安裝打補丁[/B]
將補丁以及xpinstall等相關檔案準備好,放在同一資料夾下,並配置好“xpinstall.xml”(用xpinstall來安裝補丁比較美觀)。用WinRAR將這些檔案做成自解壓壓縮檔案“xp_patch.exe”,並在自解壓選項的模式中指定解包到臨時資料夾和全部隱藏,以及指定“xpinstall”為解壓後運行的程式,用“makecab”壓縮該檔案,並把檔案拷貝到i386資料夾中
在 [SourceDisksFiles] 中添加:
xp_patch.exe = 1,,,,,,,1,0,0
在“winnt.sif”中的 [GuiRunOnce] 添加:
Command0="%WinDir%\xp_patch.exe"
從硬碟安裝時,安裝程式會先利用“dosnet.inf”中的定義把檔案複製到“C:\$WIN_NT$.~LS”中。然後,安裝程式才會利用 Txtsetup.sif 把這個資料夾中的檔案複製到對應的資料夾中。因為只能利用“txtsetup.sif”把檔案複製到“%windir%”資料夾下,所以它的用途有限,主要是用它來添加註冊表預設和驅動。
[B]用“txtsetup.sif”來添加自定義的註冊表條目[/B]
每次文本安裝模式即將結束時,安裝程式就會利用“txtsetup.sif”中的某些定義來創建註冊表(檔案複製結束時)。如果是全新安裝的話,安裝程式就會按照“txtsetup.sif”的 [HiveInfs.Fresh] 區段中的定義來生成註冊表。可以使用這個區段來添加自己的註冊表條目。如果已經把註冊表的設定保存為一個“.reg”檔案的話,那么需要用“.inf”檔案導入這些設定。將“.reg”檔案重命名為“settings.reg”並將其置入 i386 資料夾中,將以下內容複製到一個新檔案中並另外儲存為 settings.inf,然後將其保存到 i386 資料夾中。
[Version]
Signature = "$Windows NT$"
DriverVer=07/01/2001,5.1.2600.1106
[update]
HKLM,"Software\Microsoft\Windows\CurrentVersion\RunOnce",
"MyUpdate",0x00020002,"%systemroot%\regedit.exe /s %systemroot%\system32\settings.reg"
[B]添加 inf 條目[/B]
如果已經有了一個“.inf”檔案,那么將其複製到 i386 資料夾中並將其重命名為“settings.inf”,並確保這個“.inf”檔案中有個名為 [update] 區段,只有這個區段下的設定會被使用。
可以用 makecab.exe 把 settings.inf 壓縮成 settings.in_,但這只是可選的,添加方法是打開 txtsetup.sif 並轉到[HiveInfs.Fresh],按以下添加一行:
[HiveInfs.Fresh]
AddReg = hivedef.inf,AddReg
AddReg = hivesys.inf,AddReg
AddReg = hivesft.inf,AddReg
AddReg = hivecls.inf,AddReg
AddReg = hiveusd.inf,AddReg
AddReg = dmreg.inf,DM.AddReg
AddReg = settings.inf,update
再把以下 2 行添加到“txtsetup.sif”的 [SourceDisksFiles] 段下,如果要使用一個 .reg 檔案,那么就要添加第二行,不需要的只需添加第一行:
settings.inf =1,,,,,,_x,3,,3
settings.reg =100,,,,,,,2,0,0
把以下 2 行添加到“dosnet.inf”的 [Files] 段下,如果要使用一個“.reg”檔案,那么就要添加第二行,不需要的只需添加第一行:
d1,settings.inf
d1,settings.reg
現在開始安裝 XP,當文本安裝模式結束時就會導入註冊表設定了,不需要使用無人值守安裝方式。
[B]疑難解答[/B]
文本模式安裝程式所用的解釋引擎不同於 SetupAPI,因此,處理相關的“inf”檔案時要小心點以免設定無效。當編輯用於文本安裝模式下用的“inf”檔案時,應當遵循以下方針:
1 - 避免 strings. 就是那些在 [strings] 下定義的字元串,聽說在文本安裝模式下無法使用字元串;
2 - 總是使用引號,請儘可能地用引號括住設定;
3 - 避免縮寫,在一般的 inf 中可以使用 0x1 或 0x1002. 而在文本安裝模式下,以上值不起作用.;
4 - 避免不必要的空格,這個可能不是強制性的,但最好這么做;
5 - 無法確定能用文本安裝模式 .inf 做什麼事情? 那么請參考 hivesys.inf,hivesft.inf。
以下是 5 個不同的“.inf”設定,1 是正確的,而其它的則無法工作且文本模式安裝程式會報錯:
1 - HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Hotfix\KB826939","Installed",0x00010001,1
2 - HKLM,SOFTWARE\Microsoft\Windows NT\CurrentVersion\Hotfix\KB826939,"Installed",0x00010001,1
3 - HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Hotfix\KB826939","Installed",0x10001,1
4 - HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Hotfix\KB826939","Installed"",0x00010001,1
5 - HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Hotfix\KB826939",Installed,0x00010001,1
1 –此行沒有任何錯誤,注意第二段和第三段都用引號括住了,必須用引號將其括住;
2 –此行無法工作,因為第二段沒用引號括住;
3 - 此行無法工作,因為 0x00010001 被搞成了 0x10001,在正常情況下沒有問題,但是在文本安裝模式下,安裝程式就無法理解它的含義了,有所懷疑的話,請不要使用任何縮寫;
4 - 此行無法工作,因為 Installed 後有兩個引號;
5 - 此行無法工作,因為 Installed 沒有被引號括住。