1、.INF文件是什么

       .INF是 Device Information File 的縮寫,是微軟公司為供硬件設(shè)備制造商發(fā)布其設(shè)備驅(qū)動(dòng)程序而發(fā)展的——許多硬件設(shè)備的驅(qū)動(dòng)程序都是使用 .INF文件來(lái)安裝的。.INF文件從 Windows3.X 時(shí)代就開始大量被使用了。
       .INF 文件是一種具有特定格式的純文本文件,我們可說(shuō)它是一種安裝腳本(SetupScript)。雖然 .INF 只是純文本文件,但是當(dāng)我們?cè)谖募芾砥鱡xplorer對(duì) .INF文件按鼠標(biāo)右鍵後,在右鍵菜單上就會(huì)出現(xiàn)“安裝”命令,這是因?yàn)槲④浌疽言谄洳僮飨到y(tǒng) Windows 中內(nèi)置提供了 Setup API(可以解釋.INF腳本文件),我們只需用文本編輯軟件編寫 .INF文件,便可完成大部份的安裝工作,所以尤其是在軟體的大小并不是很大的情況下,安裝工作不是很復(fù)雜的時(shí)候,使用 .INF文件來(lái)進(jìn)行安裝工作將會(huì)是一個(gè)好選擇。而且如果要安裝設(shè)備驅(qū)動(dòng)程序,.INF文件是目前唯一的選擇。 可以用 .INF文件創(chuàng)建包括注冊(cè)表?xiàng)l目和目的目錄的自定義軟件安裝指令。.INF文件可以提供有限的平臺(tái)獨(dú)立性,并指定有限的軟件依賴性。目前.INF文件最普 遍的應(yīng)用是為安裝硬件設(shè)備的驅(qū)動(dòng)程序服務(wù)的,本文的目的就是介紹 .INF文件的功能、結(jié)構(gòu)、并提供了幾個(gè)事例來(lái)說(shuō)明如何用.INF文件,如何擴(kuò)展.INF文件的用途,比如制作綠色軟件,僅供參考。

2、.INF文件的格式

       .INF文件是由許多節(jié)(Section)組成,與.INI文件類似,整個(gè).INF文件由幾個(gè)節(jié)組成,節(jié)名用方 括號(hào)擴(kuò)起來(lái),如version 節(jié),Manufacturer節(jié),和Strings節(jié)等等。而每個(gè)節(jié)又由一系列的條目組成,每個(gè)條目都是是由一個(gè)鍵(Key)與一個(gè)值(Value)組 成,都是“Key=Value”這樣的形式,在這些節(jié)中定義的項(xiàng)目可以完成硬件的自動(dòng)檢測(cè)和軟件(包括驅(qū)動(dòng)程序)的安裝。.INF文件中分號(hào)后面的字符串 是注釋。在一個(gè) .INF文件中,所有跟隨在分號(hào)(;)后的文字都會(huì)被視為注釋。注釋并不一定要在新行開始,可以在一行文字後面加入注釋。

