整合包制作分析

X-Stan / 八月 13th, 2009 / No Comments / Tags: / Posted in 技术园林 / 10,566 views

整合包制作&原理分析

 

啄木鸟winrar3.60 美化版NLITE整合包 分析

制作心得:
1.首先分析要制作软件的安装过程及结果的作用;
2.先将运行所需要的文件放置到需要的位置;
3.观察安装安装过程中注册的文件(如LL文件等等),这是软件能够运行的关键;
4.winrar3.60 beta 1安装特点分析:
A.将所需要文件放置相关位置;(X:\Program Files\)
B.因为运行时可能需要在控制面板、开始菜单等地方添加相关设置,但值得庆幸的是我们要采用的这个版本很有其自身特点的。只要运行X:\Program Files\WINRAR\Uninstall.exe就一些OK了,详见下:

ENTRIES_WINRAR.ini

[general]            ;(常规) 区段用于存放关于你的整合包的特别信息
builddate=2006/4/7 ;制作创建时间
description=啄木鸟winrar3.60 beta 1美化版NLITE整合包 ;“修复程序和整合包”的说明
language=简体中文 ;软件语言
title=啄木鸟winrar3.60 beta 1美化版 ;“修复程序和整合包”的名称
version=3.61 ;软件或包的版本,自动软件‘V’,所以只添写版本就可以了。
website=http://www.zmn120.net/ ;“修复程序和整合包”的更多信息项(整合包的网站出处)
author=啄木鸟              ;自己的标注     
email=su_ht@163.com

[filenames]
[sysoc]      ;将被添加到 sysoc.inf 中的 “[Components]” 区段下
winrar=ocgen.dll,OcEntry,winrar.inf,HIDE,7    ;"winrar"针对其他的包要有独立性

[dosnet_files]  ;这个区段下的条目将被添加到 dosnet.inf 的[Files] 区段下
d1,winrar.inf   ; d1 代表着安装程序会在I386 目录 (默认情况下) 下寻找这个文件.
d1,winrar.cab   ;将软件的所有文件打包成.cab文件

[txtsetup_files]
winrar.inf = 100,,,,,,,20,0,0 ;软件一般使用100就可以了,20是让安装程序把 winrar.inf 复制到 %windir%system32.
winrar.cab = 100,,,,,,_x,,3,3 ;_x 代表着这个安装盘上的这个文件没有经过压缩. 如果没有这个, 那么安装程序会认为这个文件已被压缩过了. 这个对于保证安全性和可靠性很重要. 每个 XP 文件都被列在了 layout.inf 中, 包括这个文件的大小 (按字节计算).很明显, 一个文件的压缩前和压缩后的大小是不会相同的. 如果 txtsetup.sif 告诉安装程序 “某个文件未被压缩”,
那么安装程序就会在layout.inf 中查找它的文件大小以确保这个文件未经修改或是损坏. 如果文件大小与 layout.inf 中记录的不同,那么 XP 安装程序就会报错并停止安装. 这个能够保证安装程序的安全性, 以确定文件是否被修改过. 它还能验证文件是否已被损坏.如果文件已被损坏, 那么稍后安装时就可能会出现问题. 如果你以 _x 为关键字在 txtsetup.sif 进行搜索, 那么你就能找到所有未经压缩的 Windows 安装文件.
=============
WINRAR.inf

[Version] ;用于确认 .inf 文件的基本版本信息
signature=”$Windows NT$”

[DefaultInstall]
OptionDesc =”晓锋工作室”
Tip =”3.60 beta 1 NLITE整合包”
Modes =0,1,2,3 ;以上三行做适当带动套用即可
CopyFiles = WIN35.WINRAR,WINRAR.Formats ;复制这两个段内的指定文件
AddReg = WINRAR.AddReg ;将定义段中的内容写入注册表

[Optional Components]
WINRAR ;要保持和包中的CAB文件的文件名相同

[WINRAR]
OptionDesc =”晓锋工作室”
Tip =”3.60 beta 1 NLITE整合包”
Modes =0,1,2,3
CopyFiles = WIN35.WINRAR,WINRAR.Formats
AddReg = WINRAR.AddReg

[SourceDisksNames.x86]
1=”WINRARProgramFiles”,”WINRAR.cab”,,”i386″ ; 对应相关文件名即可

[DestinationDirs]
WIN35.WINRAR = 16422,”%RAR1_dir%” ;将定义段中指定的文件复制到指定地方
WINRAR.Formats = 16422,”%RAR2_dir%” ;16422=X:\Program Files\ ,论坛中有详细的列表

