|
楼主 |
发表于 2007-1-19 03:18:23
|
显示全部楼层
<font size="2">[ClassInstall] 节:为设备定义一个新的类别(Class)。主要用于硬件设备的<br/><br/>安装。<br/><br/>[SourceDisksNames] 节: 列出包含文件的磁盘。 <br/><br/>[SourceDisksFiles] 节: 列出每个文件所在的特定磁盘。 <br/>其他的节还有许多,如:Update .ini Fields 节 (UpdateIniFields),Add Ini <br/><br/>File to Registry 节 (Ini2Reg),Update Config.sys 节 (UpdateCfgSys),<br/><br/>Update Autoexec.bat 节 (UpdateAutoBat),Optional Components 节,等等。 <br/><br/>.INF文件是由Windows的SetupAPI解释执行的脚本文件,它的运行过程很简单,<br/><br/>是一种线性的执行,线性的意思就是.INF文件的运行过程不存在分支语句,也就<br/><br/>是没有条件语句,一旦开始执行,就是沿着固定的路线运行。它的运行是按照节<br/><br/>为单位来执行的,从某一个[Install]节开始执行,从上到下执行该节中的条目<br/><br/>,如果该条目是一个节,那么就一条条执行子节中的条目,如此递归执行。<br/>这样的脚本看起来功能很弱,但是对于简单的安装任务已经足够了,安装不外乎<br/><br/>复制文件,添加注册表,修改.INI文件等任务,这些都可以用.INF文件来完成。<br/><br/>对于更复杂的安装要求,如要求安装程序的界面漂亮方便,要求有选择性的安装<br/><br/>,要求安装程序自动修复的功能,就只好求助于其他的工具了,如微软的<br/><br/>Windows Installer,就具备更加强大的功能。<br/><br/><br/>.INF文件的版本<br/><br/>.INF文件的语法是统一的分节语法,随着操作系统的更新,微软逐渐增加了一些<br/><br/>必要的关键字,但是整个的.INF文件的结构不会变化。从语法上来说,.INF文件<br/><br/>都是一个类别。<br/>按照.INF文件的版本来分类,可以分为2类:<br/>1 AdvancedINF,在[Version]节中有“AdvancedINF=2.5,"您需要新版本的 <br/><br/>AdvPack.dll" ”这么一行语句,表明此.INF文件需要AdvPack.dll这个动态链接<br/><br/>库来解释执行,AdvancedINF有一些高级特性,但是在目前用的不太多。<br/>2 普通INF,没有指明需要AdvPack.dll的.INF文件,使用SetupAPI.DLL来解释执<br/><br/>行(win9x系列的操作系统使用Setupx.dll),系统中缺省使用的就是这种普通<br/><br/>INF。<br/><br/>.INF文件的功能<br/><br/>从前面的介绍,能够看出使用 .INF文件可以完成如下功能:<br/>1 复制文件、删除文件、或重新命名文件。<br/>2 新增或删除注册表(Registry)中的项目。<br/>3 修改重要的系统设置文件(如 Autoexec.bat、Config.sys、.INI 等)。<br/>粗看起来,似乎上面提到的第一个功能可以用批处理文件.BAT来完成,第二个功<br/><br/>能可以通过注册表文件.REG来完成,第三个功能现在用得不多,不经常处理.INI<br/><br/>文件了。这样说起来似乎.INF文件也没有太大的优势啊。这种看法是有问题的,<br/><br/>下面我将会着重指出.INF在在这几个方面的应用,而不会仔细讲解.INF的语法。 <br/><br/>下面要提到.INF文件优于别的工具的方面。 <br/><br/>用.INF文件编辑注册表<br/><br/>.INF文件可以编辑操纵注册表,相应的的命令是AddReg和DelReg,语法如下:<br/>AddReg = add-registry-section[,add-registry-section]...<br/>[ add-registry-section] <br/>reg-root-string, [subkey], [value-name], [flag], [value] <br/>[add-registry-section]节定义了将要添加的注册表子键或值名,可以有选择地<br/><br/>设置它的值。<br/>DelReg = del-registry-section[,del-registry-section]...<br/>[ del-registry-section] <br/>reg-root-string, subkey, [value-name] <br/>[ del-registry-section]节定义了将要从注册表中删除子键subkey或值名<br/><br/>value-name。<br/>有时候上网遇到某些网站,修改了IE的主页,然后禁用了REGEDIT工具,这个时<br/><br/>候很多人只好借助于其他第三方工具如魔法兔子等来恢复注册表的编辑权限,其<br/><br/>实这个时候仅仅依靠.INF文件就可以恢复使用REGEDIT工具的权限。 <br/>把下面的这段代码复制到记事本里,另存为jiereg.inf,然后右击它选择“安装<br/><br/>(I)”,就可以了。<br/>[Version] <br/> Signature="$CHICAGO$" <br/> [DefaultInstall] <br/> AddReg=My.Add.Reg<br/> [My.Add.Reg] <br/> <br/><br/>HKCU,"SOFTWARE\Microsoft\windows\currentversion\policies\system","disa<br/><br/>bleregistrytools", 0x00010001,"0" <br/>HKLM,"SOFTWARE\Microsoft\windows\currentversion\policies\system","disa<br/><br/>bleregistrytools", 0x00010001,"0" <br/>当然还可以用其他的方法,原理也是一样的,这里仅仅是演示一下.INF文件的用<br/><br/>途。<br/>直接使用注册表文件,有时候还会遇到另外一个缺点,就是.REG文件里面使用16<br/><br/>进制代码表示UNICODE字符串的,如下面的两条注册表语句:<br/>[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\<br/><br/>User Shell Folders]<br/>"Cookies"=hex<br/><br/>(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,00,<br/><br/>45,00,25,00,5c,00,43,00,6f,00,6f,00,6b,00,69,00,65,00,73,00,00,00,00,0<br/><br/>0<br/><br/>[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SoftEther]<br/>"ImagePath"=hex<br/><br/>(2):22,00,44,00,3a,00,5c,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,<br/><br/>20,00,46,00,69,00,6c,00,65,00,73,00,5c,00,53,00,6f,00,66,00,74,00,45,0<br/><br/>0,74,00,68,00,65,00,72,00,5c,00,53,00,6f,00,66,00,74,00,45,00,74,00,68<br/><br/>,00,65,00,72,00,2e,00,65,00,78,00,65,00,22,00,20,00,73,00,65,00,72,00,<br/><br/>76,00,69,00,63,00,65,00,00,00,00,00<br/><br/>这上面两条语句难以阅读和修改,手工修改的话很麻烦,其中<br/>"Cookies"的值实际上就是“%USERPROFILE%\Cookies”字符串的UNICODE表示。<br/>"ImagePath"的值实际上就是"D:\Program Files\SoftEther\SoftEther.exe" <br/><br/>service<br/>如果用.INF文件的形式的话,就很简单明白了:<br/>[Version]<br/>Signature="$CHICAGO$"<br/>[DefaultInstall]<br/>AddReg=Folders_AddReg<br/>[Folders_AddReg]<br/>HKCU,"Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell <br/><br/>Folders","Cookies",0x00020000,"%USERPROFILE%\Cookies"<br/>HKLM,"SYSTEM\CurrentControlSet\Services\SoftEther","ImagePath",0x02000<br/><br/>0,"""D:\Program Files\SoftEther\SoftEther.exe"" service"<br/>这个时候可以手工修改里面的路径信息,而.REG文件则很难做到这一点。<br/><br/>用.INF文件编辑.INI文件<br/><br/>.INF文件可以使用UpdateInis命令修改.INI文件的功能也经常需要,UpdateInis<br/><br/>的语法如下:<br/>UpdateInis = update-ini-section[,update-ini-section]...<br/>[ update-ini-section-name] <br/>ini-file, ini-section, [old-ini-entry], [new-ini-entry], [flags] <br/>[update-ini-section-name]节给出的 .INF 文件中替换、删除或添加的全部条<br/><br/>目。<br/>ini-file 包含要更改条目的 .ini 文件名。 ini-section 包含要更改条目的节<br/><br/>名。 old-ini-entry 可选,常用形式为 Key=Value。new-ini-entry 可选,常<br/><br/>用形式为 Key=Value。flags 是可选操作标记。<br/>使用逻辑磁盘标识符 (LDID),可以方便的修改.INI文件中的路径信息,当然其<br/><br/>他的条目也同样。举例如下: Total Commander ,是一套极佳的文件管理员,<br/><br/>内含各种压缩与解压缩,类似NC般非常好用的工具,对于文件与路径的寻找,除<br/><br/>一般的复制、删除、搬移、编辑等功能外,还有FTP功能(具有续传、背景传输)<br/><br/>与解决了中文乱码问题,"专题"再也不会变成"彩题"、新增文件分割、文件合并<br/><br/>、文件编码、文件解码(MIME,UUE,XXE)及新的操作介面(浮动工具列)。真是一<br/><br/>套相当强悍可完全取代文件总管的工具程序。<br/>Total Commander依靠wincmd.ini来配置相应的操作特性和功能,于是可以使用<br/><br/>如下的.INF文件修改wincmd.ini中的路径信息:<br/>[version]<br/>Signature="$CHICAGO$"<br/>[DefaultInstall]<br/>AddReg=AddGhister<br/>UpdateInis=UpdateInicmd <br/>[AddGhister]<br/>HKCU,"Software\Ghisler\Total <br/><br/>Commander","IniFileName",0,".\\wincmd.ini"<br/>HKCU,"Software\Ghisler\Total <br/><br/>Commander","FtpIniName",0,".\\wcx_ftp.ini" <br/>[UpdateInicmd]<br/>%01%\wincmd.ini, Configuration,,"InstallDir=%01%"<br/>%01%\wincmd.ini, Configuration,,"Mainmenu=%01%\LANGUAGE\TCExtMenu.mnu"<br/>其中 [AddGhister]节负责修改注册表中记录的wincmd.ini的路径,而<br/><br/>[UpdateInicmd]节负责修改wincmd.ini文件红的相应路径信息,可以看出,一个<br/><br/>简单的.INF文件就完成了修改Total Commander的路径的任务,在Total <br/><br/>Commander5.x版本中,必须修改wincmd.ini文件中的路径信息,这个时候使<br/><br/>用.INF文件是非常方便的。<br/><br/><br/>用.INF文件删除正在使用的文件<br/><br/>有时候由于某些文件正被操作系统使用而无法删除,如某些用于资源管理器的<br/><br/>OCX控件,可以使用.INF文件的DelFiles命令删除,该命令如果发现要删除的文<br/><br/>件被锁定,就会把文件放到系统删除队列中排队,等系统重启动的时候,该文件<br/><br/>就自动被删除了。<br/>Delfiles的语法是:<br/>Delfiles= file-list-section [,file-list-section]...<br/>[file-list-section]<br/>filename,,,1<br/>[file-list-section]节定义了将要删除的文件列表,filename后面的1是一个标<br/><br/>志,指明如果文件当前无法删除,就等到系统重启动后删除。把下面的这段代码<br/><br/>复制到记事本里,另存为delinuse.inf,把这个文件拷贝到无法删除的文件的目<br/><br/>录,然后右击它选择“安装(I)”,就可以删除当前目录下正在使用的setup.exe<br/><br/>和setup2.exe。<br/>[Version]<br/>Signature="$Chicago$"<br/><br/>[DestinationDirs]<br/>DefaultDestDir = 01 ; 当前目录 ,定义了将要删除的文件的路径 <br/>[DefaultInstall] <br/>DelFiles = DELETELIST <br/>[DELETELIST]<br/>setup.exe ,,,1; 将要删除的文件<br/>setup2.exe ,,,1; 将要删除的文件<br/>同样可以使用Copyfiles命令替换系统正在访问的文件。这些功能通过普通的del<br/><br/>和copy命令都无法实现,如果不使用.INF文件,必须使用第三方的软件来完成。<br/><br/>辅助制作绿色软件<br/><br/>在注册表.REG文件中,不可以使用变量,这个缺陷对于需要设置路径的安装程序<br/><br/>来说,是非常致命的弱点,.REG文件中的路径都是静态的,一旦写好,就不会随<br/><br/>着系统的变化而变化,如果需要把安装的程序从C盘改变到D盘,而在.REG文件中<br/><br/>记录了安装路径的话,这个时候直接倒入注册表文件.REG是不行的,导入的注册<br/><br/>表仍然是原来写入的路径。而在.INF文件中,可以使用变量来操纵路径,从而可<br/><br/>以跟踪安装程序所需要的路径的变化。<br/>对于绿色软件的制作,可以看我写的另外的专门的文章——绿色软件的制作,其<br/><br/>中核心的一点就是获得原来软件的安装程序所做出的注册表的改变,然后把该变<br/><br/>化导出为一个注册表文件.REG来进一步分析。如果导出的.REG文件不包括绝对路<br/><br/>径,那么可以把该注册表文件和提取出的软件打包在一起做成绿色软件。如果导<br/><br/>出的.REG文件中包含当前软件的绝对安装路径,那么就必须每次都要手工修改注<br/><br/>册表中路径,是很麻烦的,降低了做成绿色软件的意义所在。而使用.INF文件,<br/><br/>使用AddReg命令可以轻松容易的解决这个注册表路径的难题。<br/><br/>对于绿色软件的安装制作来说,最重要的就是01,也就是源文件夹。下面举一个<br/><br/>例子:<br/>Registry Crawler V4.5 ,是强大的用户和开发者快速定位并配置注册表的工具<br/><br/>软件。一个强大的搜索引擎允许你基于搜索标准查找注册信息。(可以从天空软<br/><br/>件站下载</font><a href="http://www4.skycn.com/soft/2963.html" target="_blank"><font size="2">http://www4.skycn.com/soft/2963.html</font></a><font size="2">),安装完成后导出的注册表<br/><br/>包含着如下一条语句:<br/>[HKEY_LOCAL_MACHINE\SOFTWARE\4Developers\RCrawler\AppPath]<br/>@="F:\\tools\\Reg\\RCrawler"<br/>其中“F:\tools\Reg\RCrawler”是安装路径。<br/>而改写为.INF文件就是:<br/>[version]<br/>Signature="$CHICAGO$"<br/>[DefaultInstall]<br/>AddReg=Add<br/>[Add]<br/>HKLM,"SOFTWARE\4Developers\RCrawler\AppPath","",0,"%01%"<br/>注意里面的%01%就代表当前的安装路径。<br/><br/>当我们把F:\tools\Reg\RCrawler这个目录下的文件移动到其他目录时候,要<br/><br/>用.REG文件的方式的话,就必须手工修改注册表文件,而使用前面的.INF文件的<br/><br/>时候,什么都无需修改,只要在文件管理器explorer里面,用鼠标右键执行“安<br/><br/>装”命令的时候,%01%就自动被替换为当前所在的目录了。 <br/><br/>最后,总结一句,注册表文件.REG非常方便和直观,但是对于处理路径的变化的<br/><br/>情况,非常笨拙和不方便,而.INF不如注册表文件直观,但是可以方便的处理路<br/><br/>径信息(包括UNICODE的路径信息),所以应该把.REG文件和.INF文件结合使用<br/><br/>,互相弥补各自的缺点。<br/><br/>.INF文件的生成方法<br/>可以直接手工用一个纯文本的编辑器书写.INF文件,当相对应的.REG文件非常庞<br/><br/>大,条目比较多时候,可以用小工具reg2inf.exe来自动的把.REG文件转换<br/><br/>为.INF文件,然后再进行相应的路径修改,把绝对路径替换为用逻辑磁盘标识符 <br/><br/>(LDID) 来表示的路径。<br/>如果涉及到文件操作的时候,只好手工写了,目前还没有自动化的工具。<br/><br/><br/>inf 文件的好处是 不像vbs那么强大,甚至有可能由危险的格式化代码<br/>inf的限制很强,这样比其他的脚本文件安全,当然相对的功能就弱,但是也足够<br/><br/>了</font><br/> |
|