3、.INF文件案格式和作用如下所示:

       [Version] 節(jié): 包含對(duì)此 .INF文件的簡(jiǎn)短描述與此 .INF文件支持的設(shè)備類型的信息。用于確認(rèn) .INF文件的基本版本信息。任何.INF文件都必須 包括這個(gè)節(jié)。 [Version] 節(jié)中的語(yǔ)句 Signature="$CHICAGO$"表明這個(gè).INF文件可以用于windows 95以后的所有平臺(tái)上,目前來(lái)說(shuō)就是win98,winme,winnt4,win2k,winxp,win2k3。這種.INF文件比較多見。  
        如果 [Version]節(jié)中的簽名條目是 Signature="$Windows 95$",表明這個(gè).INF文件可以用于windows 95以后的Win9x平臺(tái)上,目前來(lái)說(shuō)就是win98,winme。
        如果[Version]節(jié)中的簽名條目是 Signature="$WINDOWS NT$",表明這個(gè).INF文件可以用于WindowsNT系列的平臺(tái)上,包括winnt4,win2k,winxp,win2k3。WIN9x系列的操 作系統(tǒng)的SetupAPI將會(huì)拒絕執(zhí)行這種類型的.INF文件。

       [Manufacturer] 與 [Manufacturer Name] 節(jié): 列出此 .INF文件可辨識(shí)的所有硬件設(shè)備,并列出了開發(fā)該硬件的廠商名稱,主要用于硬件設(shè)備的安裝。在設(shè)備驅(qū)動(dòng)程序的.INF文件中必須包括 [Manufacturer]節(jié)與 [Manufacturer Name] 節(jié)。[Manufacturer]節(jié)和[Microsoft]節(jié),安裝新硬件的向?qū)е辛谐鰜?lái)的廠商名字和設(shè)備名 稱就是來(lái)自這兩個(gè)節(jié)。這行語(yǔ)句“%MfgName%=Microsoft” 的等號(hào)右邊的名字指明設(shè)備制造商是Microsoft,等號(hào)左邊是廠商的名字,廠商名稱是"Microsoft"(在后面講到的[Strings] 節(jié)中)。在一個(gè).INF文件中可以有多個(gè)設(shè)備制造商的名字,都必須放在[Manufacturer]節(jié)中,同時(shí)[Manufacturer Name] 節(jié)可以列出該廠商的多種設(shè)備。
       [Manufacturer Name] 節(jié)區(qū)含有對(duì)要安裝的設(shè)備的描述,并為要安裝的設(shè)備指出 [Install] 節(jié)區(qū)。

[Manufacturer Name]節(jié)語(yǔ)法:
[manufacturer-name]
device-description=install-section-name,device-id[,compatible-device-id]...
device -description就是對(duì)要安裝的設(shè)備的描述。install-section-name就是此設(shè)備的 [Install] 節(jié)區(qū)名稱,manufacturer-name 節(jié)區(qū)名稱必須已在 [Manufacturer] 節(jié)區(qū)中被定義。device-id是此設(shè)備的硬件標(biāo)志符,每個(gè)廠家的不同的硬件對(duì)應(yīng)著不同的設(shè)備標(biāo)志符。

        普通的安裝軟件的.INF文件中,不包括[Manufacturer] 與 [Manufacturer Name] 節(jié),即使包含,也不會(huì)執(zhí)行它們,這2個(gè)節(jié)僅僅用于硬件的設(shè)備驅(qū)動(dòng)中起作用。

        [Install] 節(jié): 描述設(shè)備驅(qū)動(dòng)程序與硬件設(shè)備的實(shí)際屬性。它也定義了所有 [Install] 節(jié)的名稱,在此定義的節(jié)中包含了安裝該設(shè)備的信息和命令。默認(rèn)情況下,會(huì)執(zhí)行 [DefaultInstall] 節(jié),Install操作就會(huì)執(zhí)行[DefaultInstall] 節(jié)。[DefaultInstall] 節(jié)中包含指向其他節(jié)的指針,該節(jié)可用于指定要復(fù)制和刪除的文件、注冊(cè)表的更新、.INF文件的更新等。
        如果是安裝普通的軟件的.INF文件,可以通過(guò)鼠標(biāo)右鍵菜單上的“安裝”命令來(lái)安裝,這個(gè)時(shí)候.INF文件必須包括 [DefaultInstall]節(jié),也可以包括其他的[Install]節(jié),用RUNDLL32.EXE ETUPAPI.DLL,InstallHinfSection [Install]節(jié)的名字,這樣類似的命令來(lái)安裝。