[SourceDisksFiles] ;将所有的文件放在此段中定义
Default.SFX=1
Descript.ion=1
File_Id.diz=1
License.txt=1
Order.htm=1
Rar.exe=1
Rar.txt=1
RarExt64.dll=1
RarExt.dll=1
RarExtLoader.exe=1
RarFiles.lst=1
rarnew.dat=1
rarreg.key=1
ReadMe.txt=1
TechNote.txt=1
Uninstall.exe=1
Uninstall.lst=1
UnRAR.exe=1
UnrarSrc.txt=1
WhatsNew.txt=1
WinCon.SFX=1
WinRAR.cnt=1
WinRAR.exe=1
winrar.hlp=1
Zip.SFX=1
zipnew.dat=1
7z.fmt=1
7zxa.dll=1
ace.fmt=1
arj.fmt=1
bz2.fmt=1
cab.fmt=1
gz.fmt=1
iso.fmt=1
lzh.fmt=1
tar.fmt=1
UNACEV2.DLL=1
uue.fmt=1
z.fmt=1

[WIN35.WINRAR] ;定义所以需要的文件,一般要根据安装文件所需要那些文件夹或者说目录而定
Default.SFX
Descript.ion
File_Id.diz
License.txt
Order.htm
Rar.exe
Rar.txt
RarExt64.dll
RarExt.dll
RarExtLoader.exe
RarFiles.lst
rarnew.dat
rarreg.key
ReadMe.txt
TechNote.txt
Uninstall.exe
Uninstall.lst
UnRAR.exe
UnrarSrc.txt
WhatsNew.txt
WinCon.SFX
WinRAR.cnt
WinRAR.exe
winrar.hlp
Zip.SFX
zipnew.dat

[WINRAR.Formats]
7z.fmt
7zxa.dll
ace.fmt
arj.fmt
bz2.fmt
cab.fmt
gz.fmt
iso.fmt
lzh.fmt
tar.fmt
UNACEV2.DLL
uue.fmt
z.fmt
[WINRAR.AddReg]
HKLM,”Software\Microsoft\Windows\CurrentVersion\RunOnce”,”WINRAR”,0,”%SystemRoot%\Program Files\WINRAR\Uninstall.exe /setup /s”

;运行Uninstall.exe完成软件安装的最后设置, /setup 是安装参数 ,/s是静态参数,不然会出现一些窗口.
;%SystemRoot%是系统所在的跟目录
;HKLM 与 HKEY_LOCAL_MACHINE 相同
[Strings] ;定义软件所需要的目录
RAR1_dir = “WinRAR\”
RAR2_dir = “WinRAR\Formats”

nLite 整合包定义文件 entries.ini 说明以及相关补遗

基本上,这些个 Entrie*.ini 文件是 nLite 整合包里最重要的文件了. 它向整合工具提供了有关如何进行整合的数据. 随着时间的流逝, 会另外添加很多新功能… 但我只能在此列出目前了解到的定义.

==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

文件头

这个文件头部只是用来说明相关信息的. 整合工具是用不到它的.
代码:
;############################################################################################
;# entries.ini
;# ———————
;# 这个文件包含了将被整合到 Windows 安装文件中的所有条目的列表.
;############################################################################################
==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

[general]

这个 general (常规) 区段用于存放关于你的整合包的特别信息.
builddate=你创建这个整合包的日期
description=关于这个整合包的信息.
language=你的整合包所使用的语言.
title=整合包的名称.
version=整合包的版本.
website=整合包的网站出处.

代码:
[general]
builddate=2005/08/24
description=RyanVM's Post-SP2 Update Pack for Windows XP
language=English
title=RyanVM Update Pack
version=1.3.1
website=http://ryanvm.msfn.org/
==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

[filenames]

这个 filenames 区段用于设置一个整合包环境变量. 例如… 整合包的关键 inf 文件. 以下实例设置的环境变量将会代替RVMUpPck.inf
%maininf% 只在这个 entries.ini 文件中有效.

在你所创建的整合包中, 这个信息必须是独一无二的. 请不要在不同的整合包中重复使用同样的信息!
代码:
;这个区段包含了用于 RyanVM 文件名的环境变量.
[filenames]
maininf=RVMUpPck.inf
==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

[sysoc]

Sysoc.inf
它是系统可选组件定义 Inf 文件, 用于在安装期间控制安装哪些 Windows 组件, 还可用于定义是否隐藏某个 Windows 组件.

对于整合包定义来说, 这个区段可有可无, 不是很重要. 目前主要是用于在安装期间让 Windows 启动处理RVMUpPck.inf 文件.

entries.ini 中的 [sysoc] 区段下的条目:
RVMUpdatePack=ocgen.dll,OcEntry,%maininf%,HIDE,7

