【轉貼】使用安裝資訊 (.inf) 檔操作檔夾和檔



贊助商連結


purk
2005-06-25, 03:56 AM
可以採用多種方法使用 .inf 文件操縱文件和文件夾。主要的方法有:
• 在檔夾中創建檔夾和鏈結
• 創建和刪除長檔案名
• 設置檔和檔夾的屬性
• 將檔複製到 Program Files 檔夾
在檔夾中創建檔夾和鏈結
元件安裝完後外殼程式可以在 Program Files 檔夾中創建檔夾或在檔夾中創建鏈結。安裝程式在 Setup.ini 文件中查找 [progman.groups] 節,然後對它進行分析以便在檔夾中創建檔夾或鏈結。
如果要安裝在 Program Files 檔夾中所需檔夾或鏈結的元件,請創建 UpdateInis 節,它將在 Setup.ini 檔中創建適當的條目。Setup.ini 檔使用以下語法創建檔夾和鏈結。注意檔夾與“開始”菜單有關。
[progman.groups]
folder_1=Folder_1_Name
folder_2=Folder_2_Name
:
folder_n=Folder_n_Name

[folder_1]
Link-Name, .exe-name, Icon-file-name, Icon-index, profile
如果 profile 欄位是 NULL,則鏈結將添加到檔夾中。
注意
• 如果 .exe-name 是 NULL 項目,則會在出現該項目時將它從組中刪除。
• 如果檔夾或鏈結的說明中有空格,則必須在 Setup.ini 檔中使用雙引號顯示。請參閱以下示例。
例子:遊戲

[Optional Components]
games

[games]
OptionDesc= %GAMES_DESC%
CopyFiles= wingames.files
UpdateInis= wingames.links
[wingames.files]
cards.dll
freecell.exe
freecell.hlp
mshearts.exe
mshearts.hlp
sol.exe
sol.hlp
winmine.exe
winmine.hlp

