我们大家的资源库
设置zzzyk.com为首页 \ 加入收藏 \ 联系我们
 
 
立即高级搜索
首页源码下载站长学校素材中心技术论坛网页模版LinuxJava学校站长工具繁體中文
 
广


 
   
您当前的位置:站长资源库站长学校电脑通通透办公一族 → 技术信息 退出登录 用户管理
扩展使用.INF文件-制作免安装的绿色软件
作者:lyh728  来源:DreamLand  发布时间:2005-12-5 20:34:31
减小字体 增大字体

在我写的专门的文章——绿色软件的制作中(http://dream4ever.org/showthread.php?p=33652#post33652)
,讲到把注册表文件和提取出的软件打包在一起做成绿色软件。但是.REG文件中的路径都是静态的,一旦写好,就不会随着系统的变化而变化,而在.INF文件中,可以使用变量操纵路径,从而可以跟踪安装程序所需要的路径的变化。下面首先以一个完整的例子来演示如何用.INF文件制作绿色软件,然后具体讲解.INF文件的各种用途。

EmEditor的绿化

下载EmEditor的安装文件emed404epx.exe后,发现用WinRAR可以打开,解压后,运行EmEditor,发现丢失了预定义的多种文本格式的语法配置,看来这样做不行,只好采用系统快照的方法了。请随我一步步进行,步骤如下:

1 扫描系统,制订系统快照。这里我仅仅记录当前系统的注册表(因为我认为EmEditor不会向系统目录拷贝文件,如果判断错误,就会导致“绿化”失败),运行ART(Advanced Registery Tracer),扫描一遍注册表。如图EmEditor_snap.PNG,不要关闭ART。

2 安装EmEditor。随便安装到哪里,反正一会就卸载。安装好后,如果需要的话,更改配置,或者配置新的文件类型,例如我就增加了NFO文件类型,设定和NFO文件相关联的字符集,这样可以用EmEditor直接察看NFO文件,不需要专门的察看工具了。

3 记录系统变化。再一次扫描系统,给系统作快照,从ART里面再一次扫描注册表,然后选择菜单命令Registry-〉compare here或者直接用键盘F10,比较结果如图EmEditor_compare.png,点击图中那个save to redo file的按钮,存储为EmEditor.reg文件,关闭ART。

4 复制并卸载。复制安装好的EmEditor目录到其他路径,然后卸载EmEditor程序。

5 分析。打开刚刚导出的EmEditor.reg文件,这是一个巨大的reg文件,单单是REG文件就有1兆多,不过不用担心。阅读注册表后,删除和EmEditor无关的注册表项后,如仅仅和资源管理器相关的注册表部分,发现剩下的注册表文件可以分成3个部分。一部分在位于注册表的这个路径[HKEY_LOCAL_MACHINE\SOFTWARE\EmSoft],里面大部分不涉及路径,只有一项记录了EmEditor的路径,就是"ModulePath"="h:\\EmEditor4\\";还有一大部分在注册表的这个路径下面[HKEY_CURRENT_USER\Software\EmSoft\EmEditor v3],里面有很多项都涉及了EmEditor的路径,如"Tmpl"="h:\\EmEditor4\\template.xml";还有就是和EmEditor和txt文件后缀向关联的注册表设置,把EmEditor设置为IE中缺省的源代码察看工具的注册表设置以及注册COM组件EMEDSHL.DLL的注册表部分(和InProcServer32相关的就是)。

6 “绿化”。

6.1 把位于注册表路径路径[HKEY_LOCAL_MACHINE\SOFTWARE\EmSoft]的内容存储到EmEditor_HKLM.reg文件中,把位于注册表路径[HKEY_CURRENT_USER\Software\EmSoft\EmEditor v3]的内容存储到EmEditor_HKCU.reg文件中,把剩下的内容首先除掉COM组件EMEDSHL.DLL的相关部分,然后存储到EmEditor_assoc.reg文件中。

6.2 把EmEditor_HKLM.reg文件和EmEditor_HKCU.reg文件中涉及到路径的注册表内容抽取出来,存储到EmEditorConf.reg文件。

6.3
绿色软件的制作,其中核心的一点就是获得原来软件的安装程序所做出的注册表的改变,然后把该变化导出为一个注册表文件.REG来进一步分析。如果导出的.REG文件不包括绝对路径,那么可以把该注册表文件和提取出的软件打包在一起做成绿色软件。如果导出的.REG文件中包含当前软件的绝对安装路径,那么就必须每次都要手工修改注册表中路径,是很麻烦的,降低了做成绿色软件的意义所在。而使用.INF文件,使用AddReg命令可以轻松容易的解决这个注册表路径的难题。
把EmEditor_assoc.reg文件和EmEditorConf.reg文件用INF的语法转换为INF文件,或者用一个免费小工具reg2inf.exe自动转换,然后把转换得到的EmEditor_assoc.inf文件和EmEditorConf.inf文件中的路径h:\EmEditor4全部用%01%代替。下面是EmEditorConf.inf文件的内容:
[Version]
Signature="$CHICAGO$"
[DefaultInstall]
AddReg=EmEditorConf_AddReg

hklm,"SOFTWARE\EmSoft\EmEditor v3\Common","ModulePath",,"%01%\"
hkcu,"Software\EmSoft\EmEditor v3\Config\C++","Tmpl",,"%01%\template.cpp"
hkcu,"Software\EmSoft\EmEditor v3\Config\CSS","Tmpl",,"%01%\template.css"
hkcu,"Software\EmSoft\EmEditor v3\Config\HTML","Tmpl",,"%01%\template.htm"
hkcu,"Software\EmSoft\EmEditor v3\Config\Java","Tmpl",,"%01%\template.java"
hkcu,"Software\EmSoft\EmEditor v3\Config\javascript","Tmpl",,"%01%\template.js"
hkcu,"Software\EmSoft\EmEditor v3\Config\JSP","Tmpl",,"%01%\template.jsp"
hkcu,"Software\EmSoft\EmEditor v3\Config\Perl","Tmpl",,"%01%\template.pl"
hkcu,"Software\EmSoft\EmEditor v3\Config\PHP","Tmpl",,"%01%\template.php"
hkcu,"Software\EmSoft\EmEditor v3\Config\Python","Tmpl",,"%01%\template.py"
hkcu,"Software\EmSoft\EmEditor v3\Config\Ruby","Tmpl",,"%01%\template.rb"
hkcu,"Software\EmSoft\EmEditor v3\Config\TeX","Tmpl",,"%01%\template.tex"
hkcu,"Software\EmSoft\EmEditor v3\Config\VBScript","Tmpl",,"%01%\template.vbs"
hkcu,"Software\EmSoft\EmEditor v3\Config\VBScript for EmEditor","Tmpl",,"%01%\template.vbee"
hkcu,"Software\EmSoft\EmEditor v3\Config\Windows Script","Tmpl",,"%01%\template.wsf"
hkcu,"Software\EmSoft\EmEditor v3\Config\XML","Tmpl",,"%01%\template.xml"

6.4 写一个批处理文件install.bat,内容如下:
regedit EmEditor_HKLM.reg
regedit EmEditor_HKCU.reg
RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 128 .\EmEditorConf.inf
regsvr32 EMEDSHL.DLL
RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultInstall 128 .\EmEditor_assoc.inf

6.5 把install.bat,EmEditorConf.inf,EmEditor_assoc.inf,EmEditor_HKLM.reg,EmEditor_HKCU.reg5个文件存储到EmEditor的目录,删除其余的注册表文件。

6.6 根据安装步骤和install.bat,写出相应的卸载的批处理文件,这个比较简单。
经过测试后,EmEditor工作正常,也可以注释掉install.bat的最后2行语句,这样EmEditor就不会和系统关联,上面的步骤是在windows 2000上的,对于win9x也同样,而且win9x下面的EmEditor的配置文件和windows 2000的一样,仅仅是程序的版本不同。
把制作好的绿色的EmEditor拷贝到U盘上,需要用的时候,直接执行里面的install.bat文件就可以了(注意,要在EmEditor的目录运行批处理文件),不需要任何文件拷贝。

.INF文件是什么

.INF是 Device Information File 的缩写,是微软公司为供硬件设备制造商发布其设备驱动程序而发展的———许多硬件设备的驱动程序都是使用 .INF文件来安装的。.INF文件从 Windows3.X 时代就开始大量被使用了。  
.INF文件是一种具有特定格式的纯文本文件,我们可说它是一种安装脚本(SetupScript)。虽然 .INF 只是纯文本文件,但是当我们在文件管理器explorer对 .INF文件按鼠标右键後,如图inf右键.PNG,在右键菜单上就会出现“安装I”命令,这是因为微软公司已在其操作系统 Windows 中内置提供了 Setup API(可以解释.INF脚本文件),我们只需用文本编辑软件编写 .INF文件,便可完成大部份的安装工作,所以尤其是在软体的大小并不是很大的情况下,安装工作不是很复杂的时候,使用 .INF文件来进行安装工作将会是一个好选择。而且如果要安装设备驱动程序,.INF文件是目前唯一的选择。 可以用 .INF文件创建包括注册表条目和目的目录的自定义软件安装指令。.INF文件可以提供有限的平台独立性,并指定有限的软件依赖性。目前.INF文件最普遍的应用是为安装硬件设备的驱动程序服务的,本文的目的就是介绍 .INF文件的功能、结构、并提供了几个 事例来说明如何用.INF文件,如何扩展.INF文件的用途,比如制作绿色软件,仅供参考。

下面首先给出一个驱动程序的.INF文件的例子,如图usbinfpng.png,是我从Windows2000中抽取出来的用于Win98se的USB存储设备驱动的usbstor.INF文件,删除了大部分内容,紧紧保留了一个基本的.INF文件的框架。

.INF文件的格式

在图usbinfpng.png中,可以看到.INF文件是由许多节(Section)组成,与.INI文件类似,整个.INF文件由几个节组成,节名用方括号扩起来,如version 节,Manufacturer节,和Strings节等等。而每个节又由一系列的条目组成,每个条目都是是由一个键(Key)与一个值(Value)组成,都是“Key=Value”这样的形式,在这些节中定义的项目可以完成硬件的自动检测和软件(包括驱动程序)的安装。.INF文件中分号后面的字符串是注释。在一个 .INF文件中,所有跟随在分号(;)后的文字都会被视为注释。注释并不一定要在新行开始,可以在一行文字後面加入注释。

.INF文件案格式和作用如下所示:

[Version] 节: 包含对此 .INF文件的简短描述与此 .INF文件支持的设备类型的信息。用于确认 .INF文件的基本版本信息。任何.INF文件都必须 包括这个节。
在图usbinfpng.png中,[Version] 节中的语句 Signature="$CHICAGO$"表明这个.INF文件可以用于windows 95以后的所有平台上,目前来说就是win98,winme,winnt4,win2k,winxp,win2k3。这种.INF文件比较多见。如果[Version]节中的签名条目是 Signature="$Windows 95$",表明这个.INF文件可以用于windows 95以后的Win9x平台上,目前来说就是win98,winme。 如果[Version]节中的签名条目是 Signature="$WINDOWS NT$",表明这个.INF文件可以用于WindowsNT系列的平台上,包括winnt4,win2k,winxp,win2k3。WIN9x系列的操作系统的SetupAPI将会拒绝执行这种类型的.INF文件。

[Manufacturer] 与 [Manufacturer Name] 节: 列出此 .INF文件可辨识的所有硬件设备,并列出了开发该硬件的厂商名称,主要用于硬件设备的安装。在设备驱动程序的.INF文件中必须包括[Manufacturer]节与 [Manufacturer Name] 节。对应到图usbinfpng.png中就是[Manufacturer]节和[Microsoft]节,安装新硬件的向导中列出来的厂商名字和设备名称就是来自这两个节。这行语句“%MfgName%=Microsoft” 的等号右边的名字指明设备制造商是Microsoft,等号左边是厂商的名字,图中的厂商名称是"Microsoft"(在后面讲到的[Strings]节中)。在一个.INF文件中可以有多个设备制造商的名字,都必须放在[Manufacturer]节中,同时[Manufacturer Name] 节可以列出该厂商的多种设备。 [Manufacturer Name] 节区含有对要安装的设备的描述,并为要安装的设备指出 [Install] 节区。 [Manufacturer Name]节语法:
[manufacturer-name]
device-description=install-section-name,device-id[,compatible-device-id]...
device-description就是对要安装的设备的描述。install-section-name就是此设备的 [Install] 节区名称,manufacturer-name 节区名称必须已在 [Manufacturer] 节区中被定义。device-id是此设备的硬件标志符,每个厂家的不同的硬件对应着不同的设备标志符。
对应到图usbinfpng.png中,就是这行语句“%GenericBulkOnly.DeviceDesc%=USBSTOR_BULK, USB\Class_08&SubClass_02&Prot_50”等号左边是设备的描述,也就是设备名字是"USB Mass Storage Device",而等号右边的USB\Class_08&SubClass_02&Prot_50是设备标志符,这个标志符是对应到一类的硬件设备,就是USB存储设备,操作系统检测到USB存储设备,安装相应的驱动的时候,就会从设备驱动的安装节即[USBSTOR_BULK]节开始安装驱动。可以看出来此.INF文件可以用于通用的USB存储设备"USB Mass Storage Device"的驱动程序的安装。
普通的安装软件的.INF文件中,不包括[Manufacturer] 与 [Manufacturer Name] 节,即使包含,也不会执行它们,这2个节仅仅用于硬件的设备驱动中起作用。

[1] [2]  下一页

返回上页 打印本页



 
广


本类热门技术
相关技术
推荐技术
广


技术评论 (评论内容只代表网友观点,与本站立场无关!)

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码

 
 
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 请求帮助
Copyright © 2004-2007 zhaoxi.net. All Rights Reserved .
站长资源库,为你提供最实用的源码下载!