将被添加到 sysoc.inf 中的 “[Components]” 区段下, 由于其中带有 HIDE, 你将无法在 Windows 组件向导中看到 RyanVM 条目.
ocgen.dll 和 OcEntry 是用于处理这行的 dll 文件及其入口
%maininf% 将被转换为 “RVMUpPck.inf” (这是很重要的部分)
7 是个数字, 我不了解它的具体含义.

你用 Google 搜索 sysoc.inf 就能看到很多相关介绍网页.

在你所创建的整合包中, 这个信息必须是独一无二的. 请不要在不同的整合包中重复使用同样的信息!
代码:
;这个区段所包含的条目将被添加到 Sysoc.inf 的 [Components] 区段下.
[sysoc]
RVMUpdatePack=ocgen.dll,OcEntry,%maininf%,HIDE,7
==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

[dosnet_files]

这个 dosnet_files 区段用于向 dosnet.inf 的 [Files] 区段下添加文件定义. 其格式通常为 ”d1,filename.ext”, d1 代表着安装程序会在I386 目录 (默认情况下) 下寻找这个文件. 你可以在 dosnet.inf 的 [Directories] 区段下找到 d1 所代表的路径.
代码:
;这个区段下的条目将被添加到 dosnet.inf 的[Files] 区段下
[dosnet_files]
d1,%maininf%
d1,archvapp.inf
d1,cobramsg.dll
d1,guitrna.dll
d1,wups2.dll
d1,xpsp3res.dll
==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

[txtsetup_dirs]

这个 [txtsetup_dirs] 区段用于给 Windows (应该说是系统根目录) 下的某个子路径分配一个占位号码. 这样 [txtsetup_files] 区段下的定义就可以使用这个路径代码了. 以下是个例子:

241 = system32\PreInstall\WinSE\wxp_x86_0409_v1

然后在 txtsetup_files 区段下你就能看到:
spcustom.dll = 100,,,,,,,241,0,0,spcustom.dll.ref
spmsg.dll = 100,,,,,,,241,0,0,spmsg.dll.ref
spuninst.exe = 100,,,,,,,241,0,0,spuninst.exe.ref
spupdsvc.exe = 100,,,,,,,241,0,0,spupdsvc.exe.ref
sysmoda.dll = 100,,,,,,,111,0,0
update.exe = 100,,,,,,,241,0,0,update.exe.ref
updspapi.dll = 100,,,,,,,241,0,0,updspapi.dll.ref

这个 241 会告诉安装程序将那些个文件置入
system32\PreInstall\WinSE\wxp_x86_0409_v1
文件夹中.

若想深入了解 [txtsetup_dirs] 和 [txtsetup_files], 请阅读以下帖子:
http://gosh.msfnhosting.com/txtsetup.htm

http://www.msfn.org/board/index.php?showtopic=14852
代码:
;以下条目将被添加到 txtsetup.sif 的 [WinntDirectories] 区段下
[txtsetup_dirs]
241 = system32\PreInstall\WinSE\wxp_x86_0409_v1
==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

[txtsetup_files]

若想深入了解 [txtsetup_dirs] 和 [txtsetup_files], 请阅读以下帖子:
http://gosh.msfnhosting.com/txtsetup.htm

http://www.msfn.org/board/index.php?showtopic=14852
代码:
; 以下条目将被添加到 txtsetup.sif 的[SourceDisksFiles] 区段下
[txtsetup_files]
==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

[svcpack_catalogs]
总的来说, 当你安装修补程序包 Hotfix 时, 都会有一个对应的 .Cat 安全编录文件. 如果你想让你整合的修补程序包获得数字签名, 那么你就应当将 .Cat 安全编录置入这个地方.. 如果你不将其置入这里, 那么当你没有禁用系统文件保护的情况下安装 Windows 时, 很可能会遇到问题.
代码:
;这个区段包含了将被添加到 svcpack.inf 中的 .cat 安全编录列表
[svcpack_catalogs]
==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

[drivercab_expand]

这个区段下的条目是那些同时存在于 i386 文件夹中和 Driver.cab(包括 spx.cab 等等, 它们都是驱动包) 驱动包中的文件.

列在这里的文件将被展开到临时文件夹中, 然后整合程序会用其添加替换到驱动包中.
代码:
;以下列出的文件同时存在于 i386 文件夹中和 driver.cab 驱动包中.
;它们将被展开, 并在更新驱动包时, 将其添加到驱动包的处理目录中.
[drivercab_expand]
1394bus.sy_
atapi.sy_
usbehci.sy_
usbhub.sy_
usbstor.sy_
==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

[drivercab_move]

这个区段下的条目是那些只存在于驱动包中的文件列表. (Driver & SPx)

这些文件将被移动到临时文件夹中, 当更新驱动包的时候, 这些文件将被添加到驱动包中.

