inf文件基础知识

INF文件全称Information File文件,是Winodws操作系统下用来描述设备或文件等数据信息的文件。INF文件是由标准的ASCII码组成,您可以用任何一款文字编辑器查看修改其中的内容。一般我们总是认为INF文件是系统设备的驱动程序,其实这是错误的认识,Windows之所以在安装某些硬件的驱动时提示需要INF文件是因为INF文件为该设备提供了一个全面描述硬件参数和相应驱动文件(DLL文件)的信息。就好比我们看着说明书安装电脑硬件一样,我们就是Windows系统,说明书就是INF文件。INF文件功能非常强大,几乎能完成日常操作的所有功能。您可以把它看成是Windows系统底下的超强批初理。要熟练掌握和理解甚至是编写INF文件需要对其内部结构有相当的认识。下面就让我们来深入到INF文件中的内部一窥其真面貌吧!

INF文件的组成有节(Sections),键(Key)和值(value)三部分。
关键节有
[Version]版本描述信息,主要用于版本控制。
[Strings]字符串信息,用于常量定义。
[DestinationDirs]定义系统路径信息。
[SourceDisksNames]指明源盘信息。
[SourceDisksNames]指明源盘文件名。
[DefaultInstall]开始执行安装。
其它的节可以自定义,下面用一实例来具体讲解。

程序代码
[Version]
Signature=$Chicago$
Provider=%Author%

[Strings]
Product="添加文件关联演示"
Version="1.0"
Author="Xunchi"
Copyright="Copyright 2005"
CustomFile="inf" ;修改您需要的文件名后缀
Program="NOTEPAD.EXE" ;修改您需要关联的应用程序名

[Add.Reg]
HKCR,"."%CustomFile%,"",FLG_ADDREG_TYPE_SZ ,%CustomFile%File
HKCR,%CustomFile%File,"",FLG_ADDREG_TYPE_SZ,安装信息
HKCR,%CustomFile%"File/shell","",FLG_ADDREG_TYPE_SZ,open
HKCR,%CustomFile%"File/shell/open/command","",FLG_ADDREG_TYPE_SZ,%program% %1

[DefaultInstall]
AddReg=Add.Reg

  在[Version]节中"Signature"项定义了该INF文件需要运行在何种操作系统版本中。有$Windows NT$, $Chicago$, or $Windows 95$三个值供选择,一般选择$Chicago$即可。项Provider中定义了该文件的创作来源,%Author%指引用Author项的值。您也可自定其它项来描述该INF文件的版本信息。该INF文件的作用是关联文件,所以主要是对注册表的操作,我们来看[Add.Reg]节,共四条语句,格式都是一样。HKCR表示根HKEY_CLASSES_ROOT,第二个参数是子键的路径名,第三个参数是表明值的类型,最后是值(具体见附表)。以上都是对操作的定义与过程,在节[DefaultInstall]中是开始执行要安装的流程,AddReg表明是对注册表进行操作,操作对象是Add.Reg节中的定义。如果您把AddReg换成DelReg则是删除注册表中的键值。当鼠标单击该INF文件在弹出的菜单中选择“安装”就开始执行您所定义的操作。该示例在系统的INF文件右键菜单中增加了查看编辑功能并设置了默认动作,因为在安装了不了解的INF文件有可能对系统产生不良的影响,这样双击文件就可打开编辑该文件了。

  再看看INF文件在文件操作方面的能力吧。请看下面的一个例子。

程序代码
[Version]
Signature=$Chicago$
Provider=%Author%
[Strings]
Product="文件复制和安装演示"
Version="1.0"
Author="Xunchi"
Copyright="Copyright 2005"

[FileList]
ProcessList.exe ;此文件已在当前目录下,下同。

[FileList1]
Wordpad.exe
[DestinationDirs]
FileList=11 ;安装到Windows的系统目录
FileList1=10 ;安装到Windows目录
[DefaultInstall]
Copyfiles=FileList,FileList1

  相同的节的作用与上一例类似,请注意新出现的节[FileList],这是我自定义的节名,它表示了一个文件组,[FileList1]也类似。在节[DestinationDirs]中需定义每个文件组复制到的目录(各个常量的意义见附表)。Copyfiles指明了需要进行复制的文件组。
  INF文件的操作还包括服务(NT系统)程序的安装和卸载,INI文件的转换等。由于这些操作都比较的复杂和繁琐,且有一定的危险性故下次有机会再向大家进行深入探讨。
  最后我们来看一下INF文件的执行机制,这时你也许要问不就是简单的执行一下“安装”吗?知其然不知其所以然知识水平是不会提高的。在“文件夹选项”中的“文件类型”找到INF文件的“安装”命令看到一串命令。“rundll32.exe setupapi,InstallHinfSection DefaultInst_all 132 %1”它表示了运行Dll文件setupapi.dll中的命令InstallHinfSection并传递给它起始节的名字 DefaultInstall。可见起始节是可以自定义的。INF文件的执行也可用在各种支持API调用的编程工具中。至此INF文件的结构和运行机制我们已基本了解,现在就让你的思维开动起来,让它更好的为我们工作吧。

注册表操作的常量定义:
----------------------------------------------------------
常量 根值
HKCR HKEY_CLASSES_ROOT.
HKCU HKEY_CURRENT_USER.
HKLM HKEY_LOCAL_MACHINE.
HKU HKEY_USERS.
-----------------------------------------------------------
FLG_ADDREG_APPEND 在多字符串后添加字符
FLG_ADDREG_TYPE_SZ 字符类型
FLG_ADDREG_TYPE_MULTI_SZ 字符串类型
FLG_ADDREG_TYPE_EXPAND_SZ 扩展字符串类型
FLG_ADDREG_TYPE_BINARY 二进制值
FLG_ADDREG_TYPE_DWORD DWord值
FLG_ADDREG_TYPE_NONE NULL值
----------------------------------------------------------
 
[DestinationDirs]节中所定义的常量路径
----------------------------------------------------------
01 源目录(后跟路径)
10 Windows目录
11 Windows系统目录
12 驱动目录
17 INF文件目录
18 帮助文件目录
20 字体目录
21 根目录
24 应用程序目录
25 共享目录
30 当前根目录
50 System目录
51 Spool 目录
52 Spool 驱动目录
53 用户配置目录
----------------------------------------------------------

[DefaultInstall]节中定义的操作
----------------------------------------------------------
LogConfig Log日志文件配置
Copyfiles 复制文件
Renfiles 文件改名
Delfiles 删除文件
UpdateInis 更新Inis
UpdateIniFields 更新Ini字段
AddReg 添加注册项
DelReg 删除注册项
Ini2Reg Ini文件转换为Reg文件
----------------------------------------------------------

=================================================================================

INF的功能

1 复制文件、删除文件、或重新命名文件。
2 新增或删除注册表(Registry)中的项目。
3 修改重要的系统设置文件(如 Autoexec.bat、Config.sys、.INI 等)

INF的规则

INF是纯文本文件,它是分节的,这点和INI文件类似,每节以"[]"扩起来,每一个节名最长为255个字符(Windows 2000/XP/2003操作系统中)或28个字符(Windows 98操作系统中)。在节与节之间的内容叫条目,每一个节又是由许多的条目组成的,每一个条目都由=分开,如a="b"。如果每一个条目的等号后有多个值,则每一个值之间用","号分隔开。INF对大小写不敏感,行注释语句命令是";",类似VB里的’。如果一行写不下,使用"/"来换行。

INF的运行

.INF文件是由Windows的SetupAPI解释执行的脚本文件,它的运行过程很简单,是一种线性的执行,线性的意思就是.INF文件的运行过程不存在分支语句,也就是没有条件语句,一旦开始执行,就是沿着固定的路线运行。它的运行是按照节为单位来执行的,从某一个[Install]节开始执行,从上到下执行该节中的条目,如果该条目是一个节,那么就一条条执行子节中的条目,如此递归执行。在WINDOW上运行只要右击这个文件,点击安装即可。

