编写INF文件进行文件安装

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
◆ 丁健 张万 江南

安装信息(Setup Information)文件是Windows系统支持的一种安装信息存放文件,一般以INF作为扩展名,因此也叫INF文件。安装信息INF文件与Windows内建的安装服务引擎(API函数库)紧密协同工作,基于其严格的编写语法制作而成的INF文件在拷贝、删除文件,增、删注册表键,更改系统设置等方面都有优秀的表现,完全可以用来实现应用程序文件安装的目标,而且价格免费,透明度高,安装程序小,可完全定制。INF文件是文本文件,可在任何文本编辑器内查看、创建、修改,普通用户使用Windows系统本身提供的记事本、写字板即可进行文件安装脚本的编写。

INF文件安装动作的触发机制

在文件目录中用鼠标右击INF文件,会显示不同于其他扩展名文件的“安装”菜单。Windows平台在计算机中完成初始安装后,就注册了INF文件的“安装”动作,此“安装”动作关联命令行程序基本形式为:

RunDll setupx.dll,InstallHinfSection section reboot-mode inf-name

如笔者目前正在使用的Windows 98系统注册表中,HKEY_CLASSES_ROOT/inffile/install/

command键的默认值为(install即为安装):

C:/WINDOWS/rundll.exe setupx.dll,InstallHinfSection DefaultInstall 132 %1

其中,rundll程序以命令行的形式调用Windows的动态链接库,其命令格式为:

rundll.exe <DLL文件名>,<入口点>,<调用参数>

setupx.dll是安装API(Setup API)函数库,包含了InstallHinfSection、SetupGetInfSections、SetupInstallFromInfSection、SetupPromptForDisk、SetupDiCreateDevRegKey等INF文件内部语法检查、节名搜索、注册键创建等功能函数。setupx.dll与其后的入口点用逗号(,)分开,入口点是大小写敏感的。

Section是INF文件内初始执行节名,首先执行该节内容,默认情况下名称为“DefaultInstall”,系统用户一般不宜对此做任何改动,如被改动,则在后续INF文件的Install节使用相应修改后的名称。

reboot-mode是重启动参数,指示在INF文件执行后对系统的设置进行了改变,操作系统是否重新启动。该参数一般设为132或4,即由安装程序决定是否必须重启动,因为某些设置的改变必须在重启动后才能生效。

inf-name是INF文件的名称,“%1”即为所选中文件本身。

INF文件内部节(Section)的定义

INF文件用特殊的文本文件格式编辑、保存,Windows内建的安装函数遵循既定的语法从INF文件内获取安装信息。INF文件和初始化(或称私有化,Private File)文件相似,采用节(Section)和入口(Entries)的索引机制,节和入口定义了所有操作类型及操作对象。一个INF文件由不同类型的节组成,每类节都有其特殊的目的和不同的实现语法,每节的内容均服务于该节的目的。除了基本的识别INF格式的“Version”节外,INF文件中节的数目和类型没有限制,主要取决于具体安装任务。一个基本的INF文件,一般包含如下几节:



表中黑体节名是保留关键字,名称固定,大小写不敏感,斜体节名名称任意,由INF文件编写者确定。每节的标题字符均用括号([])括起。 限于篇幅本文只对黑体节名做进一步的解释。

[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]节内只能出现一次,第二次及以后出现的同名重复入口将被忽略。每类入口的等号右侧可罗列多个节名,节名之间以逗号分开,以便列举同一类动作的不同作用对象,如删除多个注册表键、拷贝文件到多个目录路径等。

下表是各类入口的动作含义,具体语法本文不做细述:


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