这些在整合包中时并没有被压缩, 当它们被移动到驱动包中之后才会被压缩.
代码:
;以下文件只存在于驱动包中
;更新驱动包时, 它们将会被移动到驱动包的处理目录中.
[drivercab_move]
plotter.dll
plotui.dll
unidrv.dll
unidrvui.dll
unires.dll
wzcsapi.dll
wzcsvc.dll
==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

[dupedrivers]

目前这个区段的功能还不能受到正确的支持. 有些文件同时存在于驱动包 (driver.cab, spx.cab) 和 i386 文件夹中, 它实际上是用于移除存在于驱动包中的重复文件的..

==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

[obsolete]
这个区段是用于告诉整合程序移除 svcpack.inf 中的对应条目, 以尽量避免造成修补程序包之间的冲突.
代码:
;这个区段包含了禁止安装的修补程序包, 以尽量避免冲突
[obsolete]
KB319740.cat
KB842520.cat
KB867795.cat
KB901026.cat
KB901214.cat
scripten.cat
==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

[ExtraFileEdits] 目前仅受 RyanVM Integrator 支持.

[ExtraFileEdits] 区段目前仅受 RyanVM integrator 支持. 因此, 你不能在用于 nLite 的整合包中使用它. 但是它所能做的是允许你编辑一些本不可能编辑的东西.
比如下面这个就是向 svcpack.inf 的 [setuphotfixestorun] 区段下添加一些东西:
代码:
rvmtemp\svcpack.inf|[setuphotfixestorun]|[setuphotfixestorun]<NEXT>filetoadd.exe<NEXT>|1
总的来说… 你应当首先指定 rvmtemp 文件夹中的 “rvmtemp\svcpack.inf” 文件, 因为这个svcpack.inf 是用于编辑的. RyanVM integrator 所能编辑的文件一般都得在 rvmtemp 文件夹中.

然后添加一个 “|” 做为分隔符.

接着输入你要在 rvmtemp\svcpack.inf 文件中查找的文本. (无论何时何地你所输入的 <NEXT> 都代表着跳到这个区段的下一行.)

然后是另一个 |

接着你输入想要替换的文件. 这就是为什么我要输入 [setuphotfixestorun]<NEXT>filetoadd.exe<NEXT>
它实际上是写入了:
[setuphotfixestorun]
filetoadd.exe

然后是另一个 |

最后应当输入你要改变多少个实例. 如果在这个文件中多次找到了这部分文本, 那么整合程序就会按照你输入的次数进行替换. 如果你在这里放置的是 0, 那么整合程序将会改变所有发现的实例.
代码:
[ExtraFileEdits]
;文件名|将被替换的文本|用于替换的文本|替换次数
; <NEXT> 代表换行.
;例如 COMPDATA\3com.txt|Microsoft|Siginet|2
rvmtemp\svcpack.inf|[setuphotfixestorun]|[setuphotfixestorun]<NEXT>filetoadd.exe<NEXT>|1
==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

* RyanVM Integrator v1.0 RC13 新添的定义*
[obsolete_files] 目前仅受 RyanVM Integrator 支持.

如果你发布了新版本的整合包, 并想删除 i386 目录中的某些旧版本文件, 那么就能用到这个定义了. 它会按照下面的列表删掉指定文件, 并且会把 dosnet.inf 和 txtsetup.sif 中的相关文件定义删掉.

第一步: 删掉 i386 文件夹中的相应文件.
第二步: 删掉 dosnet.inf 中的文件定义:
d1,yourfile.ext

第三步: 删掉 txtsetup.sif 中[SourceDisksFiles] 区段下的文件定义:
wmp10.cab =
代码:
[obsolete_files]
HashTab_Addons.inf
HashTab.dll
==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

* RyanVM Integrator v1.0 RC13 新添的定义*
[old_sysoc] 目前仅受 RyanVM Integrator 支持.

主要用于删除 Sysoc.inf 中 [Components] 区段下的条目.
如果你想删除 Sysoc.inf 中的以下条目:
WMP10Files=ocgen.dll,OcEntry,wmp10.inf,HIDE,7
那么就应当使用以下代码.
代码:
[old_sysoc]
WMP10Files
==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====

* RyanVM Integrator v1.0 RC13 新添的定义*
[removable_cats] 目前仅受 RyanVM Integrator 支持.

这里列出可被安全移除的 .Cat 安全编录, 这样你就能选择整合程序的 “Remove .cat Files” 的选项了.
代码:
[removable_cats]
KB873339.ca_
KB887472.ca_
KB887710.ca_
KB887742.ca_

Tags:
转载请遵循 "署名-非商业用途" 的创作共用协议, 引用请附上文章原始地址
如喜欢这篇文章或者本站,建议您通过RSS订阅, 以及时获取更新内容!

«

»

评论暂缺

  • (Required)
  • (Required, will not be published)