INF的语法结构

;指定版本和签名节
[VERSION]
;系统根据Signuture看是不是适合当前版本,如果适合的话就执行,否则不执行,当然强制安装是可以的
;用于WIN9X
Signature="$CHICAGO$"
;WINNT+
;Signature="$Windows NT$"
;指定安装文件布局,该行是可选的,如果没有提供布局信息文件,则在INF文件内必须包含[SourceDisksNames]和[SourceDisksFiles]节
LayoutFile=filename.inf
[SourceDisksNames]节
[SourceDisksNames]节罗列源文件所在盘符序列码、盘描述符、盘卷标号和盘序列号。
[SourceDisksNames]节内语句的语法为:
disk-ordinal=“disk-description”,disk-label,disk-serial-number
其中disk-ordinal为必选项,是盘符序列码,标识一个源盘,具有惟一性,一般可设置为从1开始递增的整数,0不是一个有效的盘符序列码。当存在多个源盘时,盘符序列码之间不能重复。
disk-description为必选项,是盘描述符,用双引号括起的字符串或字符串宏描述盘的内容或目的。安装引擎将该字符串显示在对话框内以提示用户。
disk-label为源盘的卷标识。
disk-serial-number未使用,但必须被设置为0。
[SourceDisksFiles]节
[SourceDisksFiles]节指定安装时使用的源文件和盘符序列码、盘描述符。 [SourceDisksFiles]节内语句的语法为:
file-name=disk-number[,subdir] [,file-size]
其中file-name为必选项,是源盘上文件的名称。
disk-number是包含file-name指定文件所在源盘的盘符序列码,该盘符序列码需在[SourceDisksNames]节中列出,并大于或等于1。
Subdir为可选项,指定文件所在源盘的子目录,如省略则源盘为缺省安装路径。
file-size为可选项,表明文件的大小,以字节为单位。

[DestinationDirs]
;指定CopyFiles、RenFiles或DelFiles入口的缺省操作目录
;语法file-list-section=LDID,[Subdir]
;LDID列表如下:
;01 ;current directory
;04 ;backup directory
;10 ;windows directory
;11 ;system dir
;12 ;iosubsys
;13 ;command
;14 ;control panel directory
;15 ;printers directory
;16 ;workgrou dir
;17 ;inf dir
;18 ;help dir
;19 ;administration dir
;20 ;fonts
;21 ;viewers
;22 ;vmm32
;23 ;color dir
;25 ;shared dir
;26 ;winboot
;28 ;host winboot
;30 ;root of boot drive
;31 ;root of host drive of a virtual boot drive
;32 ;old windows dir if exists

;以下例子为安装到window/web目录下
;DefaultDestDir=10,"web"
;[Install]节提供了一个INF文件安装过程的总览,它识别文件内其他包含安装信息节的详细动作,是Windows内建安装函数识别安装过程和内容的真正入口
[Install]
;[Install]节分[DefaultInstall]和[OtherInstall]两类
;[DefaultInstall]节节名DefaultInstall如前面表格内容所述被显式地在注册表中指定。
;该节也是系统获取INF文件中安装信息的首要入口,当用户右击INF文件选“安装”时该节内容被执行。
;[OtherInstall]与[DefaultInstall]节遵循相同的语法,但必须被显式地调用,常被用来定义反安装动作

;缺省安装节
[DefaultInstall]
;指明添加注册表的子节,等号后面的为自定义节名,例子见[add]节
ADDREG=add

;指明要删除的注册表子节,等号后面的为自定义节名
DELREG=del

;指明要要复制的文件子节,用于安装,Copyfiles命令可以替换系统正在访问的文件。这些功能通过普通的del和copy命令都无法实现
CopyFiles=cfile

;指明要要删除的文件子节,用于反安装,多个节以逗号隔开,该命令如果发现要删除的文件被锁定,就会把文件放到系统删除队列中排队
;等系统重启动的时候,该文件就自动被删除了
DelFiles=删除文件段
;[删除文件段]
;文件名列表
;例子:
;a.exe
;b.sys
;重命名文件段
;RenFiles=重命名文件段
;[重命名文件段]
;语法:
;[file-list-section]
;new-file-name,old-file-name
;file1,file2 ;修改文件名file1为file2

;更新INI文件段内容子节
UpdateInis = 更新INI文件段
;[更新INI文件段]
;ini-file, ini-section, [old-ini-entry], [new-ini-entry], [flags]
;ini-file 包含要更改条目的 .ini 文件名
;ini-section 包含要更改条目的节名
;old-ini-entry 可选,常用形式为 Key=Value
;new-ini-entry 可选,常用形式为
;Key=Value。flags 是可选操作标记
;例子
;%01%/wincmd.ini, Configuration,,"InstallDir=%01%"
;%01%/wincmd.ini, Configuration,,"Mainmenu=%01%/LANGUAGE/TCExtMenu.mnu"
;更新ini文件值内容
updateinifield =
;ini文件更新注册表
ini2reg=aa.ini
;更新config.sys内容
updatecfgsys=更新autoexec.bat段
[更新autoexec.bat段]
;更新autoexec.bat内容
updateautobat=更新autoexec.bat段
[更新autoexec.bat段]

;定义资源节,像资源文件,调用时使用%REG_SZ%就代表了0x00000000
[Strings]
REG_SZ=0x00000000
REG_BINARY=0x00000001
REG_DWORD=0x00010001
;自定义添加注册表项的节
[add]
;注意格式:HKEY(根键缩写),Subkey(子键),Valuename(键值名),Type(键值类型),Value(键值)
;HKCU -> HKEY_CURRENT_USER
;HKCR -> HKEY_CLASSES_ROOT
;HKLM -> HKEY_LOCAL_MACHINE
;HKU -> HKEY_USERS
;HKU -> HKEY_USERS
;HKCC -> HKEY_CURRENT_CONFIG
;HKDD -> HKEY_DYN_DATA
;解禁注册表编辑器
HKCU,Software/Microsoft/Windows/CurrentVersion/Policies/System,DisableRegistryTools,1,0
;解禁IE的Internet选项
HKCU,Software/Policies/Microsoft/Internet Explorer/Restrictions,NoBrowserOptions,1,0
;解禁IE的Internet选项里面的各个具体选项
HKCU,Software/Policies/Microsoft/Internet Explorer/Restrictions,NoBrowserOptions,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Settings,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,HomePage,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,GeneralTab,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Cache,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,History,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Colors,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Fonts,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Languages,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Accessibility,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,SecurityTab,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,SecChangeSettings,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,SecAddSites,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,ContentTab,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Ratings,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Certificates,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,CertifPers,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,CertifSite,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,CertifPub,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,FormSuggest,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,FormSuggest Passwords,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Wallet,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Profiles,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,ConnectionsTab,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Connection Wizard,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Connwiz Admin Lock,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Connection Settings,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Proxy,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,AutoConfig,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,ProgramsTab,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,ResetWebSettings,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Check_If_Default,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,AdvancedTab,1,0
HKCU,Software/Policies/Microsoft/Internet Explorer/Control Panel,Advanced,1,0
;解禁下载(可单独使用)
HKCU,Software/Microsoft/Windows/CurrentVersion/Internet Settings/Zones/3,1803,1,0
;自动修改IE标题栏文字、主页、搜索页等等
HKCU,Software/Microsoft/Internet Explorer/Main,Window Title,0,"Internet Explorer"
HKCU,Software/Microsoft/Internet Explorer/Main,Start Page,0,"http://www.zmn120.net

HKCU,Software/Microsoft/Internet Explorer/Main,Search Page,0,"http://www.zmn120.net
HKCU,Software/Microsoft/Internet Explorer/Main,Default_Page_URL,0,"http://www.zmn120.net
HKLM,SOFTWARE/Microsoft/Internet Explorer/Main,Default_Search_URL,0,"http://www.zmn120.net

HKLM,SOFTWARE/Microsoft/Internet Explorer/Main,Search Page,0,"http://www.zmn120.net

