编写INF文件进行文件安装(下)

本文详细介绍INF文件的结构和语法,包括关键节如[Version]、[Install]等的使用方法,并通过实例展示如何利用INF文件实现软件安装流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[Version]
任何 INF 文件的第一个小节均是 [Version] ,又称为 INF 文件头。一般有如下语句:
[Version]
Signature=“$Chicago$”
LayoutFile=filename.inf
其中, Signature 的值应为 “$Chicago$” “$Windows 95$” “$Windows NT$” 中的一个 ( 不区分大小写 ) ,否则 Windows 不接受该文件为 INF 文件,内建的动作也就不会起作用。
filename.inf 文件包含安装组件必需的安装布局信息 ( 源盘和源文件 ) ,该行是可选的,如果没有提供布局信息文件,则在 INF 文件内必须包含 [SourceDisksNames] [SourceDisksFiles] 节。
[Install]
[Install] 节提供了一个 INF 文件安装过程的总览,它识别文件内其他包含安装信息节的详细动作,是 Windows 内建安装函数识别安装过程和内容的真正入口,用户所有的安装目的在这里表现。那些与 [Install] 节内容不存在关联的节的动作将被忽略。
[Install] 节分 [DefaultInstall] [OtherInstall] 两类,它们使用相同的格式。 [DefaultInstall] 节节名 “DefaultInstall” 如前面表格内容所述被显式地在注册表中指定,大小写不敏感。该节也是系统获取 INF 文件中安装信息的首要入口,当用户右击 INF 文件选 安装 时该节内容被执行。 [OtherInstall] [DefaultInstall] 节遵循相同的语法 , 但必须被显式地调用,常被用来定义反安装动作。它们均可包括以下种类的可选入口 :
CopyFiles=[CopyFiles-section-name]file-list-section[,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 文件内的索引节名 ( 不用指出节名的一个特例是 CopyFiles 入口 , 可使用 “@” 字符后跟文件名的形式,效果是直接将文件拷贝到 DestinationDirs 节所罗列的硬盘目录 ) 。节名需由可打印字符组成,在中文系统平台中,可使用中文字符作为节名,这也是体现 INF 格式安装本地化的地方,非常直观。每类入口在一个 [Install] 节内只能出现一次,第二次及以后出现的同名重复入口将被忽略。每类入口的等号右侧可罗列多个节名,节名之间以逗号分开,以便列举同一类动作的不同作用对象,如删除多个注册表键、拷贝文件到多个目录路径等。
下表是各类入口的动作含义,具体语法本文不做细述 :
 
CopyFiles
等号右侧是拷贝文件罗列节节名,将文件拷贝到 DestinationDirs 节指定的目的地,所有的源文件必须在 SourceDisksFiles 节列出
RenFiles
重命名文件
DelFiles
删除文件
UpdateInis
安装过程中更新 INI 初始化文件内容
UpdateIniField
安装过程中更新 INI 初始化文件值内容
AddReg
增加注册表键或键值
DelReg
删除注册表键或键值
Ini2Reg
INI 文件内容更新注册表
UpdateCfgSys
更新 Config.sys 文件内的设置
UpdateAutoBat
更新 Autoexec.bat 文件内的设置

在实际编写 INF 文件时,注册表根键通常采用缩写方式,如下表:

HKCR
HKEY_CLASSES_ROOT 的简写
HKCU
HKEY_CURRENT_USER 的简写
HKLM
HKEY_LOCAL_MACHINE 的简写
HKU
HKEY_USERS 的简写
HKR
相对键,对于硬件设备驱动程序类安装的
 
Re:编写INF文件进行文件安装(2)
 
[DestinationDirs]节

[DestinationDirs]节指定拷贝、重命名或删除文件三类动作的目的目录路径,拷贝、重命名或删除操作对象即文件的列表在专门的节中列出,这些节名最初在“Install”的CopyFiles、RenFiles或DelFiles入口中明确。
[DestinationDirs]节内语句的语法为:
file-list-section=LDID,[Subdir]
[DefaultDestDir=LDID,[Subdir]]
其中file-list-section为必选项,是CopyFiles、RenFiles或DelFiles入口内列出的节名。
LDID(Logical disk identifier)为必选项,是逻辑盘标识码,代表各种系统或实时安装路径,逻辑盘标识码可看做一种宏字符串,随系统或实时安装路径的不同而相应改变。逻辑盘标识码机制确保了安装的灵活性和正确性,该标识码可为下表所述值之一:
Subdir为可选项,指定LDID目录下的子目录名。
DefaultDestDir为可选项,指定CopyFiles、RenFiles或DelFiles入口的缺省操作目录。

[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为可选项,表明文件的大小,以字节为单位。

[Strings]节

[Strings]节定义一个或多个本地化字符串,或称字符串宏。尽管[Strings]节一般被放置在INF文件的末尾,字符串宏可在INF文件任何地方使用,安装引擎解释、展开字符串宏为给定的长字符串并做进一步处理。字符串宏在使用时需用百分号(%)括起。[Strings]节内语句的语法为:
strings-key=value
其中strings-key为由字母或数字等可打印字符组成的宏名。
Value为被双引号括起的长字符串,字符串可由字母、数字或其他可打印字符组成。
 
 
 
 
Re:编写INF文件进行文件安装(2)
 
 
一个具体的安装实例

本文接下来列举一个名为“Mysetup.inf”的安装信息文件实例,以便读者熟悉INF文件语法,领略INF文件的安装效果。该“Mysetup.inf”文件可完成如下的安装任务:假设应用程序有“MyApp.exe”、“MyApp.hlp”、“MyApp.dll”等几个需安装到应用程序主目录的文件,有“Ass_1.dll”、“Ass_2.dll”等几个需安装到Windows/System子目录的文件,要求将各文件按预定目录位置拷贝到位,其中应用程序主目录可在安装过程中选定,同时,在“开始>程序”下面建立名为“我的程序组”的程序组,在该程序组下建立名为“我的应用程序”、“我的应用程序帮助”的两个程序项,分别与“MyApp.exe”和“MyApp.hlp”文件关联。
完成上述安装任务的“Mysetup.inf”文件内容如下:

[Version]
signature=“$chicago$”
[AdvSetup]
HKLM,SOFTWARE/Microsoft/Windows/CurrentVersion/Runonce/Setup,“INF制作安装程序”,,“RunDll32.exe“%01%”/advpack.dll,LaunchINFSection Mysetup.inf,DefaultInstall2”
[DefaultInstallX]
[DefaultInstall]
AddReg=AdvSetup
[DefaultInstall2]
CopyFiles = 拷贝到用户指定目录,拷贝到Windows/System子目录 ,……
CustomDestination=My-path
UpdateInis = 加exe文件快捷方式,加hlp文件快捷方式,……
[SourceDisksNames]
1=“文件所在目录”,,0
[SourceDisksFiles]
MyApp.exe.exe=1,,1021
MyApp.dll=1,,1021
MyApp.hlp=1,,1021
Ass_1.dll=1,,1021
Ass_2.dll=1,,1021
[DestinationDirs]
拷贝到用户指定目录 = 49000
拷贝到Windows/System子目录 = 11
[My-path]
49000,49001,49002,49003=index-again,1
[index-again]
“”,“”,“”,,““默认安装到“C:/MyApp”目录,可选择””,“%30%/MyApp”
[拷贝到用户指定目录]
MyApp.exe
MyApp.dll
MyApp.hlp
[拷贝到Windows/System子目录]
Ass_1.dll
Ass_2.dll
[加exe文件快捷方式]
setup.ini, progman.groups,, “group1=““我的程序组”””
setup.ini, group1,,“““我的应用程序””,““““““%49000%/MyApp.exe””””””,,,,,““MyApp.exe”””
[加hlp文件快捷方式]
setup.ini, progman.groups,, “group1=““我的程序组”””
setup.ini, group1,,“““我的应用程序帮助””,““““““%49000%/MyApp.hlp””””””,,,,,““MyApp.hlp”””
读者会注意到上面的文件内许多键名使用了中文,这是因为INF格式文件支持中文提示及中文键名。这些中文键名不仅充当功能键起索引的作用,还形象化地标识了键的前后对应关系,增强了文件内容的可读性,有利于后续更改、维护。

安装时,首先确保应用程序的所有待安装文件和“Mysetup.inf” 文件处在同一个目录下,右击“Mysetup.inf”文件选“安装”或按Shift键的同时按功能键F10。待目录选择对话框出现,点击“浏览”按钮或直接在文本编辑框内键入目录名称后,屏幕显示文件安装拷贝和更新快捷方式进度,最终结束。

打开资源管理器,就可查看到所有文件均已拷贝到指定目录位置。点击“开始>程序”,可以找到“我的程序组”程序组及下属的“我的应用程序”、“我的应用程序帮助”程序项,选中程序项均能激活对应文件,说明文件安装及快捷方式关联均告成功。

小 结

本文介绍的文件安装方法适合于大众,读者可熟悉语法、参考例子、效仿编写,制作出自己的安装信息文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值