[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为被双引号括起的长字符串,字符串可由字母、数字或其他可打印字符组成。

一个具体的安装实例

本文接下来列举一个名为“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。待目录选择对话框出现,点击“浏览”按钮或直接在文本编辑框内键入目录名称后,屏幕显示文件安装拷贝和更新快捷方式进度,最终结束。

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

小 结

本文介绍的文件安装方法适合于大众,读者可熟悉语法、参考例子、效仿编写,制作出自己的安装信息文件。
易语言安装INF文件 易语言安装INF文件源码,安装INF文件 立即下载

相关推荐

运行INF文件

方法1. 运行RunDll32 advpack.dll,LaunchINFSection YOUINFNAME.inf,DefaultInstall 方法2. 在.inf文件右键中添加安装选项,一劳永逸 操作步骤如下:打开我的电脑,“工具”菜单中的“文件夹选项”。切换至“文件类型”选项卡,在其中找到inf文件,点高级按钮,双击“安装”(如没有“安装”就添加一个),按如下内容修改用于执行操...

鹰击长空 668

如何编写 INF 文件

如何编写 INF 文件INF文件全称Information File文件,是Winodws操作系统下用来描绘设备或文件等数据信息的文件INF文件是由规范的ASCII码组成,您能够用任何一款文字编辑器查看修正其中的内容。普通我们总是以为INF文件是系统设备的驱动程序,其实这是错误的认识,Windows之所以在装置某些硬件的驱动时提示需求INF文件是由于INF文件为该设备提供了一个全面描绘硬件参数和相应驱动文件(DLL文件)的信息。就好比我们看着阐明书装置电脑硬件一样,我们就是Windows系统,阐明书就是I

hutao1101175783的专栏 2559

INF驱动的安装与卸载

首先在设备管理器中找到你的设备,右键属性,找到 类GUID的值,通常为 {3f966bd9-fa04-4ec5-991c-d326973b5128} 类似的一串字符。首先打开 C:\windows\inf 文件夹,找到你的驱动的INF文件名称,通常为oemxxx.inf,然后执行一下命令就能删除这个驱动。再win10上,设备管理器中没有卸载驱动的右键菜单,所以需要按照一下方式卸载你安装的驱动程序。将所有的系统驱动全部打印到a.txt文件中,然后自行查找你的驱动文件名称。XXX为你要安装INF文件名。

weixin_44452065的博客 1万+

win10安装inf驱动

有时候我们需要安装 .inf 的驱动,但是会提示“第三方INF不包含数字签名”,安装不了,可以按照下面的方法解决。最后一张图,按键盘上的 7 ,禁用驱动程序强制签名,系统会自动重启。1.安装*.inf 驱动,鼠标右键点击 inf文件,选择“安装”重启后按照 步骤1,就不会再提示"第三方INF不包含数字签名".2.如果提示“第三方INF不包含数字签名”,那么按照下面步骤。3.重启后按照下图依次进入。

雪狼人的宿命 1万+

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

安装信息(Setup Information)文件Windows系统支持的一种安装信息存放文件,一般以INF作为扩展名,因此也叫INF文件安装信息INF文件Windows内建的安装服务引擎(API函数库)紧密协同工作,基于其严格的编写语法制作而成的INF文件在拷贝、删除文件,增、删注册表键,更改系统设置等方面都有优秀的表现,完全可以用来实现应用程序文件安装的目标,而且价格免费,透明度高

her0z的专栏 414

inf 安装信息文件编写

1、如果需要创建cab文件,首先需要Cabarc或者Makecab,它们随着Cabinet SDK的安装就有了,Cabinet SDK的下载地址是http://msdn.microsoft.com/workshop/management/cab/cabdl.asp。Cabarc可以创建、查看或者解出cab里面的文件,而Makecab则只可以用来创建cab文件。2、制作cab文件时需要将所有的相关文

xwtcss的专栏 946

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

[Version]节 任何INF文件的第一个小节均是[Version],又称为INF文件头。一般有如下语句: [Version]Signature=“$Chicago$” LayoutFile=filename.inf 其中,Signature的值应为“$Chicago$”、“$Windows 95$”或“$Windows NT$”中的一个(不区分...

weixin_33924770的博客 239

编写INF文件进行文件安装(转载)

编写INF文件进行文件安装(转载) 本文来源:http://www.cppblog.com/killsound/archive/2007/01/25/17970.aspx安装信息 (Setup Information) 文件Windows 系统支持的一种安装信息存放文件,一般以 INF 作为扩展名,因此也叫 INF 文件安装信息 INF 文件Windows 内建的安装服务引擎 (

yangbing694383929的专栏 1004

【转】编写INF文件进行文件安装

丁健 张万 江南安装信息(Setup Information)文件Windows系统支持的一种安装信息存放文件,一般以INF作为扩展名,因此也叫INF文件安装信息INF文件Windows内建的安装服务引擎(API函数库)紧密协同工作,基于其严格的编写语法制作而成的INF文件在拷贝、删除文件,增、删注册表键,更改系统设置等方面都有优秀的表现,完全可以用来实现应用程序文件安装的目标,而且价格免费...

weixin_33924220的博客 262

inf安装信息文件编写-VB编程

导读: 1、如果需要创建cab文件,首先需要Cabarc或者Makecab,它们随着Cabinet SDK的安装就有了,Cabinet SDK的下载地址是http://msdn.microsoft.com/workshop/management/cab/cabdl.asp。正在装载数据…… Cabarc可以创建、查看或者解出cab里面的文件,而Makecab则只可以用来创建cab文件。2、

adm1n1的专栏 811

windows里的【.inf文件

Inf 文件简介 软件编程   2008-12-23 1635   阅读88   评论0   字号: 大大  中中  小小 Inf 文件简介 (参考和翻译文件来源如下 我看了MSDN 和OSR 的解释,加了自己的理解,也翻译了一些内容,也去掉了一些内 容,英文好的自己看好了。相信该作者Brian Catlin Inf 是一个头疼的东西,主要它是一个不用语言而是用配置文件来处理的文

sudo.lee的专栏 8948

windowsinf

windowsinf是什么? 它有什么么用? INF安装windows驱动的时候需要用到的文件。 它就像一个安装脚本,告诉windows怎么安装驱动, 源文件在哪里、安装到哪一个文件夹中、怎样在注册表中加入自身相关信息等等。 INF文件其实是一种纯文本文件,可以编辑查看。 INF文件有一整套的编写规则,每一个INF文件都是严格按照这些规则来编写的。 规则 规

mofabang的专栏 776

inf文件编写

标 题: 【原创】【成果3.2】inf文件编写作 者: sislcb时 间: 2008-01-02,15:19链 接: http://bbs.pediy.com/showthread.php?t=57571这部分主要讲解inf文件编写,其实inf文件不仅仅可以用来做为安装驱动使用,还有很多其他用法,这里就不涉及了,先讲下inf的语法,这些语法都是

trents的专栏 888
上一篇: 明明白白Inf文件
下一篇: windows$OEM$发布文件夹概述
ncdawen
博客等级 码龄21年 76粉丝 185原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值