[Install]節(jié)的語(yǔ)法:
[install-section-name]
Copyfiles=file-list-section[,file-list-section]...
LogConfig=log-config-section-name
Renfiles=file-list-section[,file-list-section]...
Delfiles=file-list-section[,file-list-section]...
UpdateInis=update-ini-section[,update-ini-section]...
UpdateIniFields=update-inifields-section[,update-inifields-section]...
AddReg=add-registry-section[,add-registry-section]...
DelReg=del-registry-section[,del-registry-section]...
Ini2Reg=ini-to-registry-section[,ini-to-registry-section]...
UpdateCfgSys=update-config-section
UpdateAutoBat=update-autoexec-section
[Install] 節(jié)定義了安裝程式與硬體驅(qū)動(dòng)需要的資源,以便安裝新的驅(qū)動(dòng)程式或者軟件。
此節(jié)中每個(gè)條目都有其特定格式與意義,并非每個(gè)條目都是必要的。無(wú)論是安裝驅(qū)動(dòng)程序還是普通的軟件,最后都要從某一個(gè)[Install] 節(jié)開始執(zhí)行。

[DestinationDirs] 節(jié): 指定硬盤上復(fù)制、刪除或重命名節(jié)文件的位置(例如 \Windows 或 Windows\System)。 .INF文件通過(guò)[DestinationDirs]節(jié)來(lái)指定操作的目標(biāo)路徑,語(yǔ)法如下:
[DestinationDirs]
file-list-section =ldid[, subdir ]
DefaultDestDir=ldid[, subdir ]
[DestinationDirs] 節(jié)定義了 [file-list-section] 節(jié)中指定的操作(可以是 CopyFiles、RenFiles 或 DelFiles 節(jié))的目標(biāo)目錄。DefaultDestDir命令可以為 .INF文件中的任何沒(méi)有明確在[DestinationDirs]節(jié)中命名的CopyFiles、RenFiles或DelFiles節(jié)指定默認(rèn)目標(biāo)文 件夾。

[FileCopy/Delete/RenameSection(s)] 節(jié):列出要復(fù)制、刪除或重命名的文件。 節(jié)的名字是CopyFiles,DelFiles,RenFiles。
[RegistryUpdateSection(s)] 節(jié):指定在注冊(cè)表中添加或刪除的項(xiàng)目。 節(jié)的名字是AddReg,DelReg。
[IniFileUpdateSection(s)] 節(jié):指定 .ini 文件的更新。鏈接將在該節(jié)中創(chuàng)建。 節(jié)的名字是 UpdateInis。

在.INF文件中,使用邏輯磁盤標(biāo)識(shí)符 (LDID) 來(lái)表示路徑,如下表:
00 Null LDID - 可用于創(chuàng)建新的 LDID
01 Source Drive:\pathname
10 Windows 文件夾(等價(jià)于%windir%目錄 )
11 System 文件夾
12 IOSubsys 文件夾
13 Command 文件夾
17 Inf 文件夾
18 Help 文件夾
20 Fonts
21 Viewers
22 VMM32
23 Color 文件夾
24 包含 Windows 文件夾的驅(qū)動(dòng)器根目錄
28 Host Winboot
30 啟動(dòng)盤的根文件夾
31 虛擬啟動(dòng)盤的主驅(qū)動(dòng)器根文件夾

[ClassInstall] 節(jié):為設(shè)備定義一個(gè)新的類別(Class)。主要用于硬件設(shè)備的安裝。
[SourceDisksNames] 節(jié): 列出包含文件的磁盤。
[SourceDisksFiles] 節(jié): 列出每個(gè)文件所在的特定磁盤。

其他的節(jié)還有許多,如:Update .ini Fields 節(jié) (UpdateIniFields),Add Ini File to Registry 節(jié) (Ini2Reg),Update Config.sys 節(jié) (UpdateCfgSys),Update Autoexec.bat 節(jié) (UpdateAutoBat),Optional Components 節(jié),等等。