HKLM,SOFTWARE/Microsoft/Internet Explorer/Main,Start Page,0,"http://www.zmn120.net
HKLM,SOFTWARE/Microsoft/Internet Explorer/Main,Default_Page_URL,0,http://www.zmn120.net
HKLM,SOFTWARE/Microsoft/Internet Explorer/Main,Default_Page_URL,0,http://www.zmn120.net

[dfile]
;该节定义了将要删除的文件列表,filename后面的1是一个标志,指明如果文件当前无法删除,就等到系统重启动后删除。
;格式:filename,,,1
;例子:
a.exe,,,

=================================================================================

安装信息文件 (.inf) 定义


出处:伊维

基本 .inf 文件包含以下节(更加复杂的 .inf 文件可能有其他的节)。粗体表示的节名是保留关键字。斜体表示的节名是 .inf 作者创建的任意名称:

Version 节
Install 节
Copy File 节 (CopyFiles)
Rename Files 节 (RenFiles)
Delete Files 节 (DelFiles)
Update .ini File 节 (UpdateInis)
Update .ini Fields 节 (UpdateIniFields)
Add Registry 节 (AddReg)
Delete Registry 节 (DelReg)
Add Ini File to Registry 节 (Ini2Reg)
Update Config.sys 节 (UpdateCfgSys)
Update Autoexec.bat 节 (UpdateAutoBat)
DestinationDirs 节
SourceDisksNames 节
SourceDisksFiles 节
Strings 节
Optional Components 节
[Version] 用于确认 .inf 文件的基本版本信息。
[DefaultInstall] 默认情况下,会执行 Installation 节。包含指向其他节的指针,该节可用于指定要复制和删除的文件、注册表的更新、.inf 文件的更新等。
[OtherInstall] 使用与 [DefaultInstall] 节相同的格式,但是必须明确地调用。有助于定义组件卸载方式。
[DestinationDirs] 指定在硬盘上复制、删除或重命名节文件的位置(例如 /Windows 或 Windows/System)
[FileCopy/Delete/RenameSection(s)] 列出要复制、删除或重命名的文件。
[RegistryUpdateSection(s)] 指定在注册表中添加或删除的项目。
[IniFileUpdateSection(s)] 指定 .ini 文件的更新。链接将在该节中创建。
[SourceDisksNames] 列出包含文件的磁盘。
[SourceDisksFiles] 列出每个文件所在的特定磁盘。
[Strings] 列出上面所使用的可本地化字符串。

Version 节
[Version]
Signature="$Chicago$"
LayoutFile=filename.inf
定义所有 Windows .inf 文件的标准头信息。注意如果签名不是 $Chicago$,Windows 不会把 .inf 文件当作 Windows 识别的任何设备类型的 .inf 文件接受。

注意签名字符串的识别不会区分大小写。例如,既可以用$Chicago$,也可以用$CHICAGO$。

filename.inf
对包含安装该组件所需布局信息(源盘和文件)的 .inf 文件加以命名。该行是可选的。如果未在别处给出,SourceDisksNames 和 SourceDisksFiles 节必须在该 .inf 文件中给出。

下面显示的是一个典型的 Version 节示例:

[Version]
Signature="$CHICAGO$"
Install 节
[install-section-name]
Copyfiles = file-list-section[,]...
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

标识包含组件安装信息 .inf 文件中的其他节。

在 Install 节中,以上语法中所显示的项目类型并不全是必需的。如果已经使用某一项目类型,则必须在 .inf 文件中指定该节的名称。(CopyFiles 条目是例外,它可以使用文件名搭配 "@" 字符来复制单个文件,而不用指定节名。)节名必须由可打印字符组成。

在任何一个 Install 节中,只能使用一种类型的项目。一个项目中可以列出多个节名,但是在每个附加名称前必须有逗号。

install-section-name
如果命名 Install 节 [DefaultInstall],当右键单击 .inf 文件,然后单击“安装”时,它将运行。这也是选择 .inf 文件作为使用 Cabpack 向导的安装选项时会执行的节。

下面显示的是一个典型的 Install 节示例。它包含 Copyfiles 和 AddReg 项目,这两个项目可以识别包含要安装哪些文件的信息的节。

[MyApplication]
Copyfiles=MyAppWinFiles, MyAppSysFiles, @SRSutil.exe
AddReg=MyAppRegEntries
请注意,在该示例中,通过将 [MyApplication] 节重命名为 [DefaultInstall],右键单击 .inf 文件并单击“安装”命令时,将执行 Install 节。

CopyFiles 项目提供了一个特殊符号,允许直接从复制行复制单个文件。可以通过在文件名前加上 @ 符号作为前缀来复制单个文件。使用该符号的复制文件的目标目录为 DefaultDestDir,该目录在 DestinationDirs 节中定义。下面显示的是如何复制单个文件的示例:

CopyFiles=FileSection1,@myfile.txt,@anotherfile.txt,LastSectionName


file42、file52 和 file62),必须在 SourceDisksNames 节中定义 SourceDisksFiles 节中显示的逻辑盘号。

安装信息文件 (.inf) 定义

Copy Files 节 (CopyFiles)
[CopyFiles-section-name]
destination-file-name[, source-file-name][,temporary-file-name][,flag]
[destination-file-name[,source-file-name][, temporary-file-name]][,flag]


列出要从源盘复制到目标目录的文件名。在 .inf 文件的其他节中指定源盘和与每个文件相关的目标目录。file-list-section 名必须出现在 Install 节的 CopyFiles 项目中。

请注意,可以在 Install 节本身的 CopyFiles 项目中指定复制单个文件,而不必生成 CopyFiles 节。为此,请使用特殊字符 "@" 强制复制单个文件。在 Install 节的参考主题中包含在 CopyFiles 类型的项目中使用 "@" 字符的示例。使用这种方法复制单个文件稍微有点限制,因为在这种情况下源文件名和目标文件名必须相同,并且不能使用临时文件。

destination-file-name
目标文件名。如果没有给出源文件名,那么它也是源文件名。

source-file-name
源文件名。文件复制操作的源文件名不一定要和目标文件名完全相同。

temporary-file-name
文件复制操作的临时文件名。安装程序将复制源文件,但给它临时文件名。下一次启动操作系统时,将把临时文件名重命名为目标文件名。在将文件复制到已打开或 Windows 正在使用的目标文件时,该功能十分有用。

flag
在安装过程中用于执行特殊操作的可选参数。通过添加标志值创建组合标志,可以使用多个标志。可以使用以下有效标志:

1 在 CopyFiles 上:用户企图跳过文件时,发出警告。
1 在 DelFiles 上:如果文件正在使用,则在 Wininit.ini 中删除排队延迟,否则不能删除当前使用的文件。
2 关键安装:不允许用户跳过文件。
4 忽略版本检查并且始终复制文件。这将会覆盖较新的文件。
8 强制重命名。安装程序将该文件作为正在使用的文件进行处理。只有文件已经存在于用户的计算机上时才会发生这种情况。
16 如果文件已经在目标计算机上,则不会复制。
32 抑制版本冲突对话框,并且不会覆盖较新的文件。

下面是复制三个文件的示例:

[CopyTheseFilesSec]
file11 ;复制 file11
file21,file22,file23 ;复制file22,临时命名为 file 23
file31,file32 ;将 file 32 复制到 file31
该示例中使用的所有源文件名都必须在 SourceDisksFiles 节中定义,并且在 SourceDisksFiles 节中出现的逻辑盘号必须在 SourceDisksNames 节中定义。或者,可以使用 Layout.inf 文件提供该信息。

Rename Files 节 (RenFiles)
[rename-files-section-name]
new-file-name, old-file-name
.
.
列出要重命名的文件名。此节名必须出现在 .inf 文件 Install 节 Renfiles 项目中。

new-file-name
新文件名。

old-file-name
旧文件名。

下面的示例将 file42 重命名为 file41、将 file52 重命名为 file51 以及将 file62 重命名为 file61:

[RenameOldFilesSec]
file41, file42
file51, file52
file61, file62
必须在 SourceDisksFiles 节中定义该示例中使用的所有旧文件名(file42、file52 和 file62),必须在 SourceDisksNames 节中定义 SourceDisksFiles 节中显示的逻辑盘号。

Delete Files 节 (DelFiles)
[ file-list-section]
file-name[,,,flag]
.
.
在 DelFiles 节中列出要删除的文件名。file-list-section 名必须出现在 Install 节 Delfiles 项目中。

file-name
标识要删除的文件。

flag
如果安装过程中正在使用此文件,可选参数用于强制 Windows 删除此项目中命名的文件。要指示 Windows 将文件删除操作进行排队,直到计算机重新启动,请将 flag 参数的值设置为 1。 如果由于正在使用该文件而不能删除参数设置为 flag=1 的文件,那么设备安装完成后系统将重新启动。

如果不与 file-name 参数一起使用值为 1 的 flag 参数,在执行 DelFiles 节时如果正在使用该文件,则不能从计算机上删除此文件。

以下是删除三个文件的示例:

[DeleteOldFilesSec]
file1
file2
file3

Update .ini File 节 (UpdateInis)
[ update-ini-section-name]
ini-file,ini-section,[old-ini-entry], [new-ini-entry], [flags]
.
.
在给定的 .ini 文件中,替换、删除或添加整个项。节名 update-ini-section-name 必须出现在 .inf 文件 Install 节的 UpdateInis 项目中。

ini-file
包含要更改条目的 .ini 文件名。关于指定 .ini 文件名的详细信息,请参阅以下注释。

ini-section
包含要更改条目的节名。

old-ini-entry
可选。常用形式为 Key=Value。

new-ini-entry
可选。常用形式为 Key=Value。主项或值都可以指定可替代字符串。例如,在参数 new-ini-entry 中指定的主项或值可能为 %String1%,替代 %String1% 的字符串定义在 .inf 文件的 Strings 节。

flags
可选操作标记。可以是以下值之一:

0 默认。如果在 .inf 文件条目中有 old-ini-entry 主项,则用 new-ini-entry 替换该条目。注意 old-ini-entry 参数主项与 .inf 文件条目必须匹配;每个条目的值都将忽略。
要无条件地将 new-ini-entry 添加到 .ini 文件中,请将 old-ini-entry 设置为 NULL。要无条件地从 .inf 文件中删除 old-ini-entry,请将 new-ini-entry 设置为 NULL。

1 如果 .inf 文件条目中有 old-ini-entry 的主项和值,则用 new-ini-entry 替换该条目。请注意 old-ini-entry 参数和 .inf 文件条目的主项和值必须匹配才能进行替换。作为对比,使用操作标志值为 0,只有主项与它匹配才能进行替换。
2 如果在 .inf 文件中不存在 old-ini-entry 参数主项,那么在 .ini 文件中不执行任何操作。
如果在 .inf 文件条目中存在 old-ini-entry 参数主项以及 .ini 文件条目中存在 new-ini-entry 参数主项,则会删除与 new-ini-entry 参数主项匹配的 .inf 文件条目,并且按以下方法操作与 old-ini-entry 参数匹配的 .inf 文件条目:用 new-ini-entry 参数主项替换 .inf 文件条目主项。

如果在 .inf 文件中有 old-ini-entry 参数主项,并且在 .ini 文件中没有 new-ini-entry 参数主项,那么将条目添加到由 new-ini-entry 参数主项和旧值组成的 .inf 文件中。

请注意 old-ini-entry 参数和 .ini 文件项是否匹配取决于主项本身,而不是主项和值。

3 除了 old-ini-entry 参数和 .inf 文件中条目是否匹配取决于主项和值,而不仅是主项,其他方面与上面列出的标志参数值 2 一样。

指定主项和值时可以使用星号 (*) 通配符,可以正确地解释此符号。

ini-file 名必须是字符串或字符串主项。字符串主项的形式为 %strkey%,其中 strkey 是在 .inf 文件的 Strings 节中定义的。在任何情况下名称都必须是有效文件名。

名称应包括文件所在文件夹的名称,但是文件夹名应以逻辑目录标识符 (LDID) 指定,而不是实际名称。在安装期间安装程序将用实际名称替换 LDID。

LDID 的形式为 %ldid%,其中 ldid 是预定义标识符或在 DestinationDirs 节中定义的标识符。注意常数 LDID_BOOT 和 LDID_BOOTHOST 被替换,在路径中加上反斜线。例如,LDID_BOOT 用 C:/ 替换。但是在 .inf 文件中可以使用反斜线,也可以不使用。例如,在引导驱动器的根中,可以使用“%30%boot.ini”和“%30%/boot.ini”来引用 BOOT.ini。

下例说明 .inf 文件的 Update .ini File 节中的单个项目:

%11%/sample.ini, Section1,, Value1=2 ;添加新项目
%11%/sample.ini, Section2, Value3=*, ;删除旧项
%11%/sample.ini, Section4, Value5=1, Value5=4 ;替换旧项
.inf 文件“Update .ini File-type”节中的下列项目组与 SYSTEM.ini中的 Boot 节一起进行操作。强制编入 .inf 文件项目的 flags 参数用于将条目 "comm.drv=comm.drv" 添加到 Boot 节,除非在 Boot 节存在条目 "comm.drv=*vcoscomm.drv" 或 "comm.drv=*r0dmdcom.drv",在这种情况下将保留现有的条目,且不将条目 "comm.drv=comm.drv" 添加到 .ini 文件中。换句话说,执行下面显示的四个 .inf 文件条目后,将有一个 "comm.drv=" 条目在 .inf 文件的 Boot 节中:"comm.drv=*vcoscomm.drv"、"comm.drv=*r0dmdcom.drv" 或 "comm.drv=comm.drv"。

system.ini, boot, "comm.drv=*vcoscomm.drv","~CommDrvTemp~=*", 3
system.ini, boot, "comm.drv=*r0dmdcom.drv","~CommDrvTemp~=*", 3
system.ini, boot,,"comm.drv=comm.drv"
system.ini, boot, "~CommDrvTemp~=*","comm.drv=*", 3

安装信息文件 (.inf) 定义


Update .ini Fields 节 (UpdateIniFields)
[ update-inifields-section-name ]
ini-file, ini-section, profile-name, [old-field], [new-field],[flags]
.
.
在给定 .ini 项的值中,替换、添加和删除字段。与 Update .ini File 节类型不同,此节的类型将替换、添加或删除 .inf 文件条目中的部分值,而不是全部值。节名 update-inifields-section-name 必须出现在 .inf 文件 Install 节的 UpdateIniFields 项目中。关于指定 .ini 文件名的详细信息,请参阅说明 Update .ini File 节类型的主题。

ini-section
包含要更改条目的 .ini 文件节名。

profile-name
要更改条目的名称。

old-field
要删除的“字段”值。

new-field
要添加原来没有的字段值。

flags
指定是否处理 old-field 和 new-field 参数,例如是否能有通配符或在 .inf 文件末尾添加新字段时使用何种分隔符。可以是以下这些值中的任意值:

值  意义
0 (默认值)字段匹配时,逐字处理 "*" 字符,而不将它当作通配符。将新字段添加到条目中时,使用空格 (" ") 作为分隔符。
1 字段匹配时,将 "*" 字符当作通配符处理。将新字段添加到条目中时,使用空格 (" ") 作为分隔符。
2 字段匹配时,逐字处理 "*" 字符,而不将它当作通配符。将新字段添加到条目中时,使用逗号 (",") 作为分隔符。
3 字段匹配时,将 "*" 字符当作通配符处理。将新字段添加到条目中时,使用逗号 (",") 作为分隔符。

删除 .ini 文件行中的任何注释,因为在更改后这些字段可能不再适用。处理 .inf 文件行的字段时,使用空格、制表符和逗号作为字段分隔符。但是在新字段添加到这一行时,将使用空格作为分隔符。