[wingames.links]
setup.ini, progman.groups,, "gamesfolder=%GAMES_DESC%" ;creates folder
setup.ini, gamesfolder,, """Solitaire Game"",SOL.EXE,,," ;creates link
setup.ini, gamesfolder,, "Minesweeper,WINMINE.EXE,,," ;creates link
setup.ini, gamesfolder,, ""Hearts Card Game"",MSHEARTS.EXE,,,";creates link
setup.ini, gamesfolder,, "FreeCell,FREECELL.EXE,,," ;creates link
結果:“遊戲”條目將顯示在安裝程式的“可選元件”對話方塊中,並且如果已選中,在 Program Files 檔夾中將創建帶有“紙牌”、“掃雷”、“紅心大戰”和“空當接龍”鏈結的“遊戲”檔夾。
創建和刪除長檔案名
Windows 32 位元版本流覽器的安裝引擎是向後相容的 16 位 .dll 文件。因此,Windows 安裝引擎只能複製 8.3 檔案名格式的檔。要創建和刪除有長檔案名的檔,安裝引擎在退出時會運行 32 位元應用程式,將任何 8.3 檔案名重命名為長檔案名並刪除長檔案名的檔。32 位元應用程式會從註冊表中的預定義項中得到指令。
重命名操作的註冊表根分支如下:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RenameFiles
刪除操作的註冊表根分支如下:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\DeleteFiles
將重命名和刪除操作的每個組添加到每個分支下的子鍵。每組操作都限制為重命名或刪除單個檔夾中的檔。在每個子鍵中都必須至少包括兩個條目才能實現重命名或刪除:要重命名或刪除檔的檔夾路徑、以及實際的重命名或刪除操作。
每組操作中的第一個註冊表鍵是檔夾條目。相關檔夾中用於重命名操作的每個條目形式為 "old_short_name"="new_long_name,[attrib_flag]"。
可選的 attrib_flag 用於在重命名操作期間設置檔屬性。該標誌由以下值組成。
1 READONLY
2 HIDDEN
3 SYSTEM
要設置檔或檔夾的多個屬性,應同時添加標記。例如,要設置 READONLY 和 HIDDEN 屬性,attrib_flag 應為 3。
下例是 AddReg 節,它設置 \Windows\System\Sample 檔夾的 SYSTEM 和 HIDDEN 屬性:
HKLM,Software\Microsoft\Windows\CurrentVersion\RenameFiles\Sys,,,%11% HKLM,Software\Microsoft\Windows\CurrentVersion\RenameFiles\Sys,SAMPLE,,"SAMPLE,6"
注意
• 應該使用全部大寫字母以確保檔案名保留了短檔案名。
相關檔夾中執行刪除操作的每個條目的形式為 "arbitrary_key_name"="long_name_to_delete"。
下例是 AddReg 節:
• 在 C:\Samples 文件夾中將 Oldname.txt 檔重命名為 New Long Name.txt。
• 在 Windows 文件夾中將 Myreadme.txt 檔重命名為 My Application Readme.txt。
[MyAppShort2Long]
HKLM,Software\Microsoft\Windows\CurrentVersion\RenameFiles\Samples,,,C:\Samples
HKLM,Software\Microsoft\Windows\CurrentVersion\RenameFiles\Samples,oldname.txt,,"New Long Name.txt"
HKLM,Software\Microsoft\Windows\CurrentVersion\RenameFiles\Win,,,%25%
HKLM,Software\Microsoft\Windows\CurrentVersion\RenameFiles\Win,myreadme.txt,,"My App Readme.txt"
下例是 AddReg 節:
• 從 C:\Samples 檔夾中刪除 New Long Name.txt。
• 從 Windows 檔夾中刪除 My Application Readme.txt。
[MyAppDelLong]
HKLM,Software\Microsoft\Windows\CurrentVersion\DeleteFiles\Samples,,,C:\Samples
HKLM,Software\Microsoft\Windows\CurrentVersion\DeleteFiles\Samples,oldname.txt,,"New Long Name.txt"

HKLM,Software\Microsoft\Windows\CurrentVersion\DeleteFiles\Win,,,%25%
HKLM,Software\Microsoft\Windows\CurrentVersion\DeleteFiles\Win,myreadme.txt,,"My App Readme.txt"
處理完這些重命名和刪除操作後,從註冊表中刪除這些條目。
注意
• 在重命名操作期間,只有重命名檔後目標檔才能被刪除。如果有兩個相同的重命名操作等待執行,將導致檔丟失。例如,假設有一個需要將 Picture.bmp 重命名為“Really Cool 3D Picture.bmp”的點陣圖檔。第二次執行同樣的重命名操作時,“Really Cool 3D Picture.bmp”已存在,所以在重命名操作執行前會將它刪除。該規則的例外情況是現有的目標檔案名是檔夾。
設置檔和檔夾的屬性
要設置檔或檔夾的屬性,請使用相同的約定創建使用可選標誌的長檔案名。
詳細資訊,請參閱“創建和刪除長檔案名”部分。
將檔複製到 Program Files 檔夾
因為複製 Windows 檔的操作是 16 位操作,所以只能使用短檔案名(8.3 格式)。要訪問 Program Files 檔夾,需要在 [DestinationDirs] 節中使用有效的 8.3 格式的名稱“24,PROGRA`1”(LDID 24 是包含 Windows 檔夾的驅動器根目錄)。同樣,必須用有效的短檔案名訪問 Program Files 檔夾中帶長檔案名的任何檔夾。
下例將三個檔複製到 Program Files\Accessories 檔夾,並創建其中一個檔的鏈結:
[WordPadInstall]
CopyFiles = WordPadCopyFiles
UpdateInis = WordPadInis
[DestinationDirs]
WordPadCopyFiles = 24,%PROGRAMF%\%ACCESSOR%
[WordPadCopyFiles]
mswd6_32.wpc
wordpad.exe
write32.wpc

[WordPadInis]
setup.ini, progman.groups,, "group4=%APPS_DESC%" ;創建 Accessories 檔夾(如果沒有)
setup.ini, group4,, """%WORDPAD_LINK%"", ""%24%\%PROGRAMF%\%ACCESSOR%\WORDPAD.EXE""" ;在 Accessories 檔夾中創建鏈結
[Strings]
APPS_DESC = "Accessories"
WORDPAD_LINK = "WordPad"
;檔夾名 - 注意短文件夾名必須與截斷的檔夾名匹配
;長檔夾名的 8 位元字元名,否則會出問題。
PROGRAMF = "Progra~1" ;Program_Files 的前 6 個字元, + "~1"
ACCESSOR = "Access~1" ;Accessories 的前 6 個字元, + "~1"
.inf 檔的限制
• 不能刪除目錄。
• 使用 RenFiles 時不能將檔移到其他位置。(RenFiles 命令只能重命名此位置的文件。)
• 不能複製檔(CopyFiles 命令只能將檔從源盤複製到目標目錄。)