.INF文件 是由Windows的SetupAPI解釋執(zhí)行的腳本文件,它的運(yùn)行過(guò)程很簡(jiǎn)單,是一種線性的執(zhí)行,線性的意思就是.INF文件的運(yùn)行過(guò)程不存在分支語(yǔ) 句,也就是沒(méi)有條件語(yǔ)句,一旦開始執(zhí)行,就是沿著固定的路線運(yùn)行。它的運(yùn)行是按照節(jié)為單位來(lái)執(zhí)行的,從某一個(gè)[Install]節(jié)開始執(zhí)行,從上到下執(zhí)行 該節(jié)中的條目,如果該條目是一個(gè)節(jié),那么就一條條執(zhí)行子節(jié)中的條目,如此遞歸執(zhí)行。

這樣的腳本看起來(lái)功能很弱,但是對(duì)于簡(jiǎn)單的安裝任務(wù)已經(jīng)足夠 了,安裝不外乎復(fù)制文件,添加注冊(cè)表,修改.INI文件等任務(wù),這些都可以用.INF文件來(lái)完成。對(duì)于更復(fù)雜的安裝要求,如要求安裝程序的界面漂亮方便, 要求有選擇性的安裝,要求安裝程序自動(dòng)修復(fù)的功能,就只好求助于其他的工具了,如微軟的Windows Installer,就具備更加強(qiáng)大的功能。

4、.INF文件的版本

.INF文件的語(yǔ)法是統(tǒng)一的分節(jié)語(yǔ)法,隨著操作系統(tǒng)的更新,微軟逐漸增加了一些必要的關(guān)鍵字,但是整個(gè)的.INF文件的結(jié)構(gòu)不會(huì)變化。從語(yǔ)法上來(lái)說(shuō),.INF文件都是一個(gè)類別。
按照.INF文件的版本來(lái)分類,可以分為2類:
1 AdvancedINF,在[Version]節(jié)中有“AdvancedINF=2.5,"您需要新版本的 AdvPack.dll" ”這么一行語(yǔ)句,表明此.INF文件需要AdvPack.dll這個(gè)動(dòng)態(tài)鏈接庫(kù)來(lái)解釋執(zhí)行,AdvancedINF有一些高級(jí)特性,但是在目前用的不太 多。
2 普通INF,沒(méi)有指明需要AdvPack.dll的.INF文件,使用SetupAPI.DLL來(lái)解釋執(zhí)行(win9x系列的操作系統(tǒng)使用Setupx.dll),系統(tǒng)中缺省使用的就是這種普通INF。

5、.INF文件的功能

從前面的介紹,能夠看出使用 .INF文件可以完成如下功能:
1 復(fù)制文件、刪除文件、或重新命名文件。
2 新增或刪除注冊(cè)表(Registry)中的項(xiàng)目。
3 修改重要的系統(tǒng)設(shè)置文件(如 Autoexec.bat、Config.sys、.INI 等)。
粗 看起來(lái),似乎上面提到的第一個(gè)功能可以用批處理文件.BAT來(lái)完成,第二個(gè)功能可以通過(guò)注冊(cè)表文件.REG來(lái)完成,第三個(gè)功能現(xiàn)在用得不多,不經(jīng)常處理. INI文件了。這樣說(shuō)起來(lái)似乎.INF文件也沒(méi)有太大的優(yōu)勢(shì)啊。這種看法是有問(wèn)題的,下面我將會(huì)著重指出.INF在在這幾個(gè)方面的應(yīng)用,而不會(huì)仔細(xì)講解. INF的語(yǔ)法。 下面要提到.INF文件優(yōu)于別的工具的方面。

6、用.INF文件編輯注冊(cè)表