Add Registry 节 (AddReg)
[ add-registry-section]
reg-root-string, [subkey], [value-name], [flag], [value]
[reg-root-string, [subkey], [value-name], [flag], [value]]
.
.
将子项或值名添加到注册表,可以有选择地设置它的值。add-registry-section 名必须显示在 Install 节的 AddReg 类项目中。

reg-root-string
注册表根名。可以是以下值之一:

HKCR 与 HKEY_CLASSES_ROOT 相同
HKCU 与 HKEY_CURRENT_USER 相同
HKLM 与 HKEY_LOCAL_MACHINE 相同
HKU 与 HKEY_USERS 相同。
HKR 意味着与传递到 GenInstallEx 的关键值有关。

subkey
是可选的。标识要设置的子项。形式为 key1可以将该参数表示为可替代字符串。例如可以使用%Subkey1%,在 .inf 文件的 Strings 节中定义要替代 %Subkey1% 的字符串。

value-name
可选。标识 subkey 的值名。对于字符串类型,如果 value-name 参数为空,那么在 subkey 参数中指定的子项值将设置为 NULL 字符串。请注意,可以将 value-name 参数表示为可替代字符串。例如,可以使用 %Valname1%,在 .inf 文件的 Strings 节定义替换 %Valname1% 的字符串。

flag
可选。确定值的类型,以及如果注册表项已经存在,是否需要替换注册表项。

值 意义
0 (默认) 值为 ANSI 字符串。如果存在,则替换注册表项。
1 值为十六进制数。如果存在,则替换注册表项。
2 值为 ANSI 字符串。如果存在,不替换注册表主项。
3 值为十六进制数。如果存在,不替换注册表主项。

value-name
可选。设置值。它可以是 ANSI 字符串、十六进制符号或 Intel 格式的数字。包含二进制值的任何项目都可以用反斜线 (/) 符号扩展。也可以给出 %strkey% 形式的字符串主项。必须在 .inf 文件的 Strings 节中定义 strkey。要在该行中使用字符 %,请使用 %%。

至少需要两个字段;但是一个可以是空的。因此使用该形式时至少需要一个逗号。

在 AddReg-type 节的以下示例中,有两个项目将两个值名添加到注册表中。注意 %25% 将扩展到计算机的 Windows 文件夹中。

[MyAppRegEntries]
HKLM,Software/MyApp,ProgramName,,"My Application"
HKLM,Software/MyApp,"rogram Location",,"%25%/MyApp.exe"

Delete Registry 节 (DelReg)
[ del-registry-section]
reg-root-string, subkey, [value-name]
[reg-root-string, subkey, [value-name]]
.
.
从注册表删除子项或值名。del-registry-section 名必须出现在 Install 节的 DelReg 项目中。

reg-root-string
注册表根名。可以是以下值之一:

HKCR 与 HKEY_CLASSES_ROOT 相同
HKCU 与 HKEY_CURRENT_USER 相同
HKLM 与 HKEY_LOCAL_MACHINE 相同
HKU 与 HKEY_USERS相同。
HKR 意味着与传递到 GenInstallEx 的关键值有关。

subkey
标识要删除的子项。形式为 key1/key2/key3...。可以将该参数表示为可替代字符串。例如可以使用 %Subkey1%,在 .inf 文件的 Strings 节中定义要替代 %Subkey1% 的字符串。

value-name
可选。标识 subkey 的值名。请注意,可以将 value-name 参数表示为可替代字符串。例如,可以使用 %Valname1%,在 .inf 文件的 Strings 节定义替换 %Valname1% 的字符串。

该节的类型可以包含任何数量的项目。每个项目都从注册表中删除一个子项或值名。

Ini File to Registry 节 (Ini2Reg)
[ ini-to-registry-section]
ini-file, ini-section, [ini-key], reg-root-string, subkey[,flags]
.
.
将行和节从.ini 文件移动到注册表,在注册表中给定的主项下创建或代替注册表项。节名 ini-to-registry-section 必须出现在 .inf 文件 Install 节的 Ini2Reg 项目中。

ini-file
包含要复制注册表项的 .ini 文件名。关于指定 .ini 文件名的详细信息,请参阅关于 Update .ini File 节的参考主题。

ini-section
包含要复制注册表项 .inf 文件中的节名。

ini-key
要复制到注册表的 .inf 文件中的注册表项名。如果 ini-key 为空,则将整节转换为指定的注册表项。

reg-root-string
注册表根名。可以是以下值之一:

HKCR 与 HKEY_CLASSES_ROOT 相同
HKCU 与 HKEY_CURRENT_USER 相同
HKLM 与 HKEY_LOCAL_MACHINE 相同
HKU 与 HKEY_USERS相同。
HKR 意味着与传递到 GenInstallEx 的关键值有关。

subkey
标识要接收该值的子项。形式为 key1/key2/key3...。

flags
指示转换为注册表后是否删除 .ini 主项,以及如果注册表主项已存在,是否覆盖注册表中的值。可以是以下值之一:

值  意义
0 (默认值)将条目中的信息移到注册表后不从 .ini 文件中删除 .ini 条目。如果注册表子项已存在,则不替换当前值。
1 将条目中的信息移到注册表后从 .ini 文件中删除 .ini 条目。如果注册表子项已存在,则不替换当前值。
2 将条目中的信息移到注册表中后不从 .ini 文件中删除 .ini 条目。如果注册表子项已存在,则用 .ini 文件条目的值替换当前值。
3 将条目中的信息移到注册表后从 .ini 文件中删除 .ini 条目。如果注册表子项已存在,则用 .ini 文件条目的值替换当前值。
例如,假设在 Win.ini 文件中存在以下条目: [Windows]
CursorBlinkRate=15
如果在 Control Panel/Desktop 下不存在 CursorBlinkRate 子项,那么 Ini File to Registry 节中的下列项目将创建子项,并把它的值设置为 15,而且不更改 WIN..ini 中原有的行:

win.ini,Windows,CursorBlinkRate,HKCU,"Control Panel/Desktop"
如果注册表子项已存在,则 .inf 文件项目将注册表子项的值设置为 15,并且不更改 WIN..ini 中原有的行。

Update Config.sys 节 (UpdateCfgSys)
[update-config-section]
Buffers=legal-dos-buffer-value
DelKey=key
DevAddDev=driver-name,configkeyword[,flag][,param-string]
DevDelete=device-driver-name
DevRename=current-dev-name,new-dev-name
Files=legal-dos-files-value
PrefixPath=ldid[,ldid]
RemKey=key
Stacks=dos-stacks-values


提供命令,添加、删除或重命名 Config.sys 文件中的命令。节名 update-config-section-name 必须出现在 .inf 文件 Install 节的 UpdateConfigSys 项目中。

并不是前面所列语法中的所有项目类型都是必需的。Update Config.sys 节可以根据需要包含 DevRename、DevDelete、DevAddDev、DelKey 和 RemKey,但是在一节中只能使用项目 Buffers、Files 和 Stacks 一次。处理 Update Config.sys 节时,安装程序将先处理所有的 DevRenames 项目,然后处理所有的 DevDelete 项目,最后处理所有的 DevAddDev 项目。可在 Update Config.sys 节中使用的每种项目的语法和意义将在显示在后面的主题中。

Buffers 项目

Buffers=legal-dos-buffer-value
设置文件缓冲区的数目。与 Stacks 项目一样,安装程序比较现有值与建议值,然后将文件缓冲区设置为两者中的较大者。

legal-dos-buffers-value
合法的 MS-DOS 缓冲区值。

DelKey 项目

DelKey=key
在 Config.sys 文件中对带有指定主项的 Config.sys 命令加以注释。例如,下列 .inf 文件项目中:

DelKey=Break
在 Config.sys 文件中对 Break=on 命令加以注释。

DelKey 项目和 RemKey 项目有相同的效果。在 .inf 文件的节中可以有多个 DelKey 和/或 RemKey 项目。

key
对 Config.sys 命令的主项加以注释。

