㈠、INF文件是什么
.INF是DeviceInformationFile(设备信息文件)的缩写,是微软公司为供硬件设备制
造商发布其设备驱动程序而发展的———许多硬件设备的驱动程序都是使用.INF文件来安
装的。.INF文件从Windows3.X时代就开始大量被使用了。(说明:绿色部分可以忽略,
仅做说明。蓝色部分为重点突出,文中要点,红色部分为特别注意,看仔细哦。)
先看这个最常见的.INF文件哈:
;示例04寒夜孤星【自动播放】
[AutoRun]
open=
icon=%SystemRoot%,27
怎么样?没有比这个再简单的.INF文件了吧?这个就是所有.INF中最知名的啦!用于
自动播放滴.INF,通常位于根目录下。那么.INF是不是就很简单了捏?也不是。如果你不
怕头晕的话,就接着看下去哈。。。
.INF文件是一种具有特定格式的纯文本文件,我们可说它是一种安装脚本
(SetupScript)。虽然.INF只是纯文本文件,但是当我们在文件管理器explorer对.INF文
件按鼠标右键后,在右键菜单上就会出现“安装I”命令。
此“安装”动作关联命令行程序基本形式为:
RunDll//,InstallHinfSectionctionreboot-mode
inf-name
其中,rundll/rundll32程序以命令行的形式调用Windows的动态链接库,其命令格式为:
/
/是安装API(SetupAPI)函数库,/与其后的
入口点用逗号(,)分开,入口点是大小写敏感的。
Section是INF文件内初始执行节名,首先执行该节内容,默认情况下名称为“DefaultInstall”,系统用
户一般不宜对此做任何改动,如被改动,则在后续INF文件的Install节使用相应修改后的名称。
reboot-mode是重启动参数,指示在INF文件执行后对系统的设置进行了改变,操作系统是否重新启
动。该参数一般设为132或4,即由安装程序决定是否必须重启动,因为某些设置的改变必须在重启动后
才能生效。
inf-name是INF文件的名称,“%1”即为所选中文件本身。
WindowsXPSP3下为(示例):%SystemRoot%
tupapi,InstallHinfSectionDefaultInstall132%1
说明:rundll及在win9x系列的操作系统使用。在以后的讲解中不再区分这些。。。
这是因为微软公司已在其操作系统Windows中内置提供了SetupAPI(可以解释.INF
脚本文件/,/是安装API(SetupAPI)函数库,
包含了InstallHinfSection、SetupGetInfSections、SetupInstallFromInfSection、
SetupPromptForDisk、SetupDiCreateDevRegKey等INF文件内部语法检查、节名搜索、注册
键创建等功能函数。),我们只需用文本编辑软件编写.INF文件,便可完成大部份的安装
工作,所以尤其是在软体的大小并不是很大的情况下,安装工作不是很复杂的时候,使
用.INF文件来进行安装工作将会是一个好选择。而且如果要安装设备驱动程序,.INF文件
是目前唯一的选择。可以用.INF文件创建包括注册表条目和目的目录的自定义软件安装指
令。.INF文件可以提供有限的平台独立性,并指定有限的软件依赖性。目前.INF文件最普
遍的应用是为安装硬件设备的驱动程序服务的,本文的目的就是介绍.INF文件的功能、结
构、并提供了几个事例来说明如何用.INF文件,如何扩展.INF文件的用途,比如制作绿色
软件,仅供参考。
驱动层次模型:
I/O管理器
文件驱动
中间层驱动
设备驱动
硬件抽象层
下面首先给出一个驱动程序的.INF文件的例子,华尔特F18型摄像头驱动(本人滴),
是我从摄像头驱动安装程序中抽取出来的用于WinXP的系统安装的文件,删
除了大部分内容,紧紧保留了一个基本的.INF文件的框架。
安装INF文件
通常情况下,硬件厂商已经将驱动程序打包为一个安装程序或自解压程序,我们只需
直接执行或即可,不过笔者建议还是安装.INF文件为好,这样不会同
时安装一些无用的垃圾文件。
第一步:解压缩驱动程序
如果下载回来的驱动程序是一个ZIP格式的压缩包,首先将其解压缩;如果下载回来的
驱动程序是一个EXE格式的自解压文件,请使用WinRAR或WinZIP释放到一个临时文件
夹中,然后查找到其中的.INF文件。
第二步:安装INF
在“我的电脑”或“资源管理器”中右击刚才找到的.INF文件,执行“安装”命令就可以了。
这是因为微软在Windows中提供了SetupAPI,驱动程序开发人员不需要考虑接口、安装等
事情。
.INF文件的格式
中,可以看到.INF文件是由许多节(Section)组成,与.INI文件类似,
整个.INF文件由几个节组成,节名用方括号扩起来,如[version]节,[Manufacturer]节,和
[Strings]节等等。而每个节又由一系列的条目组成,每个条目都是是由一个键(Key)与一
个值(Value)组成,都是“Key=Value”这样的形式,在这些节中定义的项目可以完成硬件的
自动检测和软件(包括驱动程序)的安装。.INF文件中分号后面的字符串是注释。在一
个.INF文件中,所有跟随在分号(;)后的文字都会被视为注释。注释并不一定要在新行开
始,可以在一行文字后面加入注释。
节的名称节的作用
[Version]
INF文件头,提供有效INF文件的版本信息
[DefaultInstall]
包含安装所关联动作(文件拷贝或删除,注册表键值的更新、子键增删等),在INF
文件内的节名指针,默认情况下首先执行该节内容
[OtherInstall]
与[DefaultInstall]节遵循相同的语法,但必须被显示地调用,常被用来定义反安装
动作
[DestinationDirs]
指定罗列于一个节内将被拷贝、删除或重命名的文件在盘上的位置
[FileCopy/Delete/RenameSection(s)]罗列被拷贝、删除或重命名的文件
[RegistryUpDateRenameSection(s)]罗列对注册表键值的更新、子键增删等动作
[IniFileUpDateRenameSection(s)]指定对ini文件的更新,快捷方式可通过该节进行创建
[SourceDisksNames]
罗列文件所在盘的盘名、盘卷标、盘序列号
[SourceDisksFiles]
罗列安装时使用的源文件极其所在盘
[Strings]
罗列本地化字符串(或称宏字符串)
说明:表中黑体节名是保留关键字,名称固定,大小写不敏感,斜体节名名称任意,由INF
文件编写者确定。每节的标题字符均用括号([])括起。限于篇幅本文只对黑体节名做进一步
的解释,斜体节名将根据情况而定。黑体和斜体仅用于本表,在以后的内容中不做区分。
.INF文件的语法是统一的分节语法,随着操作系统的更新,微软逐渐增加了一些必要
的关键字,但是整个的.INF文件的结构不会变化。从语法上来说,.INF文件都是一个类别。
按照.INF文件的版本来分类,可以分为2类:
1AdvancedINF,在[Version]节中有“AdvancedINF=2.5,"您需要新版本的"”或
者是“AdvancedINF=2.5,"!"”这么一行语句,表
明此.INF文件需要这个动态链接库来解释执行,AdvancedINF有一些高级特
性,但是在目前用的不太多。
2普通INF,没有指明需要的.INF文件,使用来解释执行(win9x
系列的操作系统使用),系统中缺省使用的就是这种普通INF。
.INF文件的功能
从前面的介绍,能够看出使用.INF文件可以完成如下功能:
1复制文件、删除文件、或重新命名文件。
2新增或删除注册表(Registry)中的项目。
3修改重要的系统设置文件(如、、.INF等)。
.INF文件的生成方法
可以直接手工用一个纯文本的编辑器书写.INF文件,当相对应的.REG文件非常庞大,
条目比较多时候,可以用小工具来自动的把.REG文件转换为.INF文件,然后再
进行相应的路径修改,把绝对路径替换为用逻辑磁盘标识符(LDID)来表示的路径。
如果涉及到文件操作的时候,只好手工写了,目前还没有自动化的工具。
.INF文件的好处是,不像vbs那么强大,甚至有可能由危险的格式化代码。.INF的限
制很强,这样比其他的脚本文件安全,当然相对的功能就弱,但是也足够了。
.INF文件格式和作用如下所示:
;示例01寒夜孤星【华尔特F18型摄像头驱动】
;InstallationFile(.inf)forUSBPCCamera
;zxyaddcoinstaller2004/6/17
[Version]
Signature="$CHICAGO$"
LayoutFile=,,
Class=Image
ClassGUID={6bdd1fc6-810f-11d0-bec7-08002be2092f}
Provider=%SoftMfg%
DriverVer=11/26/2003,4.2.1126.72
CatalogFile=
[ControlFlags]
ExcludeFromSelect=*
[Manufacturer]
%HwMfg%=VM,NT
[DestinationDirs]
DefaultDestDir=11
les=10
les=10
les=11
les=11
les=10,twain_32VM301b
les=10,twain_32VM301b
=10,System32Drivers
les=10,inf
les=11
[VM]
%USBVID_0AC8&PID_Desc%=m302,USBVID_0AC8&PID_301B
%USBVID_0AC8&PID_Desc%=m302,USBVID_0AC8&PID_305B
[]
%USBVID_0AC8&PID_Desc%=,USBVID_0AC8&PID_30
1B
%USBVID_0AC8&PID_Desc%=,USBVID_0AC8&PID_30
5B
;****************************************
[m302]
Include=,,,
Needs=ration,ration,ig
SubClass=StillImage
DeviceType=2
DeviceSubType=0x0302
Capabilities=1
Events=
DeviceData=Data
ICMProfiles=""
AddReg=,,,
CopyFiles=,les,les,
les,les,les
[]
Include=,,,
Needs=ration,,ig
SubClass=StillImage
DeviceType=2
DeviceSubType=0x0302
Capabilities=1
Events=
DeviceData=Data
ICMProfiles=""
AddReg=,
,,
CopyFiles=,les,les,
les,les,les
[]
Include=,,
Needs=ration,,ig
AddReg=,,
,
CopyFiles=,les,les,
les,les,les
SubClass=StillImage
DeviceType=3
DeviceSubType=0x0302
Capabilities=0x00000031
;Capabilities=0x00000001
PortSelect=No
;Events=
DeviceData=Data
ICMProfiles=""
;LogConfig=EBOOT
;Reboot
;**********************************************
[allers]
CopyFiles=les
AddReg=
;**********************************************
[]
HKR,,CoInstallers32,0x00010000,",CoRunExecuteFile"
[les]
,,,0x10
;****************************************************
[]
HKR,,HardwareConfig,1,1
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,
;HKR,,PageOutWhenUnopened,3,00
;HKR,,PowerDownWhenUnopened,3,00
[]
HKCR,CLSID%GUID_VMCustomPropertySets%,,,%VMCustomPropertySets%
HKCR,CLSID%GUID_VMCustomPropertySets%InprocServer32,,,
HKCR,CLSID%GUID_VMCustomPropertySets%InprocServer32,ThreadingModel,,Both
HKLM,SystemCurrentControlSetControlMediaInterfaces%GUID_VMCustomPropertySets
%,,,%VMCustomPropertySets%
HKLM,SystemCurrentControlSetControlMediaInterfaces%GUID_VMCustomPropertySets
%,IID,1,5A,7C,75,9C,95,8D,3c,45,82,84,90,6A,68,DC,53,FA
HKCR,CLSID%CLSID_VMCustomPropertyPage%,,,%VMCustomPropertyPage%
HKCR,CLSID%CLSID_VMCustomPropertyPage%InprocServer32,,,
HKCR,CLSID%CLSID_VMCustomPropertyPage%InprocServer32,ThreadingModel,,Both
HKCR,CLSID%CLSID_VMBackDoorPropertyPage%,,,%VMBackDoorPropertyPage%
HKCR,CLSID%CLSID_VMBackDoorPropertyPage%InprocServer32,,,
HKCR,CLSID%CLSID_VMBackDoorPropertyPage%InprocServer32,ThreadingModel,,Both
HKLM,SystemCurrentControlSetControlMediaSets%GUID_VMCustomPropertySets%Pr
opertyPages%CLSID_VMCustomPropertyPage%,,,%VMCustomPropertyPage%
;Addorremovebackdoorfromtheregistry:
;HKLM,SystemCurrentControlSetControlMediaSets%GUID_VMCustomPropertySets%Pr
opertyPages%CLSID_VMBackDoorPropertyPage%,,,%VMBackDoorPropertyPage%
[]
HKR,,USDClass,,"{80989FCE-A58A-4902-B5C8-37410E34023F}"
HKCR,CLSID{80989FCE-A58A-4902-B5C8-37410E34023F},,,%STI_DEVICE_NAME%
HKCR,CLSID{80989FCE-A58A-4902-B5C8-37410E34023F}InProcServer32,,,%11%VM3
HKCR,CLSID{80989FCE-A58A-4902-B5C8-37410E34023F}InProcServer32,ThreadingMo
del,,"Both"
HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionStillImageRegistered
Applications",%VIDEOAPP%,,"%10%/StiDevice:%1/StiEvent:%2"
HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionStillImageRegistered
Applications",%STILLAPP%,,"%10%/StiDevice:%1/StiEvent:%2"
[]
HKR,,USDClass,,"{0527d1d0-88c2-11d2-82c7-00c04f8ec183}"
HKLM,"SOFTWAREMicrosoftWindowsCurrentVersionRun","BigDogPath",,"%10%VM_ST
%USBVID_0AC8&PID_Desc%"
HKLM,"SoftwareZSMCUSBCAMERABigDogPath",Snapshot1,,"%10%"
HKLM,"SoftwareZSMCUSBCAMERABigDogPath",Snapshot2,,"%10%"
[Data]
TwainDS=%USBVID_0AC8&PID_SName%
SpecialInfo="VM"
[Data]
Server=local
UIDLL=
UIClassID={5d8ef5a3-ac13-11d2-a093-00c04f72dc3c}
TwainDS=%USBVID_0AC8&PID_SName%
SpecialInfo="VM"
[]
;Theareeventsthatthedeviceissuestotriggerapplication
;launching.
Snapshot=%SNAPSHOT%,{E76F3027-CA52-468e-B06E-2F32E2F6B59E},*
Snapshot2=%SNAPSHOT2%,{E76F3028-CA52-468e-B06E-2F32E2F6B59E},%STILLAPP%
[]
HKLM,%TWAINSetting%,DeviceName,,%USBVID_0AC8&PID_Desc%
HKLM,%TWAINSetting%,DSName,,%USBVID_0AC8&PID_SName%
HKLM,%TWAINSetting%,OEM,,%USBVID_0AC8&PID_EMPath%
[EBOOT]
;ConfigPriority=REBOOT
;****************************************************
[aces]
AddInterface=%KSCATEGORY_CAPTURE%,GLOBAL,ace
[aces]
AddInterface=%KSCATEGORY_CAPTURE%,GLOBAL,ace
[aces]
AddInterface=%KSCATEGORY_CAPTURE%,GLOBAL,ace
[ace]
AddReg=
[]
HKR,,CLSID,,%%
HKR,,FriendlyName,,%USBVID_0AC8&PID_Desc%
HKR,PageAlias,"{71F96464-78F3-11d0-A18C-00A0C9118956}",1,51,7C,75,9C,95,8D,
3C,45,0x82,0x84,0x90,0x6A,0x68,0xDC,0x53,0xFA
HKR,PinFactory1Interfaces%GUID_VMCustomPropertySets%,,,
HKR,,ExtensionDLL,,%ionDLL%
[es]
AddService=ZSMC302,0x00000002,eInstall
[es]
AddService=ZSMC302,0x00000002,eInstall
[eInstall]
DisplayName=%USBVID_0AC8&PID_Desc%
ServiceType=%SERVICE_KERNEL_DRIVER%
StartType=%SERVICE_DEMAND_START%
ErrorControl=%SERVICE_ERROR_NORMAL%
ServiceBinary=%10%
;******************************************************
[]
[les]
[les]
[les]
VM_,,,COPYFLG_FORCE_FILE_IN_USE
[les]
[les]
[les]
[les]
[SourceDisksNames]
1=%SRCDISKNAME%,,,
[SourceDisksFiles]
=1
=1
=1
=1
=1
=1
=1
=1
VM_=1
=1
=1
[Strings]
;----------------
;Non-Localizable
;----------------
="{17CCA71B-ECD7-11D0-B908-00A0C9223196}"
KSCATEGORY_CAPTURE="{65E8773D-8F56-11D0-A3B9-00A0C9223196}"
SERVICE_KERNEL_DRIVER=1
SERVICE_DEMAND_START=3
SERVICE_ERROR_NORMAL=1
ionDLL=""
;----------------
;Localizable
;----------------
SRCDISKNAME="USBPCCAMERADISK"
SoftMfg="VM"
HwMfg="VM"
USBVID_0AC8&PID_Desc="VIMICROUSBPCCamera"
VMCustomPropertySets="VMCustomPropertySets"
VMCustomPropertyPage="VMCustomPropertyPage"
VMBackDoorPropertyPage="VMBackDoorPropertyPage"
TWAINSetting="SoftwareZSMCUSBCAMERAZC0301TWAIN"
USBVID_0AC8&PID_SName="VIMICROUSBPCCamera"
USBVID_0AC8&PID_EMPath="VM301b"
GUID_VMCustomPropertySets="{9C757C5A-8D95-453c-8284-906A68DC53FA}"
CLSID_VMCustomPropertyPage="{9C757C51-8D95-453c-8284-906A68DC53FA}"
CLSID_VMBackDoorPropertyPage="{9C757C52-8D95-453c-8284-906A68DC53FA}"
SNAPSHOT="StartupCamera"
SNAPSHOT2="CaptureImage"
VIDEOAPP="MSVideoCaptureApplication"
STILLAPP="VMStillCaptureApplication"
STI_DEVICE_NAME="VMSTIUSB"
㈠、[Version]节:包含对此.INF文件的简短描述与此.INF文件支持的设备类型的信息。
用于确认.INF文件的基本版本信息。任何.INF文件都必须包括这个节。
在示例01中,[Version]节中的语句Signature="$CHICAGO$"表明这个.INF文件可以
用于windows95以后的所有平台上,目前来说就是win98,winme,winnt4,win2k,winxp,
win2k3。这种.INF文件比较多见。如果[Version]节中的签名条目是Signature="$Windows
95$",表明这个.INF文件可以用于windows95以后的Win9x平台上,目前来说就是win98,
winme。如果[Version]节中的签名条目是Signature="$WINDOWSNT$",表明这个.INF文
件可以用于WindowsNT系列的平台上,包括winnt4,win2k,winxp,win2k3。WIN9x系列
的操作系统的SetupAPI将会拒绝执行这种类型的.INF文件。
在示例01中,LayoutFile=,,,这一行的语法为:
LayoutFile=。文件包含安装组件必需的安装布局信息(源盘和源文
件),该行是可选的,如果没有提供布局信息文件,则在.INF文件内必须包含
[SourceDisksNames]和[SourceDisksFiles]节(必须注意这一点)。
以下各行条目为可选内容:
在示例01中,Class=Image,这一行的语法为:Class=Unknown,系统定义用户指定的
类名。(有关信息,参考下面的设备管理器支持的硬件类型)
在示例01中,Provider=%SoftMfg%,这一行的语法为:Provider=%提供商名称%,提
供商。
在示例01中,DriverVer=11/26/2003,4.2.1126.72,这一行的语法为:DirverVer=月/日/
年,版本及发布时间。
在示例01中,CatalogFile=,这一行的语法为:CatelogFile=[.Ntetc],包含
WHQL数字签名(即微软数字签名)的目录说明文件。
设备管理器支持的硬件类型
INI文件中的类型名称设备安装器中的类型名称描述
AdapterCDROM控制器非SCSICDROM控制器
DiskDrie磁盘驱动器
Keyboard键盘
System系统设备主板设备(PCI、PIC等)
MEDIA声音、视频和游戏控制器多媒体
Modem调制解调器
MultiFunction多功能适配器如网卡和调制解调器的二和一
Monitor显示器(监视器)
CDROMCD-ROM
Display显示卡显示适配器
Fdc软盘控制器
Hdc硬盘控制器
Mou鼠标
Ports端口(COM和LPT)串口和并口
Printer打印机
MTD内存技术驱动程序PCMCIA内存卡
Image图像捕获设备如摄像头
nodriver不需要驱动的设备
PCMCIAPCMCIA插座
SCSIAdapter
SCSI控制器SCSI主机适配器
Unknown其他设备
Infrared红外线设备
13941394总线控制器
GPS全球定位设备
HID人机接口设备
Net网络适配器
NetTrans网络协议
NetClient网络客户机
NetService网络服务
DBCDeviceBayController
USB通用串行总线控制器
㈡、[ClassInstall(32)]节:为设备定义一个新的类别(Class)。主要用于硬件设备的安装。
㈢、[Manufacturer]节:[Manufacturer]与[ManufacturerName]节,列出此.INF文件可
辨识的所有硬件设备,并列出了开发该硬件的厂商名称,主要用于硬件设备的安装。
在设备驱动程序的.INF文件中必须包括[Manufacturer]节与[Manufacturer
Name]节。对应到本示例(即示例01)中就是[Manufacturer]节和[VM]和[]节,安
装新硬件的向导中列出来的厂商名字和设备名称就是来自这两个节。这行语句
“%HwMfg%=VM,NT”的等号右边的名字指明设备制造商是VM,等号左边是厂商的名字,
示例01中的的厂商名称是"VM"(在后面讲到的[Strings]节中)。在一个.INF文件中可以有
多个设备制造商的名字,都必须放在[Manufacturer]节中,同时[ManufacturerName]节可
以列出该厂商的多种设备。
㈣、[ManufacturerName]节:[ManufacturerName]节区含有对要安装的设备的描述,并
为要安装的设备指出[Install]节区。[ManufacturerName]节语法:
[ManufacturerName]
device-description=install-ction-name,device-id[,compatible-device-id]...
device-description就是对要安装的设备的描述。install-ction-name就是此设备
的[Install]节区名称,[ManufacturerName]节区名称必须已在[Manufacturer]节区中被定
义。device-id是此设备的硬件标志符,每个厂家的不同的硬件对应着不同的设备标志符。
对应到示例01中,就是这行语句
“%USBVID_0AC8&PID_Desc%=,USBVID_0AC8&PID_3
01B”等号左边是设备的描述,也就是设备名字是"VIMICROUSBPCCamera",而等号右边
的,USBVID_0AC8&PID_301B是设备标志符,这个标志符是对应到
一类的硬件设备,就是USB视频设备,操作系统检测到USB视频设备,安装相应的驱动的
时候,就会从设备驱动的安装节即[]节开始安装驱动。可以看出来
此.INF文件可以用于通用的USB视频设备"VIMICROUSBPCCamera"的驱动程序的安装
(相关信息,也可以从设备管理器里查看)。
普通的安装软件的.INF文件中,不包括[Manufacturer]与[ManufacturerName]节,
即使包含,也不会执行它们,这2个节仅仅用于硬件的设备驱动中起作用。在下面这个实例
(即示例02)中,就不包含他们。
;示例02寒夜孤星【WindowsMovieMaker2.1简体中文版安装】
[version]
signature="$WindowsNT$"
ClassGUID={00000000-0000-0000-0000}
LayoutFile=
[DefaultInstall]
CopyFiles=SetupFiles,LocalizedFiles,SharedFiles,Profiles,Help
AddReg=MediaPadReg
ProfileItems=MovieInstallItems
[DestinationDirs]
SetupFiles=16422,%MEDIAPAD_DIR_LFN%
LocalizedFiles=16422,%MEDIAPAD_DIR_LFN%
SharedFiles=16422,%MEDIAPAD_DIR_LFN%Shared
Profiles=16422,%MEDIAPAD_DIR_LFN%SharedProfiles
Help=16422,%MEDIAPAD_DIR_LFN%MUI%LCID%
[SetupFiles]
.,,,32
.,,,32
.,,,32
.,,,32
.,,,32
.,,,32
[ty]
"D:P(A;;GRGX;;;BU)(A;;GA;;;BA)(A;;GA;;;SY)"
[LocalizedFiles]
.,,,32
.,,,32
.,,,32
[ty]
"D:P(A;;GRGX;;;BU)(A;;GA;;;BA)(A;;GA;;;SY)"
[SharedFiles]
.,,,32
.,,,32
.,,,32
.,,,32
.,,,32
.,,,32
[ty]
"D:P(A;;GRGX;;;BU)(A;;GA;;;BA)(A;;GA;;;SY)"
[Profiles]
.,,,32
[ty]
"D:P(A;;GRGX;;;BU)(A;;GA;;;BA)(A;;GA;;;SY)"
[Help]
.,,,32
[ty]
"D:P(A;;GRGX;;;BU)(A;;GA;;;BA)(A;;GA;;;SY)"
[MediaPadReg]
HKLM,"SOFTWAREMicrosoftActiveSetupInstalled
Components{CDD7975E-60F8-41d5-8149-19E51D6F71D0}","ComponentID",,"Windows
MovieMakerv2.1"
HKLM,"SOFTWAREMicrosoftActiveSetupInstalled
Components{CDD7975E-60F8-41d5-8149-19E51D6F71D0}","IsInstalled",1,01,00,00,00
HKLM,"SOFTWAREMicrosoftActiveSetupInstalled
Components{CDD7975E-60F8-41d5-8149-19E51D6F71D0}","Version",,"2,1,4026,0"
…………
Name=%MEDIAPAD_START_MENU%
CmdLine=16422,%MEDIAPAD_DIR_LFN%,
InfoTip="@%16422%%MEDIAPAD_DIR_LFN%,-63096"
DisplayResource="%16422%%MEDIAPAD_DIR_LFN%",61446
[Strings]
MEDIAPAD_START_MENU="WindowsMovieMaker"
MEDIAPAD_DIR_LFN="MovieMaker"
APPS_DESC="附件"
LCID="0804"
㈤、[Install]节:描述设备驱动程序与硬件设备的实际属性。
[install];指向添加的设备接口列表
Copyfiles=
AddReg=
LogConfig=logconfig
DirverVer=19/10/2001
ProfileItems=ABcd
它也定义了所有[Install]节的名称,在此定义的节中包含了安装该设备的信息和命令。
默认情况下,会执行[DefaultInstall]节,在示例01中,Install操作就会执行
[DefaultInstall]节。[DefaultInstall]节中包含指向其他节的指针,该节可用于指定要复制和
删除的文件、注册表的更新、.INF文件的更新等。
[Install]节分[DefaultInstall]和[OtherInstall]两类,它们使用相同的格式。
[DefaultInstall]节节名“DefaultInstall”如前面表格内容所述被显式地在注册表中指定,大小
写不敏感。该节也是系统获取INF文件中安装信息的首要入口,当用户右击INF文件选“安
装”时该节内容被执行。[OtherInstall]与[DefaultInstall]节遵循相同的语法,但必须被显式地
调用,常被用来定义反安装动作。它们均可包括以下种类的可选入口:
[Install]节的语法:
[install-ction-name]
Copyfiles=file-list-ction[,file-list-ction]...;等号右侧是拷贝文件罗列节节名,将文件拷贝
到[DefaultInstall]节指定的位置,所有的源文件必须在[SourceDisksFiles]节中列出。
LogConfig=log-config-ction-name;指定遗留设备的I/O地址,IRQ等配置的详细信息
Renfiles=file-list-ction[,file-list-ction]...;重命名文件
Delfiles=file-list-ction[,file-list-ction]...;删除文件
UpdateInis=update-ini-ction[,update-ini-ction]...;安装过程中INI初始化文件内容
UpdateIniFields=update-inifields-ction[,update-inifields-ction]...;安装过程中INI初始化文件值内容
AddReg=add-registry-ction[,add-registry-ction]...;增加注册表键或键值
DelReg=del-registry-ction[,del-registry-ction]...;删除注册表键或键值
Ini2Reg=ini-to-registry-ction[,ini-to-registry-ction]...;用INI文件内容更新注册表
UpdateCfgSys=update-config-ction;更新文件内的设置
UpdateAutoBat=update-autoexec-ction;更新文件内的设置
上面的入口并非都必需,如果需要一个入口,则应该在等号右侧指出存在于该INF文
件内的索引节名(不用指出节名的一个特例是CopyFiles入口,可使用“@”字符后跟文件名的
形式,效果是直接将文件拷贝到[DefaultInstall]节所罗列的硬盘目录)。节名需由可打印字
符组成,在中文系统平台中,可使用中文字符作为节名,这也是体现INF格式安装本地化
的地方,非常直观。每类入口在一个[Install]节内只能出现一次,第二次及以后出现的同名
重复入口将被忽略。每类入口的等号右侧可罗列多个节名,节名之间以逗号分开,以便列举
同一类动作的不同作用对象,如删除多个注册表键、拷贝文件到多个目录路径等。
对应到示例01中,[Install]节就是[]节,其中要执行复制文件
CopyFiles(如:CopyFiles=,les,
les,les,les,les)
和添加注册表项目AddReg(如:,,
,)等操作。
如果是安装普通的软件的.INF文件,可以通过鼠标右键菜单上的“安装”命令来安装,
这个时候.INF文件必须包括[DefaultInstall]节,也可以包括其他的[Install]节,用
,InstallHinfSection[Install]节的名字,这样类似的命令来安
装。
[Install]节定义了安装程式与硬体驱动需要的资源,以便安装新的驱动程式或者软件。
此节中每个条目都有其特定格式与意义,并非每个条目都是必要的。无论是安装驱动程序还
是普通的软件,最后都要从某一个[Install]节开始执行。
㈥、[DestinationDirs]节:指定硬盘上复制、删除或重命名节文件的位置(例如Windows或
WindowsSystem)。
.INF文件通过[DestinationDirs]节来指定操作的目标路径,语法如下:
[DestinationDirs]
file-list-ction=ldid[,subdir]
DefaultDestDir=ldid[,subdir]
[DestinationDirs]节定义了[file-list-ction]节中指定的操作(可以是CopyFiles、
RenFiles或DelFiles节)的目标目录。DefaultDestDir命令可以为.INF文件中的任何没有明
确在[DestinationDirs]节中命名的CopyFiles、RenFiles或DelFiles节指定默认目标文件夹。
在.INF文件中,使用逻辑磁盘标识符(LDID)来表示路径,如下表:
逻辑磁盘标识符(LDID)
-1绝对路径
00NullLDID-可用于创建新的LDID
01SourceDrive:pathname(inf文件所在目录的路径)
10Windows文件夹(等价于%windir%目录)
11System文件夹(98系统是%SystemRoot%system,2000系统是%SystemRoot%system32)
12IOSubsys文件夹(98系统是%SystemRoot%systemInsubsys,2000系统
%SystemRoot%system32Drivers)
13Command文件夹
17Inf文件夹(%SystemRoot%inf目录)
18Help文件夹(帮助目录)
20Fonts(字体目录)
21Viewers(查看器目录)
22VMM32
23Color文件夹(颜色ICM)
24包含Windows文件夹的驱动器根目录
25共享目录
28HostWinboot
30启动盘(引导驱动器)的根文件夹
31虚拟启动盘的主驱动器根文件夹
51假脱机目录
52假脱机驱动程序目录
53用户配置文件目录
54Windows2000引导目录
55打印处理器目录
16406AllUrsStartMenu
16407AllUrsStartMenuProgram
16408AllUrsStartMenuProgramStartup
16409AllUrsStartDesktop
16415AllUrsStartFavorites
16419AllUrsStartApplicationData
16422ProgramFiles
16427ProgramFilesCommon
16429AllUrsTemplates
16430AllUrsDocuments
如示例01中,这行语句“les=10,twain_32VM301b”表明
les这个文件列表中文件的目标路径是
%windir%system32twain_32VM301b,其中10代表Windows所在的文件夹,也就是说
les这个文件列表(请看示例03)中文件在安装驱动
的时候将会被复制到%windir%system32twain_32VM301b文件夹。而这行
“les=10,inf”,意思是这个文件将会被复制到10下的inf文件
夹,也就是%windir%inf文件夹中。当然,他也可以写成“les=17”,效果
是一样的。
;示例03寒夜孤星【华尔特F18型摄像头驱动】
。。。。。。
[les]
[les]
。。。。。。
㈦、[Strings]节:定义并列出上面所使用的可本地化字符串。
如果某个特定的字符串会在.INF文件中频繁地出现,那么在此节中为它们定义一个字
符串变量将会是个好选择。
尽管[Strings]节一般被放置在.INF文件的末尾,字符串宏可在.INF文件任何地方使
用,安装引擎解释、展开字符串宏为给定的长字符串并做进一步处理。字符串宏在使用时需
用百分号(%)括起。
[Strings]节内语句的语法为:
strings-key=value
其中strings-key为由字母或数字等可打印字符组成的宏名。
Value为被双引号括起的长字符串,字符串可由字母、数字或其他可打印字符(意思是可以
使用汉字哦)组成。
例如示例01中,在[Strings]节中定义了HwMfg="VM"。而在[Manufacturer]节中便使用
了%HwMfg%=VM,NT。同时,HwMfg变量被用%括了起来。
㈦、[FileCopy/Delete/RenameSection(s)]节:列出要复制、删除或重命名的文件。节的名字
是CopyFiles,DelFiles,RenFiles。
[CopyFiles]节,复制文件。
.INF文件的[CopyFiles]节有一个唯一的名字,并从[DDInstall]节的CopyFiles指令引用
它。该节中的每个项采用如下形式:
destination–filename[,source-filename,temp-filename,flag]
这里的destiantion-filename是最重要复制的目标文件名。如果源文件名不相同,必须规
定source–filename。Temp-filename值不再适用(虽然Windows98仍然要求),它在系统
再次引导之前规定新文件的临时文件名。对于Windows2000等,忽略此值。
Falg值规定对新目标文件的处理,其描述见下表CopyFiles标志定义。可以对falg值
中的各个为进行“或”运算,以使多个操作起作用。几种操作是互斥的(例如,WARN_IF_SKIP
和NOSKIP),有疑问时应当查阅有关文档。
因为[CopyFiles]节的项的语法没有包含一个可选项来规定源文件的磁盘或路径,必须使
用其他.INF节[SourceDisksNames]和[SourceDisksFiles]。然而[CopyFiles]节中各项复制的
文件由另一个.INF节[DestiantionDirs]节指定。
CopyFiles标志定义
位置符号名称说明
0x0400COPYFLG_REPLACEONLY如果源文件存在则复制
0x0800COPYFLG_NODECOMP不解压缩复制
0x0008COPYFLG_FORCE_FILE_IN_USE对源文件执行延迟重命名,强制重新引导
0x0010COPYFLG_NO_OVERWRITE不替换已有源文件
0x1000COPYFLG_REPLACE_BOOT_FILE文件是系统装入程序的一部分,强制重新引导
0x2000COPYFLG_NOPRUNE强制复制操作,即使安装者认为不必要也要复制
0x0020COPYFLG_NO_VERSION_DIALOG不要覆盖较新的文件(如果安装包被数字签名则被忽略)
0x0004COPYFLG_NOVERSIONCHECK总是覆盖目标文件
0x0040COPYFLG_OVERWRITE_OLDER_ONLY覆盖较旧的目标文件
0x0001COPYFLG_WARN_IF_SKIP用户跳过文件时发出警告
0x0002COPYFLG_NOSKIP不允许用户跳过文件
[DelFiles]节,删除文件。
[RenFiles]节,重命令文件。
㈧、[RegistryUpdateSection(s)]节:指定在注册表中添加或删除的项目。节的名字是AddReg,
DelReg。
[addreg]节,指定新的键和值。
一个INF文件的[AddReg]节被唯一命名,并从[DDInstall]节中的AddReg指令引用它。
此节的目的是提供增加或者修改目标系统注册表中的项目。本节中每个项目采取如下形式:
reg-root[,subkey,value-name,flags,value]
这里的reg-root是注册表库(hive)之一的缩写。
值说明
HKCRHKEY_CLASSES_ROOT
HKCUHKEY_CURRENT_USER
HKLMHKEY_LOCAL_MACHINE
HKUHKEY_USERS
HKR将被安装的设备的硬件子键
值表示要被修改的注册表库。Subbkey值表示库底下的键名,在层次结构中子键用反斜
线()字符隔开。例如,softwareW2KdriverBookDriverSeting是HKCU或者HKLM库的
一个有效子键。
Value-name指定要增加或修改的注册表值。每个注册表键包含一个或多个值,保存不
同类型的数据。注册表编辑器(RegistyEditor)在右边面板中列出子键的值。值名和值数据
同时在该面板中出现,左边面板只列出子键。
Flags指定数据保存的类型,flages可能的位置见下表所列:
AddRegFlags定义
位值符号名说明
0x00000FLG_ADDREG_TYPE_SZ空结束字符串
0x00001FLG_ADDREG_BINVALUETYPE二进制数据
0x00002FLG_ADDREG_NOCLOBBER不替换已有值
0x00004FLG_ADDREG_DELVALUE删除子键或值名
0x00010FLG_ADDREG_KEYONLY建立子键,忽略值
0x00020FLG_ADDREG_OVERWRITEONLY如果值存在,则替换他,否则什么也不做
0x10000FLG_ADDREG_TYPE_MULTI_SZREG__MULTI_SZ数据(数组)
0x00008FLG_ADDREG_APPEND添加到已有的REG__MULTI_SZ数组
0x20000FLG_ADDREG_TYPE_EXPAND_SZREG_EXPAND_SZ数据
0x10001FLG_ADDREG_TYPE_DWORD
DWORD数据
0x20001FLG_ADDREG_TYPE_NONE
REG_NONE数据
[Delreg]节,删除的键和值。
㈨、[IniFileUpdateSection(s)]节:指定.ini文件的更新。链接将在该节中创建。节的名字
是UpdateInis。
㈩、[es]节:为了真正的使复制的文件成为目标系统上的驱动程序,必须通
知服务器管理程序(SCM)。
例如安装在Windows2000下的每个驱动程序在
HKLMSystemCurrent-ControlSetServices下的注册表中有一项。ServiceType值为1表示一
个内核模式设备驱动程序。StartType指定在引导过程中的什么点上驱动程序装入(3表示按
需或手动启动)。在驱动程序装入过程中遇到错误时,ErrorControl值确定发生了什么情况。
ServiceBinary值指向驱动程序文件(.SYS文件)的位置,但是,如果二进制值位于
%windir%system32drivers目录,并且与HKLM…Services下的子键有相同的名字,则可以
忽略ServiceBinary值。
es节项目中包括一个形式如下的项目:
AddService=ServiceName,[flags],rvice–install–ction[,eventlog–install–ction]
这里的ServiceName表示设备的名字,通常是驱动程序的名字,没有.SYS扩展名。(Flags
值的描述见下表AddServiceFlags定义)Service–install–ction和可选的eventlog-install–
ction值调出控制服务值项目(诸如ServiceType和StartType)的新增的INF节名字。
AddServiceFlags定义
位值符号名称-SPSVCINST_说明
0x00002ASSOCSERVICE驱动程序是一个FDO(功能驱动程序),不是一个过滤器
0x00008NOCLOBBER_DISPLAYNAME不覆盖友好的名字
0x00100NOCLOBBER_DESCRIPTION不覆盖说明
0x00010NOCLOBBER_STARTTYPE不覆盖启动类型
0x00020NOCLOBBER_ERRORCONTROL不覆盖错误控制
[ServiceInstall]节:
[ServiceInstall]节名字实际上由[es]节中每个AddService项唯一规定,它控
制把驱动程序安装到服务控制管理程序。[ServiceInstall]节允许的项见下表(ServiceInstall
节中的项目)所列。
ServiceInstall节中的项目
项值
DisplayName驱动程序的友好名字,显示在设备管理器中
Description驱动程序或服务的简短描述,由设备驱动程序描述
ServiceType
驱动程序类型:
0x01:内核驱动程序
0x02:文件系统驱动程序
StartType
规定驱动程序何时装入:
0:引导时间
1:系统启动
2:系统自动启动后
3:按需启动(手动)
4:禁用
ErrorControl
驱动程序装入期间对错误的处理:
0:忽略所有错误
1:把错误显示给用户
2:用“最后一次正确配置”重新启动,忽略伺候发生的错误
3:用“最后一次正确配置”重新启动,如果此后出现错误,则进行故障检验
ServiceBinary驱动程序的完整路径名,他可以包括LDID值
(十一)、[SourceDisksNames]节:列出包含文件的磁盘。
[SourceDisksNames]节内语句的语法为:
disk-ordinal=“disk-description”,disk-label,disk-rial-number
其中disk-ordinal为必选项,是盘符序列码,标识一个源盘,具有惟一性,一般可设置为从
1开始递增的整数,0不是一个有效的盘符序列码。当存在多个源盘时,盘符序列码之间不
能重复。
disk-description为必选项,是盘描述符,用双引号括起的字符串或字符串宏描述盘的内容或
目的。安装引擎将该字符串显示在对话框内以提示用户。
disk-label为源盘的卷标识。
disk-rial-number未使用,但必须被设置为0。
参考示例05:1=%SRCDISKNAME%,,,
;示例05寒夜孤星【华尔特F18型摄像头驱动】
。。。。。。
[SourceDisksNames]
1=%SRCDISKNAME%,,,
[SourceDisksFiles]
=1
=1
=1
=1
=1
=1
=1
=1
VM_=1
=1
=1
。。。。。。
(十二)、[SourceDisksFiles]节:列出每个文件所在的特定磁盘。
[SourceDisksFiles]节内语句的语法为:
file-name=disk-number[,subdir][,file-size]
其中file-name为必选项,是源盘上文件的名称。
disk-number是包含file-name指定文件所在源盘的盘符序列码,该盘符序列码需在
[SourceDisksNames]节中列出,并大于或等于1。
Subdir为可选项,指定文件所在源盘的子目录,如省略则源盘为缺省安装路径。
file-size为可选项,表明文件的大小,以字节为单位。
参考示例05:=1
说明:如果所有文件都在根目录中,[SourceDisksFiles]节可以是空的。
(十三)、其他的节还有许多,如:lds节(UpdateIniFields),AddIniFiletoRegistry
节(Ini2Reg),节(UpdateCfgSys),节
(UpdateAutoBat),OptionalComponents节,等等。由于这些极少用到,所以就不详细讲解
了。
以下是常用命令列表:
INFAddReg命令
INFDelReg命令
INFCopyFiles命令
INFDelFiles命令
INFRenFiles命令
INFAddService命令
INFDelService命令
INFAddInterface命令
INFBitReg命令
INFLogConfig命令
INFProfileItems命令
INFUpdateInis命令
INFUpdateIniFields命令
INFIni2Reg命令
.INF文件是由Windows的SetupAPI解释执行的脚本文件,它的运行过程很简单,是
一种线性的执行,线性的意思就是.INF文件的运行过程不存在分支语句,也就是没有条件
语句,一旦开始执行,就是沿着固定的路线运行。它的运行是按照节为单位来执行的,从某
一个[Install]节开始执行,从上到下执行该节中的条目,如果该条目是一个节,那么就一条
条执行子节中的条目,如此递归执行。
这样的脚本看起来功能很弱,但是对于简单的安装任务已经足够了,安装不外乎复制文
件,添加注册表,修改.INI文件等任务,这些都可以用.INF文件来完成。对于更复杂的安装
要求,如要求安装程序的界面漂亮方便,要求有选择性的安装,要求安装程序自动修复的功
能,就只好求助于其他的工具了,如微软的WindowsInstaller,就具备更加强大的功能。
验证INF语法
DDK(DeviceDevelopmentKit,设备开发包)包含一个基本的工具CHKINF,在DDK
的Tools目录中。它依赖于Perl脚本引擎,该引擎可以从上下载。虽然工具
没有什么优点,但它在检查标准MicrosoftINF文件时能报告许多错误。工具以HTML文件
形式输出。
DDKTools目录还包括一个用语简化INF文件构造的实用程序CENINF。EXE。必须
把该工具区分为基本工具,它对入门者是有用的。
最后,DDK提供了STAMPINF。EXE这一简单工具,它提供了快速增加或修改INF中版本
信息的机制。
INF高级应用实例
利用INF文件,我们可以完成很多意想不到的操作,这里通过几个实例进行说明:
实例一:完全删除驱动程序
很多情况下,当我们将不需要的硬件设备从系统拔出或取消连接后,其驱动程序并未从
系统中真正删除,系统中仍然保留了这些设备的驱动程序文件和信息,时间一长,不仅会导
致系统越来越庞大,而且这些顽固的驱动程序可能会影响新设备的安装,因为Windows会
自动记忆曾安装过驱动程序的设备的INF文件信息,当我们再次安装同类型硬件时,系统
会自作聪明的自动安装旧硬件的驱动程序,而拒绝接受新的驱动程序。
说到这里可能有人要问为什么要删除驱动程序和安装信息文件。这是有原因的,不知道
大家注意到Windows的驱动程序安装中的一个问题没有,在安装驱动程序时需要查找驱动
程序无论你是否指定搜索的位置,Windows都首先搜索自身的INF文件夹在其中查找认为
合适的程序。而且当找到多个合适的驱动程序后它首先考虑的是INF文件夹的纪录的驱动
程序,有时还不加询问自动安装这个驱动程序。这一点使我们更新或更换驱动程序带来了麻
烦,因为有这样的情况当第一次安装了一个错误的驱动程序后,Windows就把这个错误的
驱动程序的INF文件拷贝下来,要想重新安装正确的驱动程序时Windows总是安装错误的
驱动程序,它总把INF文件夹中的“安装信息”文件认为是正确的而排斥其它的驱动程序。我
们有很多方法来解决这个问题,但我认为找到不需要的“安装信息”文件并且删除它是最彻底
的。
例如笔者所使用的电脑,虽然提供了IEEE1394接口,但由于平时并不使用相应设备,
于是打算将其从系统中彻底卸载。首先从“控制面板”打开“设备管理器”窗口,在“IEEE1394
总线主控制器”下选择“TexasInstrumentsOHCICompliantIEEE1394HostController设备”,
右击后切换到“驱动程序文件详细信息”窗口,如图2所示,这里清楚地列出了该设备所对应
的全部驱动程序文件的详细路径,请记录下来一一删除即可。对于未能正确显示驱动程序文
件信息的设备,我们可以用记事本打开相应的INF文件,在[SourceDisksFiles]小节查找所
有的、、、、等类型的文件名,记录下来后手动
删除。
接下来,我们还需要进入C:WindowsINF文件夹,这里找到了、
两个文件,将其全部删除就可以了。
实例二:未通过WHQL认证的设备驱动程序的INF文件
对于未通过微软WHQL认证(微软数字签名认证)的设备驱动程序,安装后你可能无
法找到其对应的INF文件,它们的位置在哪里呢?
原来,Windows对于那些未通过WHQL认证的设备驱动程序,安装时并未直接将相应
的INF文件复制到C:WindowsINF文件夹中,而是进行了重新命名,以便系统识别和管理,
当然这些文件的位置并未改变。它们的文件名以oem*开头,这里的“*”代表具体的数字,从
0开始,其内容构成与普通的INF文件没有什么区别。
实例三:让Windows认识改造硬件
AnalogDevice公司为板载声卡提供了配套的SoundMAX驱动程序,通过安装在主板上
的Codec与预告加载的音频渲染软件结合在一起,提供了广受欢迎的YamahaDLSbyXG音
色库和Sensaura5.1VirtualTheater环绕声,并且支持所有主流游戏音频技术,可惜的是只支
持AD188x、AD189x、AD198x等有限的芯片。如果你的板载声卡使用了其他公司的芯片,
在安装时将无法继续。
不过,通过某些技术手段,我们可以让非AD1985芯片的板载声卡安装SoundMAX驱
动程序,这自然又要用到INF文件了。首先,从驱动网站下载5.12.5243WDM版本的
SoundMAX驱动程序,下载时请注意对应相应的操作系统版本,将下载回来的文件解压缩,
在“SMAXWDMW2K_XP”文件夹有三个INF文件,其中文件对应的是Intel
系列的ICH4芯片,对应的是Intel系列的IC6芯片,由于笔者使用的是VIA
系列的芯片组,因此这里选择了,用记事本打开后定位到[AnalogDevices]小
节的最后一行,按照固定的格式将板载声卡的ID号添加过来。
板载声卡的ID号,可以在“DirectX诊断工具→声音”窗口中查看到,例如
“PCIVEN_1106DEV_3058SUBSYS_001214C0REV”,添加时请注意使用相同的格式,另外
必须将两个“&&”符号补充在相应的位置,以保证足够的字符个数,否则安装时仍然会无法
通过。接下来,我们就可以顺利安装SoundMAX驱动程序了。
用.INF文件编辑注册表
.INF文件可以编辑操纵注册表,相应的的命令是AddReg和DelReg,语法如下:
AddReg=add-registry-ction[,add-registry-ction]...
[add-registry-ction]
reg-root-string,[subkey],[value-name],[flag],[value]
[add-registry-ction]节定义了将要添加的注册表子键或值名,可以有选择地设置它的值。
DelReg=del-registry-ction[,del-registry-ction]...
[del-registry-ction]
reg-root-string,subkey,[value-name]
[del-registry-ction]节定义了将要从注册表中删除子键subkey或值名value-name。
有时候上网遇到某些网站,修改了IE的主页,然后禁用了REGEDIT工具,这个时候
很多人只好借助于其他第三方工具如魔法兔子等来恢复注册表的编辑权限,其实这个时候仅
仅依靠.INF文件就可以恢复使用REGEDIT工具的权限。
把下面的这段代码复制到记事本里,另存为,然后右击它选择“安装(I)”,
就可以了。
;示例06寒夜孤星【编辑注册表实例】
[Version]
Signature="$CHICAGO$"
[DefaultInstall]
AddReg=
[]
HKCU,"SOFTWAREMicrosoftwindowscurrentversionpoliciessystem","disableregistrytools",
0x00010001,"0"
HKLM,"SOFTWAREMicrosoftwindowscurrentversionpoliciessystem","disableregistrytools",0x00010001,"0"
当然还可以用其他的方法,原理也是一样的,这里仅仅是演示一下.INF文件的用途。
直接使用注册表文件,有时候还会遇到另外一个缺点,就是.REG文件里面使用16进制
代码表示UNICODE字符串的,如下面的两条注册表语句:
[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerUrShellFolders]
"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,0
0,6f,00,6b,00,69,00,65,00,73,00,00,00,00,00
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesSoftEther]
"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
这上面两条语句难以阅读和修改,手工修改的话很麻烦,其中
"Cookies"的值实际上就是“%USERPROFILE%Cookies”字符串的UNICODE表示。
"ImagePath"的值实际上就是"D:"rvice
如果用.INF文件的形式的话,就很简单明白了:
;示例07寒夜孤星【编辑注册表实例】
[Version]
Signature="$CHICAGO$"
[DefaultInstall]
AddReg=Folders_AddReg
[Folders_AddReg]
HKCU,"SoftwareMicrosoftWindowsCurrentVersionExplorerUrShell
Folders","Cookies",0x00020000,"%USERPROFILE%Cookies"
HKLM,"SYSTEMCurrentControlSetServicesSoftEther","ImagePath",0x020000,"""D:Program
""rvice"
这个时候可以手工修改里面的路径信息,而.REG文件则很难做到这一点。
用.INF文件编辑.INI文件
.INF文件可以使用UpdateInis命令修改.INI文件的功能也经常需要,UpdateInis的语法
如下:
UpdateInis=update-ini-ction[,update-ini-ction]...
[update-ini-ction-name]
ini-file,ini-ction,[old-ini-entry],[new-ini-entry],[flags]
[update-ini-ction-name]节给出的.INF文件中替换、删除或添加的全部条目。
ini-file包含要更改条目的.ini文件名。ini-ction包含要更改条目的节名。
old-ini-entry可选,常用形式为Key=Value。new-ini-entry可选,常用形式为Key=Value。
flags是可选操作标记。
使用逻辑磁盘标识符(LDID),可以方便的修改.INI文件中的路径信息,当然其他的条目也
同样。举例如下:TotalCommander,是一套极佳的文件管理员,内含各种压缩与解压缩,
类似NC般非常好用的工具,对于文件与路径的寻找,除一般的复制、删除、搬移、编辑等
功能外,还有FTP功能(具有续传、背景传输)与解决了中文乱码问题,"专题"再也不会变成
"彩题"、新增文件分割、文件合并、文件编码、文件解码(MIME,UUE,XXE)及新的操作
介面(浮动工具列)。真是一套相当强悍可完全取代文件总管的工具程序。
TotalCommander依靠来配置相应的操作特性和功能,于是可以使用如下的.INF
文件修改中的路径信息。
;示例08寒夜孤星【编辑.INI文件实例】
[version]
Signature="$CHICAGO$"
[DefaultInstall]
AddReg=AddGhister
UpdateInis=UpdateInicmd
[AddGhister]
HKCU,"SoftwareGhislerTotalCommander","IniFileName",0,"."
HKCU,"SoftwareGhislerTotalCommander","FtpIniName",0,".wcx_"
[UpdateInicmd]
%01%,Configuration,,"InstallDir=%01%"
%01%,Configuration,,"Mainmenu=%01%"
其中[AddGhister]节负责修改注册表中记录的的路径,而[UpdateInicmd]节
负责修改文件红的相应路径信息,可以看出,一个简单的.INF文件就完成了修
改TotalCommander的路径的任务,在TotalCommander5.x版本中,必须修改
文件中的路径信息,这个时候使用.INF文件是非常方便的。
用.INF文件删除正在使用的文件
有时候由于某些文件正被操作系统使用而无法删除,如某些用于资源管理器的OCX控
件,可以使用.INF文件的DelFiles命令删除,该命令如果发现要删除的文件被锁定,就会把
文件放到系统删除队列中排队,等系统重启动的时候,该文件就自动被删除了。
Delfiles的语法是:
Delfiles=file-list-ction[,file-list-ction]...
[file-list-ction]
filename,,,1
[file-list-ction]节定义了将要删除的文件列表,filename后面的1是一个标志,指明如果
文件当前无法删除,就等到系统重启动后删除。把下面的这段代码复制到记事本里,另存为
,把这个文件拷贝到无法删除的文件的目录,然后右击它选择“安装(I)”,就可以删
除当前目录下正在使用的和。
;示例09寒夜孤星【删除正在使用的文件实例】
[Version]
Signature="$Chicago$"
[DestinationDirs]
DefaultDestDir=01;当前目录,定义了将要删除的文件的路径
[DefaultInstall]
DelFiles=DELETELIST
[DELETELIST]
,,,1;将要删除的文件
,,,1;将要删除的文件
同样可以使用Copyfiles命令替换系统正在访问的文件。这些功能通过普通的del和copy
命令都无法实现,如果不使用.INF文件,必须使用第三方的软件来完成。
辅助制作绿色软件
在注册表.REG文件中,不可以使用变量,这个缺陷对于需要设置路径的安装程序来说,
是非常致命的弱点,.REG文件中的路径都是静态的,一旦写好,就不会随着系统的变化而
变化,如果需要把安装的程序从C盘改变到D盘,而在.REG文件中记录了安装路径的话,
这个时候直接倒入注册表文件.REG是不行的,导入的注册表仍然是原来写入的路径。而
在.INF文件中,可以使用变量来操纵路径,从而可以跟踪安装程序所需要的路径的变化。
对于绿色软件的制作,可以看我写的另外的专门的文章——绿色软件的制作,其中核心
的一点就是获得原来软件的安装程序所做出的注册表的改变,然后把该变化导出为一个注册
表文件.REG来进一步分析。如果导出的.REG文件不包括绝对路径,那么可以把该注册表文
件和提取出的软件打包在一起做成绿色软件。如果导出的.REG文件中包含当前软件的绝对
安装路径,那么就必须每次都要手工修改注册表中路径,是很麻烦的,降低了做成绿色软件
的意义所在。而使用.INF文件,使用AddReg命令可以轻松容易的解决这个注册表路径的难
题。
对于绿色软件的安装制作来说,最重要的就是01,也就是源文件夹。下面举一个例子:
RegistryCrawlerV4.5,是强大的用户和开发者快速定位并配置注册表的工具软件。一个强
大的搜索引擎允许你基于搜索标准查找注册信息。(可以从天空软件站下载
/soft/),安装完成后导出的注册表包含着如下一条语句:
[HKEY_LOCAL_MACHINESOFTWARE4DevelopersRCrawlerAppPath]
@="F:toolsRegRCrawler"
其中“F:toolsRegRCrawler”是安装路径。
而改写为.INF文件就是:
;示例10寒夜孤星【实例】
[version]
Signature="$CHICAGO$"
[DefaultInstall]
AddReg=Add
[Add]
HKLM,"SOFTWARE4DevelopersRCrawlerAppPath","",0,"%01%"
注意里面的%01%就代表当前的安装路径。
当我们把F:toolsRegRCrawler这个目录下的文件移动到其他目录时候,要用.REG文
件的方式的话,就必须手工修改注册表文件,而使用前面的.INF文件的时候,什么都无需
修改,只要在文件管理器explorer里面,用鼠标右键执行“安装”命令的时候,%01%就自动
被替换为当前所在的目录了。
最后,总结一句,注册表文件.REG非常方便和直观,但是对于处理路径的变化的情况,非
常笨拙和不方便,而.INF不如注册表文件直观,但是可以方便的处理路径信息(包括
UNICODE的路径信息),所以应该把.REG文件和.INF文件结合使用,互相弥补各自的缺
点。
自动运行
1.自动播放运行程序
;示例04寒夜孤星【自动播放】
[AutoRun]
open=
icon=%SystemRoot%,27
open=后面为exe、bat、com等可执行文件名,允许使用相对路径,但必须和文
件隶属于同一根目录下。
icon=后面为含有图标的文件,或bmp文件。“,”后面为改图标的索引标记。如果该文件包
含多于一个图标,必须用一个从0开始的索引进行标记。即第一个图标为0,第二个图标为
1,第三个图标为2。
说明:该文件必须在根目录下。
(2)ShellExecute命令:在所有的驱动器上生成“自动播放”菜单项。双击时自动运行“=”
后的文件,此时“=”后可以为任意扩展名的文件。
格式:ShellExecute=*.*或[path]*.*
2.自定义驱动器图标格式:
;示例11寒夜孤星【驱动器图标】
[AutoRun]
icon=,
icon=后面为含有图标的文件,或bmp文件。“,”后面为改图标的索引标记。如果该文件包
含多于一个图标,必须用一个从0开始的索引进行标记。即第一个图标为0,第二个图标为
1,第三个图标为2。
注意:path路径必须是本驱动器的路径,即ico、bmp、exe、dll等文件必须在本驱动器内。
3、添加右键菜单
;示例12寒夜孤星【右键菜单】
[AutoRun]
shell命令提示符command=%SystemRoot%
格式:shell名称command=命令
“名称”即你想要的右键菜单名称,“命令”即你在单击该菜单项时执行的命令。
INFEditor(安装信息文件编辑器)1.0(相关下载)
INF-ToolV6.3d英文版(相关下载)
作为一个电脑爱好者,当你把程序设计完成后,下一步接着就是要为它撰写一个安装程
序。可就在这一步,不少人都曾有过这样的苦恼:一个原来仅仅数百KB的小程序,写好安
装程序后竟然变成一、两MB,平白无故长“胖”不少。不过,现在大家不用心烦了,让“快
速的INF安装程序产生器”INF-Tool为你分担吧!
首先,让我们看看INF-Tool到底有什么特长?原来,使用INF-Tool制作出来的安装程
序文件非常小!一般来说,如果使用InstallShield等专业安装工具所制作出来的安装程序,
在原来的软件之上还要再增加1MB左右的体积;而使用INF-Tool制作安装程序,你会发现
原来的程序只需再多几KB就具有安装的功能。仅这一点就够吸引你吧!
这是因为,INF-Tool利用了Windows95/98及NT内建支持的INF安装资料文件,由于
其基本的文件复制、创建目录等工作都交由操作系统来完成。因此,仅使用2-3KB的INF
安装资料文件就能够完成专业安装工具的工作。最终用户只需在你提供的INF文件上单击
鼠标右键,并选择“安装”即可。
如果你想让用户更轻松一些,INF-Tool附有一个小小的可执行文件。它能
够自动完成INF文件的安装工作,使用者只需直接执行此文件就可以了。并且,INF-Tool
还具备自动建立一个.EXE的单独可执行文件的功能,将所有需要安装的文件全都包括在其
中,这将方便网络使用者通过Internet下载并安装。
通常,其他专业安装工具都附带有脚本控制语言,而INF-Tool则全部采用图形方式的
操作界面。也就是说,你不需要学会任何程序语言,即可制作出颇具水准的安装程序。
同时,INF-Tool还具备将安装程序加以切割的功能。例如:当你想将一个不算小的程
序放在网上供人下载的话,就使用此功能将其切割成一个个较小的安装文件,使网络下载更
方便。
INF-Tool还可为你的程序自动将快捷方式建在桌面上,如果要安装的文件是给NT使用的话,
还可以决定要将文件快捷方式连至Allur或者是Defalutur的快捷方式中。
制作INF安装程序StepbyStep
启动INF-Tool后显示其程序功能视窗,其中包括8个主要标签页,分别标以1至8的
序号。说明如下:
标签1:Projectinformation(图1)
在本页中应填写你的应用软件的名称、你的姓名、注册表中的注册码等等。其中有*号
的是必须填写的项目。
标签2:Filestoinstall(图2)
安装文件列表,即指定你要安装哪些文件。
标签3:Destination(图3)
安装目录。为这些文件指明安装目录,预设为Windows安装目录。
标签4:ModifyRegistry(图4)
修改注册表文件。你可以为自己的程序在注册表中添加一些特殊的信息。
标签5:Shortcuts(图5)
建立一个程序的快捷方式。
标签6:ModifySystem(图6)
修改系统。你还可以修改一下或等系统文件。
标签7:Dialogs(图7)
对话框。在安装开始和结束时显示的对话窗口,这些都是可选的操作。
标签8:Distribute(图8)
分发文件。在本页中按一下“Generatepackagenow”按钮即可创建分包文件。
设定完成以上8个标签,你的一个INF安装程序就大功告成了,感觉如何?很简单吧!
其他:
INF-Tool同时会产生一段反删除(Uninstall)的脚本,让你轻松加入反删除功能。另外,
5.3c版本中还加入了对中文(简体/繁体)的支持,只要你在其网站下载INF-ToolLanguage
Pack多语支持,就能够使用亲切的中文化界面了。
本文发布于:2022-12-03 20:08:43,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/46437.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
| 留言与评论(共有 0 条评论) |