大家好,欢迎来到IT知识分享网。
安装信息(Setup Information)文件是Windows系统支持的一种安装信息存放文件,一般以INF作为扩展名,因此也叫INF文件。安装信息INF文件与Windows内建的安装服务引擎(API函数库)紧密协同工作,基于其严格的编写语法制作而成的INF文件在拷贝、删除文件,增、删注册表键,更改系统设置等方面都有优秀的表现,完全可以用来实现应用程序文件安装的目标,而且价格免费,透明度高,安装程序小,可完全定制。INF文件是文本文件,可在任何文本编辑器内查看、创建、修改,普通用户使用Windows系统本身提供的记事本、写字板即可进行文件安装脚本的编写。
INF文件安装动作的触发机制
inf-name是INF文件的名称,“%1”即为所选中文件本身。
INF文件内部节(Section)的定义
INF文件用特殊的文本文件格式编辑、保存,Windows内建的安装函数遵循既定的语法从INF文件内获取安装信息。INF文件和初始化(或称私有化,Private File)文件相似,采用节(Section)和入口(Entries)的索引机制,节和入口定义了所有操作类型及操作对象。一个INF文件由不同类型的节组成,每类节都有其特殊的目的和不同的实现语法,每节的内容均服务于该节的目的。除了基本的识别INF格式的“Version”节外,INF文件中节的数目和类型没有限制,主要取决于具体安装任务。一个基本的INF文件,一般包含如下几节:
节的名称 | 节的作用 |
[version] | INF文件头,提供有效INF文件的版本信息 |
[DefaultInstall] | 包含安装所关联的动作(文件拷贝或删除,注册表键值的更新,子键删除等)在INF文件内容的节名指针中,默认情况下首先执行该节内容 |
[OtherInstall] | 与[DefaultInstall]节遵循相同的语法,但必须被显式的调用常被用来定义反安装动作 |
[DestinationDirs] | 指定罗列与一个节内容被拷贝、删除或重命名的文件在硬盘上的位置 |
[Fillcopy/Delete/Remename Sections] | 罗列将被拷贝、删除、或重命名的文件 |
[Registry UpdateSection] | 指定对注册表键值更新、子键增等动作 |
[iniFileUpdateSection] | 制动对ini文件进行更新、快捷方式通过该节进行创建 |
[SourseDiskNames] | 罗列文件所在盘盘名、盘的卷标、盘序列号 |
[sourseDiskFiles] | 罗列安装时使用的源文件及其所在的盘 |
[Strings] | 罗列本地化字符串 |
[Version]节
任何INF文件的第一个小节均是[Version],又称为INF文件头。一般有如下语句:
[Version] Signature=“$Chicago$” LayoutFile=filename.inf
[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文件时,注册表根键通常采用缩写方式,如下表:
[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来创建快捷方式和修改注册表
基本格式:
修改注册表的示例:
创建快捷方式的示例:
常用的ID值:
下面是一个例子,测试通过的
[version] Signature="$CHICAGO$" AdvancedINF=2.0 [Add.Code] QLBanK.ocx=QLBanK.ocx SAFE_User.exe=SAFE_User.exe [QLBanK.ocx] File-win32-x86=thiscab RegisterServer=yes clsid={B735F9B5-5E75-49D4-9AD1-DA3} DestDir=11 FileVersion=1,0,0,1 [WSAFE_User.exe] hook=QLinstaller FileVersion=1,0,1,1 [QLinstaller] file-win32-x86=./QLBank.CAB run=%EXTRACT_DIR%\SAFE_User.exe
下面是另一个例子(网上找的)
[version] signature="$CHICAGO$" AdvancedINF=2.0 [DefaultInstall] CopyFiles=install.files RegisterOCXs=RegisterFiles [RInstallApplicationFiles] CopyFiles=install.files RegisterOCXs=RegisterFiles [DestinationDirs] install.files=11 [SourceDisksNames] 1=%DiskName%,TestCAB.CAB,1 [Add.Code] pcpos.ocx=pcpos.ocx Comm.dll=comm.dll pcpos.dll=pcpos.dll TCPCLNT.dll=TCPCLNT.dll [install.files] pcpos.ocx=pcpos.ocx Comm.dll=comm.dll pcpos.dll=pcpos.dll TCPCLNT.dll=TCPCLNT.dll [SourceDisksFiles] pcpos.ocx=1 Comm.dll=1 pcpos.dll=1 TCPCLNT.dll=1 [pcpos.ocx] file-win32-x86=thiscab RegisterServer=yes clsid={719A1D6E-7099-4123-9D63-F0118AFF2D61} DestDir=11 FileVersion=1,0,0,1 [Comm.dll] file-win32-x86=thiscab RegisterServer=yes DestDir=11 FileVersion=1,0,0,1 [pcpos.dll] file-win32-x86=thiscab RegisterServer=yes DestDir=11 FileVersion=1,0,0,1 [TCPCLNT.dll] file-win32-x86=thiscab RegisterServer=yes DestDir=11 FileVersion=1,0,0,1 [RegisterFiles] %11%\pcpos.ocx
下面是一些部署cab时注意的问题
一、确定CAB的打包正确,打包的方式在网上随便都能找到;但要确定的包正确,如果在起点摔倒,已经丧失了“全程”的主动性,开始我们打的包就不好使。
三、在打开页面过程中如果碰到如下类似提,都要选择安装。
七、另外建议研究一下这个C:\WINDOWS\Downloaded Program Files文件夹,好像也和加载有关系,没有研究过,如果清楚插件的具体过程可能知道,可惜我不太清楚,感兴趣的可以搜一下,如果有收获不妨共享一下。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/128219.html