DevAddDev 项目

DevAddDev=driver-name,configkeyword[,flag][,param-string]
将 device 或 install 命令添加到 CONFIG.SYS 文件中。

driver-name
要添加驱动器或可执行文件的名称。 安装程序将核实文件扩展名,确保扩展名是 .sys 或 .exe。

configkeyword
命令名。可以是设备或安装程序。

flag
可选的位置标志。如果是 0,将命令放在文件末尾。如果是 1,则放在顶端。如果没有给定标志,则默认为 0。

param-string
可选的命令参数。对给定的设备驱动程序或可执行文件必须有效。

DevDelete 项目

DevDelete=device-driver-name
从 Config.sys 文件中删除包含指定文件名的任何行。

device-driver-name
文件名或设备驱动程序名。安装程序在 Config.sys 文件中搜索此名称,并删除包含该名称的任何命令行。因为 MS-DOS 不允许在 Config.sys 文件中省略文件扩展名,所以每个 device-driver-name 都必须明确指定文件扩展名。

下例中,Update Config.sys 节的以下DevDelete 项目将删除命令的第 1 行和第 3 行,但不删除 Config.sys 示例文件的第 2 行:

DevDelete=filename.sys
;; lines in Config.sys
Device=Filename.sys ;; line #1
Install=Filename.exe ;; line #2
Device=Filename.sys /d:b800 /I:3 ;; line #3
DevRename 项目

DevRename=current-dev-name,new-dev-name
重命名 Config.sys 文件中的设备驱动程序。

current-dev-name
要更改的设备驱动程序或可执行文件的名称。安装程序将在 Config.sys 文件中查找 device 或 install 命令右边的名称。

new-dev-name
驱动程序或可执行文件的新名称。

Files 项目

Files=legal-dos-files-value
在 Config.sys 文件中设置可打开文件的最大数目。与 Stacks 项目一样,安装程序比较现有值和建议值,然后将可打开的最多文件数设置为两者中的较大者。

legal-dos-files-value
合法的 MS-DOS 文件值。

PrefixPath 项目

PrefixPath=ldid[,ldid]
将与给定的 LDID 相关的路径附加到路径命令中。

ldid
可以是任何预定义 LDID 值或在 .inf 文件中定义的新值。关于所有预定义 LDID 值的定义,请参阅 DestinationDirs 节的“参考”主题。

RemKey 项目

RemKey=key
可在 Config.sys 文件中使用指定主项对 Config.sys 命令加以注释。例如,下列 .inf 文件项目中:

RemKey=Break
在 Config.sys 文件中对 Break=on 命令加以注释。

RemKey 项目和 DelKey 项目具有相同的效果。在 .inf 文件的节中可以有多个 RemKey 和/或 DelKey 项目。

key
对 Config.sys 命令的主项加以注释。

Stacks 项目

Stacks=dos-stacks-values
在 Config.sys 文件中设置堆栈的数量和大小。安装程序会比较现有值与建议值,然后把堆栈设置为两者中的较大者。例如,如果 Config.sys 文件包含 stacks=9,218,并且 .inf 文件包含 stacks=5,256,那么安装程序会把新值设置为 stacks=9,256。

legal-dos-stacks-value
合法的 MS-DOS 堆栈值。

安装信息文件 (.inf) 定义


Update Autoexec.bat 节 (UpdateAutoBat)
[ update-autoexec-section]
CmdAdd=command-name[,command-parameters]
CmdDelete=command-name
PrefixPath=ldid[,ldid]
RemOldPath=ldid[,ldid]
TmpDir=ldid[,subdir]
UnSet=env-var-name

提供命令,用于处理 Autoexec.bat 文件中的命令行。节名 update-ini-section-name 必须出现在 .inf 文件 Install 节的 UpdateInis 项目中。

Update Autoexec.bat 节并不需要上面所列语法中的所有项目类型。该节可以根据需要包含 CmdAdd、CmdDelete 和 UnSet 项目,但是在 .inf 文件中 PrefixPath、RemOldPath 和 TmpDir 项目只能使用一次。每种项目类型的语法和意义将在本主题之后介绍。

安装程序将在任何 CmdAdd 项目前处理所有的 CmdDelete 项目。

CmdAdd 项目

CmdAdd =command-name[,"command-parameters"]
将给定的命令以及可选命令参数添加到 Autoexec.bat 文件末尾。

command-name
可执行文件的名称,可以有扩展名,也可以没有。如果在 .inf 文件的 SourceDisksFiles 和 DestinationDirs 节中也定义了文件名,那么安装程序在把它写入到 Autoexec.bat 文件之前会将正确的路径添加到文件名中。

command-parameters
用双引号引起来的字符串或象 %String1% 或 %Myparam% 的可替代字符串,应在 .inf 文件的 Strings 节定义替代 %String1% 和 %Myparam% 的字符串。安装程序在把行附加到 Autoexec.bat 文件末尾之前,将字符串附加到 command-name。该行的格式取决于所给可执行文件的命令行要求。

CmdDelete 项目

CmdDelete=command-name
从 Autoexec.bat 文件中删除包括给定命令名的任何命令行。安装程序将搜索给定名称中带 .exe、.com 和 .bat 扩展名的文件,并删除所找到的文件。

command-name
无扩展名的可执行文件名。

PrefixPath 项目

PrefixPath=ldid[,ldid]...
将与给定的 LDID 相关的路径附加到路径命令中。

ldid
可以是任何预定义 LDID 值或在 .inf 文件中定义的新值。关于所有预定义 LDID 值的定义,请参阅 DestinationDirs 节的“参考”主题。

RemOldPath 项目

RemOldPath=ldid[,ldid]
从命令路径中删除与给定 LDID 相关的路径。例如,如果用户把新版本的 Windows 安装到 C: /Newwin 并在 C:/Windows 中有旧版本,则下列 .inf 文件项将从路径环境变量删除 C:/Windows:

RemOldPath=10
ldid
可以是任何预定义 LDID 值和在 .inf 文件中定义的新值。关于所有预定义 LDID 值的定义,请参阅 DestinationDirs 节的“参考”主题。

TmpDir 项目

TmpDir=ldid[,subdir]
如果不存在,可以在 LDID 给定的文件夹内创建临时文件夹。

ldid
可以是任何预定义 LDID 值或在 .inf 文件中定义的新值。关于所有预定义 LDID 值的定义,请参阅 DestinationDirs 节的“参考”主题。

subdir
路径名。如果 ldid/subdir 不存在,则创建它。

UnSet 项目

UnSet=env-var-name
从 Autoexec.bat 文件中删除包括给定环境变量名的任何 set 命令。

env-var-name
环境变量名。

DestinationDirs 节
[DestinationDirs]
file-list-section =ldid[, subdir ]
.
.
[DefaultDestDir=ldid[, subdir ]]

DestinationDirs 节定义 file-list 节中指定操作(可以是 CopyFiles、RenFiles 或 DelFiles 节)的目标目录。另外,可在 .inf 文件中的任何 CopyFiles、RenFiles 或 DelFiles 节指定默认目标文件夹,不需要在 DestinationDirs 节中明确地命名。

file-list-section
CopyFiles、RenFiles 或 DelFiles 节的名称。必须在 Install 节的 Copyfiles、RenFiles 或 DelFiles 项目中引用该名称。

ldid
逻辑磁盘标识 (LDID)。可以是以下值之一:

00 Null LDID - 可用于创建新的 LDID
01 源驱动器:/pathname
10 Machine 文件夹(在基于服务器的安装时,映射 Windows 文件夹。
11 System 文件夹
12 IOSubsys 文件夹
13 Command 文件夹
17 Inffolder
18 Help 文件夹
20 Fonts
21 Viewers
22 VMM32
23 Color 文件夹
24 包含 Windows 文件夹的驱动器根目录
25 Windows 文件夹
26 Windows 的约定引导设备 (Winboot)
28 Host Winboot
30 启动盘的根文件夹
31 虚拟启动盘的主驱动器根文件夹

subdir
LDID 所命名的文件夹中要成为为目标文件夹中的子文件夹名。

可选 DefaultDestDir 项目为任何 CopyFiles 项目提供默认目标目录,可以使用直接复制 (@file name) 符号或未在 DestinationDirs 节中指定的任何 CopyFiles、RenFiles 或 DelFiles 节。如果在 DestinationDirs 节中没有使用 DefaultDestDir,则将默认文件夹设置为 LDID_WIN。

下例将 MoveMiniPort 节的目标文件夹设置为 Windows/Ilsybsys,将其他节的默认文件夹设为启动盘上的 Bin 文件夹:

[DestinationDirs]
MoveMiniPort=12 ;MoveMiniPort 节的目标文件夹是
; windows/iosubsys
DefaultDestDirs=30,bin ; 复制到 boot:/bin

SourceDisksNames 节
[SourceDisksNames]
disk-ordinal="disk-description",disk-label,disk-serial-number
.
.
识别并命名包含文件复制和重命名操作的源文件的磁盘。

disk-ordinal
标识源盘的唯一号码。如果有多个源盘,则每个源盘都必须有唯一的序号。

disk-description
说明这张磁盘的内容或用途的字符串或字符串主项。安装程序向用户显示该字符串以标识磁盘。此说明文字用双引号引起来。

disk-label
格式化源盘时设置的源盘卷标。

disk-serial-number
未使用。则值必须为 0。

下例标识一张源盘。根据字符串主项给出磁盘说明:

[SourceDisksNames]
55 = %ID1%, Instd1, 0[Strings]
ID1="My Application Installation Disk 1"

SourceDisksFiles 节
[SourceDisksFiles]
file name=disk-number[,subdir] [,file-size]
.
.
color=#000000 命名安装过程中使用的源文件,并识别包含文件的源盘。

color=#000000 filename
color=#000000 源盘上的文件名。

disk-number
color=#000000 包含文件的源盘序号。必须在 SourceDisksNames 节中定义序号,而且必须是大于或等于 1 的值(0 是无效的盘号参数值)。

subdir
指定文件所在源盘上子文件夹的可选参数。如果没有使用该参数,则默认值是源盘上的根文件夹。

file-size 可选参数,以字节为单位指定文件大小。

color=#000000 以下 SourceDisksFiles 节示例标识序列号为 1 的磁盘上的单个源文件 SRS01.386:

[SourceDisksFiles]
SRS01.386 = 1

Strings 节
[Strings]
strings-key=value
.
.
定义一个或多个字符串主项。字符串主项是由可打印字符串所表示的名称。尽管 Strings 节通常是 .inf 文件的最后一节,但是该节中所定义的字符串主项可能用于 .inf 文件中使用相应字符串的任何地方。安装程序将把字符串主项扩展到给定的字符串,并将它用于进一步的处理。必须使用百分号 (%) 将字符串主项包围起来。

strings-key
由字符和数字组成的唯一名称。

value
由字母、数字或其他可打印字符组成的字符串。如果在项目类型中使用需要双引号的相应字符串主项,则应该用双引号将它引起来。

Strings 节使面向国际市场的字符串翻译工作变得非常简单,您只需在 .inf 文件的单独一节中使用 .inf 文件时,放置可在用户界面中显示的所有字符串。无论何时,都应该使用字符串主项。

下例显示 .inf 示例文件的 Strings 节。

[Strings]
String0="My Application"
String1="My Application Readme File"
String2="CX2590 SCSI Adapter"

Optional Components 节
[Optional Components]
install-section-name
[install-section-name]
.
.
列出用户单击“控制面板”上的“添加/删除程序”图标,单击“安装 Windows”选项卡,然后单击“从磁盘安装”按钮时,显示的 Install 节 .
。在列表中 Install 节会当作复选框显示。

注意,用鼠标右键单击 .inf 文件并选择“安装”命令执行 .inf 文件时,将忽略 Optional Components 节。以这种方式执行 .inf 文件时,将执行 [DefaultInstall] 节。如果通过 Setupx.dll InstallHinfSection 条目点执行 .inf 文件,也将忽略 Optional Components 节。通过 SETUPX 条目执行 .inf 文件时,将执行在条目参数中指定的 Install 节。

Install 节与以前介绍的格式一样,可以将下面的主项添加到 Install 节以启动“从磁盘安装”对话框中的界面:

OptionDesc=option-description
Tip=tip-description
InstallDefault=0 | 1 ; 是否在默认情况下安装此组件。1=Yes, 0=No.
IconIndex=icon-index
Parent=install-section-name
Needs=install-section-name, [install-section-name]
Include=inf-file, [inf-file]

option-description
列表框中当作组件名所使用的字符串值。option-description 参数可以是 %String1%,在 .inf 文件的 Strings 节中定义要替代 %String1% 的字符串。

tip-description
在列表框中选定组件时,在“说明”框中所显示的字符串值。tip-description 参数最多可为 255 个字符,并且可以是 %String1%,在 .inf 文件的 Strings 节中定义要替代 %String1% 的字符串。

icon-index
决定显示在组件名旁边的小图标的数值。有效值是:0 机器(基础和显示)
1 集成电路芯片
2 显示器
3 网线
4 Windows 标志
5 鼠标
6 键盘(3 键)
7 话筒
8 扬声器
9 硬盘
10 串口连接器
11 菱形框(默认值)
12 复选框
13 未选中的复选框
14 打印机
15 网卡
16 形如 0 的图符 17 与 0 形状相似,下面带共享的手形图符
18 未知(问号)
19 正在工作的图符
20 显示为灰色的复选框
21 拨号网络
22 直接电缆连接
23 公文包
24 Exchange
25 部分选中
26 附件组
27 多媒体组
28 快速查看
29 MSN
30 计算器
31 磁盘碎片整理程序
32 一般文档
33 磁盘整理程序
34 纸牌
35 超级终端
36 对象软件包
37 画图
38 屏幕保护
39 写字板
40 剪贴板查看程序
41 辅助选项
42 备份
43 位图文档
44 字符映射表
45 鼠标指针
46 网络监视器
47 电话拨号器
48 系统监视器
49 帮助手册
50 地球(区域设置)
51 音频压缩
52 CD 播放器
53 媒体播放机
54 声音方案
55 视频剪辑
56 视频压缩
57 音量控制
58 “乐曲”配音方案
59 “蛙鸣”配音方案
60 “金属声”配音方案
61 “幻想空间”配音方案

Parent
在可选组件界面中所显示的列表框可以包含子层。如果可选组件是子组件,则 Parent= keyword 定义父组件的 Install 节。

Needs
如果组件从属于其他组件,则这将定义该组件所需要的 Install 节。如果选中该组件,系统将警告用户该组件需要在Needs= 行列出 Install 节中描述的组件。

注意在Needs= 行列出的 Install 节必须在同一个 .inf 文件中。但是,如果在 Needs= 行上列出其他 .inf 文件的从属组件,则必须在 Include= 行上指定 .inf 文件。

Include
Include 项目允许您指定 .inf 文件,而安装程序在加载 .inf 文件时也必须把 .inf 文件调入内存,因为这些 .inf 文件包含除 .inf 文件中 Install 节外必须运行的节。Needs 项目指定要在已包括的 .inf 文件中运行的节名。

下例定义两个可选组件安装节,每个安装节使用其他条目来指定界面元素和从属性:

[Optional Components]
InstallMyToys
InstallGames[InstallMyToys]
OptionDesc=%Toys_DESC%
Tip=%Tomytoysys_TIP%
IconIndex=35 hone mini-icon for dialogs
Parent=MailApps
Needs=MSMAIL, MAPI, MicrosoftNetwork
Include=mos.inf, msmail.inf
CopyFiles=MyToysFiles
UpdateInis=MyToysLinks
AddReg=MyToysRegItems[InstallOtherApps]
OptionDesc=%Other_DESC%
Tip=%Other_TIP%
IconIndex=4 ; windows mini icon for dialogs
CopyFiles=OtherFiles
UpdateInis=OtherLinks
AddReg=OtherRegItems[Strings]
Toys_DESC="Mail Utilities"
Toys_TIP="Additional utilities for sending and organizing mail"
Other_DESC="Other Helpful Utilities"
Other_TIP="Calculator, disk checker and performance monitor"

=================================================================================

INF安装文件短路径详解

Thought this may help people out, I apologise if a similar method has been posted previously, but I couldn't find one in my searches.

Before the cleanup routine is called in runoncex.cmd, add the lines similar to the following:
CODE
REG ADD %KEY%/045 /VE /D "Adding user defined shortcuts" /f
REG ADD %KEY%/045 /V 1 /D "rundll32 setupapi,InstallHinfSection Shortcuts 128 %systemdrive%/Apps/Standalone/shortcuts.inf" /f

Now create a shortcuts.inf file similar to this:
CODE
[Version]
Signature=$CHICAGO$

[Shortcuts]
UpdateInis=AddLink

[AddLink]
;adds shortcut to ERUNT.exe within %ProgramFiles%/Standalone/ERUNT folder to %USERPROFILE%/Start Menu/Programs/Standalone/ERUNT
setup.ini, progman.groups,, "group1=""%16386%/Standalone/ERUNT/"""
setup.ini, group1,,"""ERUNT"",""""""%16422%/Standalone/ERUNT/ERUNT.EXE"""""""

;adds shortcut to README.TXT within %ProgramFiles%/Standalone/ERUNT folder to %USERPROFILE%/Start Menu/Programs/Standalone/ERUNT
setup.ini, progman.groups,, "group2=""%16386%/Standalone/ERUNT/"""
setup.ini, group2,,"""Readme"",""""""%16422%/Standalone/ERUNT/README.TXT"""""""

;adds shortcut to NTREGOPT.EXE within %ProgramFiles%/Standalone/ERUNT folder to %USERPROFILE%/Start Menu/Programs/Standalone/ERUNT
setup.ini, progman.groups,, "group3=""%16386%/Standalone/ERUNT/"""
setup.ini, group3,,"""NTREGOPT"",""""""%16422%/Standalone/ERUNT/NTREGOPT.EXE"""""""

;adds shortcut to Restoration.exe within %ProgramFiles%/Standalone/Restoration folder to %USERPROFILE%/Start Menu/Programs/Standalone/Restoration
setup.ini, progman.groups,, "group4=""%16386%/Standalone/Restoration/"""
setup.ini, group4,,"""Restoration"",""""""%16422%/Standalone/Restoration/Restoration.exe"""""""

;adds shortcut to SyncBack.exe within %ProgramFiles%/Standalone/SyncBack folder to %USERPROFILE%/Start Menu/Programs/Standalone/SyncBack
setup.ini, progman.groups,, "group5=""%16386%/Standalone/SyncBack/"""
setup.ini, group5,,"""SyncBack"",""""""%16422%/Standalone/SyncBack/SyncBack.exe"""""""

;adds shortcut to SYNCBACK.HLP within %ProgramFiles%/Standalone/SyncBack folder to %USERPROFILE%/Start Menu/Programs/Standalone/SyncBack
setup.ini, progman.groups,, "group6=""%16386%/Standalone/SyncBack/"""
setup.ini, group6,,"""SyncBack Help"",""""""%16422%/Standalone/SyncBack/SYNCBACK.HLP"""""""

;adds shortcut to popcorn.exe within %ProgramFiles%/Standalone/PopCorn folder to %USERPROFILE%/Start Menu/Programs/Standalone/PopCorn
setup.ini, progman.groups,, "group7=""%16386%/Standalone/PopCorn/"""
setup.ini, group7,,"""Ultrafunk Popcorn"",""""""%16422%/Standalone/PopCorn/popcorn.exe"""""""

;adds shortcut to popreadme.txt within %ProgramFiles%/Standalone/PopCorn folder to %USERPROFILE%/Start Menu/Programs/Standalone/PopCorn
setup.ini, progman.groups,, "group8=""%16386%/Standalone/PopCorn/"""
setup.ini, group8,,"""Readme"",""""""%16422%/Standalone/PopCorn/popreadme.txt"""""""

;for meanings of %16386% and %16422% see listings below
;
; Common DIRID Listing,
;
; Destination Directories
;
; 01 - SourceDrive:/pathname      (the directory from which the INF file was installed)
; 10 - Windows directory      (%SystemRoot%)
; 11 - System directory       (%SystemRoot%/system32 -NT-, %SystemRoot%/system -Win9x/Me-)
; 12 - Drivers directory      (%SystemRoot%/system32/drivers -NT-, %SystemRoot%/system/IoSubsys -Win9x/Me-)
; 17 - INF file directory      (%SystemRoot%/inf)
; 18 - Help directory       (%SystemRoot%/Help)
; 20 - Fonts directory       (%SystemRoot%/Fonts)
; 24 - Root directory of system disk (%SystemDrive%)
; 25 - Shared directory       (%ALLUSERSPROFILE%/Shared Documents)
; 53 - User profile directory      (%USERPROFILE%)
;
; Shell Special Folders
;
; 16419 %ALLUSERSPROFILE%/Application Data
; 16409 %ALLUSERSPROFILE%/Desktop
; 16430 %ALLUSERSPROFILE%/Documents
; 16437 %ALLUSERSPROFILE%/Documents/My Music
; 16438 %ALLUSERSPROFILE%/Documents/My Pictures
; 16439 %ALLUSERSPROFILE%/Documents/My Videos
; 16415 %ALLUSERSPROFILE%/Favorites
; 16406 %ALLUSERSPROFILE%/Start Menu
; 16407 %ALLUSERSPROFILE%/Start Menu/Programs
; 16431 %ALLUSERSPROFILE%/Start Menu/Programs/Administrative Tools
; 16408 %ALLUSERSPROFILE%/Start Menu/Programs/Startup
; 16429 %ALLUSERSPROFILE%/Templates
; 16410 %USERPROFILE%/Application Data
; 16417 %USERPROFILE%/Cookies
; 16384 %USERPROFILE%/Desktop
; 16400 %USERPROFILE%/Desktop
; 16390 %USERPROFILE%/Favorites
; 16412 %USERPROFILE%/Local Settings/Application Data
; 16443 %USERPROFILE%/Local Settings/Application Data/Microsoft/CD Burning
; 16418 %USERPROFILE%/Local Settings/History
; 16416 %USERPROFILE%/Local Settings/Temporary Internet Files
; 16389 %USERPROFILE%/My Documents
; 16397 %USERPROFILE%/My Documents/My Music
; 16423 %USERPROFILE%/My Documents/My Pictures
; 16398 %USERPROFILE%/My Documents/My Videos
; 16403 %USERPROFILE%/NetHood
; 16411 %USERPROFILE%/PrintHood
; 16392 %USERPROFILE%/Recent
; 16393 %USERPROFILE%/SendTo
; 16395 %USERPROFILE%/Start Menu
; 16386 %USERPROFILE%/Start Menu/Programs
; 16432 %USERPROFILE%/Start Menu/Programs/Administrative Tools
; 16391 %USERPROFILE%/Start Menu/Programs/Startup
; 16405 %USERPROFILE%/Templates
; 16422 %ProgramFiles%
; 16427 %ProgramFiles%/Common Files
; 16440 %SystemRoot%/Resources
; 16441 %SystemRoot%/Resources/0409
;
; e.g.
; For shortcut in users Quick Launch toolbar,
; "%16410%/Microsoft/Internet Explorer/Quick Launch/"

You can remove all the commented lines to make it smaller
In my example the standalone programs,(all freeware), were each within their own folders within a folder called Standalone which in turn resided inside /$OEM$/$Progs and the shortcuts were all created within their own new folders within a new folder named Standalone which in turn resided in %USERPROFILE%/Start Menu/Programs.

Hope this has been of some use to you

 

你可能感兴趣的:(inf文件基础知识)