.INF文件可以編輯操縱注冊(cè)表,相應(yīng)的的命令是AddReg和DelReg,
語(yǔ)法如下:
AddReg = add-registry-section[,add-registry-section]...
[ add-registry-section]
reg-root-string, [subkey], [value-name], [flag], [value]
[add-registry-section]節(jié)定義了將要添加的注冊(cè)表子鍵或值名,可以有選擇地設(shè)置它的值。
DelReg = del-registry-section[,del-registry-section]...
[ del-registry-section]
reg-root-string, subkey, [value-name]
[ del-registry-section]節(jié)定義了將要從注冊(cè)表中刪除子鍵subkey或值名value-name。
有時(shí)候上網(wǎng)遇到某些網(wǎng)站,修改了IE的主頁(yè),然后禁用了REGEDIT工具,這個(gè)時(shí)候很多人只好借助于其他第三方工具如超級(jí)兔子等來(lái)恢復(fù)注冊(cè)表的編輯權(quán)限,其實(shí)這個(gè)時(shí)候僅僅依靠.INF文件就可以恢復(fù)使用REGEDIT工具的權(quán)限。
把下面的這段代碼復(fù)制到記事本里,另存為jiereg.inf,然后右擊它選擇“安裝”,就可以了。
[Version]
Signature= "$CHICAGO$"
[DefaultInstall]
AddReg=My.Add.Reg
[My.Add.Reg]
HKCU, "SOFTWARE\Microsoft\windows\currentversion\policies\system","disableregistrytools", 0x00010001,"0"
HKLM,"SOFTWARE\Microsoft\windows\currentversion\policies\system","disableregistrytools", 0x00010001,"0"
當(dāng)然還可以用其他的方法,原理也是一樣的,這里僅僅是演示一下.INF文件的用途。

直接使用注冊(cè)表文件,有時(shí)候還會(huì)遇到另外一個(gè)缺點(diǎn),就是.REG文件里面使用16進(jìn)制代碼表示UNICODE字符串的,如下面的兩條注冊(cè)表語(yǔ)句:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
"Cookies"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,00,45,00,25,00,
5c,00,43,00,6f,00,6f,00,6b,00,69,00,65,00,73,00,00,00,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SoftEther]
"ImagePath"=hex(2):22,00,44,00,3a,00,5c,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,20,
00,46,00,69,00,6c,00,65,00,73,00,5c,00,53,00,6f,00,66,00,74,00,45,00,74,00,68,00,65,00,
72,00,5c,00,53,00,6f,00,66,00,74,00,45,00,74,00,68,00,65,00,72,00,2e,00,65,00,78,00,65,
00,22,00,20,00,73,00,65,00,72,00,76,00,69,00,63,00,65,00,00,00,00,00

這上面兩條語(yǔ)句難以閱讀和修改,手工修改的話很麻煩,其中
"Cookies"的值實(shí)際上就是“%USERPROFILE%\Cookies”字符串的UNICODE表示。
"ImagePath"的值實(shí)際上就是"D:\Program Files\SoftEther\SoftEther.exe" service
如果用.INF文件的形式的話,就很簡(jiǎn)單明白了:
[Version]
Signature="$CHICAGO$"
[DefaultInstall]
AddReg=Folders_AddReg
[Folders_AddReg]
HKCU,"Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders","Cookies",0x00020000,"%USERPROFILE%\Cookies"
HKLM,"SYSTEM\CurrentControlSet\Services\SoftEther","ImagePath",0x020000,"""D:\Program Files\SoftEther\SoftEther.exe"" service"
這個(gè)時(shí)候可以手工修改里面的路徑信息,而.REG文件則很難做到這一點(diǎn)。

7、用.INF文件編輯.INI文件

.INF文件可以使用UpdateInis命令修改.INI文件的功能也經(jīng)常需要,UpdateInis的語(yǔ)法如下:
UpdateInis = update-ini-section[,update-ini-section]...
[ update-ini-section-name]
ini-file, ini-section, [old-ini-entry], [new-ini-entry], [flags]
[update-ini-section-name]節(jié)給出的 .INF 文件中替換、刪除或添加的全部條目。ini-file 包含要更改條目的 .ini 文件名。 ini-section 包含要更改條目的節(jié)名。 old-ini-entry 可選,常用形式為 Key=Value。new-ini-entry 可選,常用形式為 Key=Value。flags 是可選操作標(biāo)記。
使用邏輯磁盤標(biāo)識(shí)符 (LDID),可以方便的修改.INI文件中的路徑信息,當(dāng)然其他的條目也同樣。舉例如下: Total Commander ,是一套極佳的文件管理員,內(nèi)含各種壓縮與解壓縮,類似NC般非常好用的工具,對(duì)于文件與路徑的尋找,除一般的復(fù)制、刪除、搬移、編輯等功能外,還有 FTP功能(具有續(xù)傳、背景傳輸)與解決了中文亂碼問(wèn)題,"專題"再也不會(huì)變成"彩題"、新增文件分割、文件合并、文件編碼、文件解碼(MIME, UUE,XXE)及新的操作介面(浮動(dòng)工具列)。真是一套相當(dāng)強(qiáng)悍可完全取代文件總管的工具程序。Total Commander依靠wincmd.ini來(lái)配置相應(yīng)的操作特性和功能,于是可以使用如下的.INF文件修改wincmd.ini中的路徑信息:
[version]
Signature="$CHICAGO$"
[DefaultInstall]
AddReg=AddGhister
UpdateInis=UpdateInicmd
[AddGhister]
HKCU,"Software\Ghisler\Total Commander","IniFileName",0,".\\wincmd.ini"
HKCU,"Software\Ghisler\Total Commander","FtpIniName",0,".\\wcx_ftp.ini"
[UpdateInicmd]
%01%\wincmd.ini, Configuration,,"InstallDir=%01%"
%01%\wincmd.ini, Configuration,,"Mainmenu=%01%\LANGUAGE\TCExtMenu.mnu"
其 中 [AddGhister]節(jié)負(fù)責(zé)修改注冊(cè)表中記錄的wincmd.ini的路徑,而[UpdateInicmd]節(jié)負(fù)責(zé)修改wincmd.ini文件紅的 相應(yīng)路徑信息,可以看出,一個(gè)簡(jiǎn)單的.INF文件就完成了修改Total Commander的路徑的任務(wù),在Total Commander5.x版本中,必須修改wincmd.ini文件中的路徑信息,這個(gè)時(shí)候使用.INF文件是非常方便的。

8、用.INF文件刪除正在使用的文件

有時(shí)候由于某些文件正被操作系統(tǒng)使用而無(wú)法刪除,如某些用于資源管理器的OCX控件,可以使用.INF文件的DelFiles命令刪除,該命令如果發(fā)現(xiàn)要?jiǎng)h除的文件被鎖定,就會(huì)把文件放到系統(tǒng)刪除隊(duì)列中排隊(duì),等系統(tǒng)重啟動(dòng)的時(shí)候,該文件就自動(dòng)被刪除了。
Delfiles的語(yǔ)法是:
Delfiles= file-list-section [,file-list-section]...
[file-list-section]
filename,,,1
[file -list-section]節(jié)定義了將要?jiǎng)h除的文件列表,filename后面的1是一個(gè)標(biāo)志,指明如果文件當(dāng)前無(wú)法刪除,就等到系統(tǒng)重啟動(dòng)后刪除。把 下面的這段代碼復(fù)制到記事本里,另存為delinuse.inf,把這個(gè)文件拷貝到無(wú)法刪除的文件的目錄,然后右擊它選擇“安裝(I)”,就可以刪除當(dāng)前 目錄下正在使用的setup.exe和setup2.exe。
[Version]
Signature="$Chicago$"

[DestinationDirs]
DefaultDestDir = 01 ; 當(dāng)前目錄 ,定義了將要?jiǎng)h除的文件的路徑
[DefaultInstall]
DelFiles = DeleteLIST
[DeleteLIST]
setup.exe ,,,1; 將要?jiǎng)h除的文件
setup2.exe ,,,1; 將要?jiǎng)h除的文件
同樣可以使用Copyfiles命令替換系統(tǒng)正在訪問(wèn)的文件。這些功能通過(guò)普通的del和copy命令都無(wú)法實(shí)現(xiàn),如果不使用.INF文件,必須使用第三方的軟件來(lái)完成。

9、輔助制作綠色軟件

在注冊(cè)表.REG文件中,不可以使用變量,這個(gè)缺陷對(duì)于需要設(shè)置路徑的安裝程序來(lái)說(shuō),是非常致命的弱點(diǎn),.REG文件中的路徑都是靜態(tài)的,一旦寫好,就不會(huì) 隨著系統(tǒng)的變化而變化,如果需要把安裝的程序從C盤改變到D盤,而在.REG文件中記錄了安裝路徑的話,這個(gè)時(shí)候直接倒入注冊(cè)表文件.REG是不行的,導(dǎo) 入的注冊(cè)表仍然是原來(lái)寫入的路徑。而在.INF文件中,可以使用變量來(lái)操縱路徑,從而可以跟蹤安裝程序所需要的路徑的變化。
對(duì)于綠色軟件的制作,其中核心的一點(diǎn)就是獲得原來(lái)軟件的安裝程序所做出的注冊(cè)表的改變,然后把該變化導(dǎo)出為一個(gè)注冊(cè)表文件. REG來(lái)進(jìn)一步分析。如果導(dǎo)出的.REG文件不包括絕對(duì)路徑,那么可以把該注冊(cè)表文件和提取出的軟件打包在一起做成綠色軟件。如果導(dǎo)出的.REG文件中包 含當(dāng)前軟件的絕對(duì)安裝路徑,那么就必須每次都要手工修改注冊(cè)表中路徑,是很麻煩的,降低了做成綠色軟件的意義所在。而使用.INF文件,使用AddReg命令可以輕松容易的解決這個(gè)注冊(cè)表路徑的難題。

對(duì)于綠色軟件的安裝制作來(lái)說(shuō),最重要的就是01,也就是源文件夾。下面舉一個(gè)例子:
Registry Crawler V4.5 ,是強(qiáng)大的用戶和開發(fā)者快速定位并配置注冊(cè)表的工具軟件。一個(gè)強(qiáng)大的搜索引擎允許你基于搜索標(biāo)準(zhǔn)查找注冊(cè)信息。(可以從天空軟件站下載http: //www4.skycn.com/soft/2963.html),安裝完成后導(dǎo)出的注冊(cè)表包含著如下一條語(yǔ)句:
[HKEY_LOCAL_MACHINE\SOFTWARE\4Developers\RCrawler\AppPath]
@="F:\\tools\\Reg\\RCrawler"
其中“F:\tools\Reg\RCrawler”是安裝路徑。
而改寫為.INF文件就是:
[version]
Signature="$CHICAGO$"
[DefaultInstall]
AddReg=Add
[Add]
HKLM,"SOFTWARE\4Developers\RCrawler\AppPath","",0,"%01%"
注意里面的%01%就代表當(dāng)前的安裝路徑。

當(dāng)我們把F:\tools\Reg\RCrawler這個(gè)目錄下的文件移動(dòng)到其他目錄時(shí)候,要用.REG文件的方式的話,就必須手工修改注冊(cè)表文件,而使用 前面的.INF文件的時(shí)候,什么都無(wú)需修改,只要在文件管理器explorer里面,用鼠標(biāo)右鍵執(zhí)行“安裝”命令的時(shí)候,%01%就自動(dòng)被替換為當(dāng)前所在 的目錄了。

最后,總結(jié)一句,注冊(cè)表文件.REG非常方便和直觀,但是對(duì)于處理路徑的變化的情況,非常笨拙和不方便,而.INF不如注冊(cè)表文件直觀,但是可以方便的處理路徑信息(包括UNICODE的路徑信息),所以應(yīng)該把.REG文件和.INF文件結(jié)合使用,互相彌補(bǔ)各自的缺點(diǎn)。