社区应用 最新帖子 精华区 社区服务 会员列表 统计排行
  • 3203阅读
  • 1回复

[分享]Txtsetup.sif与DOSNET.inf语法

楼层直达
级别: 管理员
发帖
27814
飞翔币
1567
威望
888
飞扬币
129967
信誉值
0

Txtsetup.sif 是一个安装信息文件(sif),主要用于 Windows 的文本安装模式(就如其名)。
而且,它还可能会被其它的一些东西使用例如,Windows PE 启动时也会用到它
(Windows PE 用到了文本安装模式的末尾和 GUI 安装模式的开始部分)。
文本模式完成后,这个文件就没什么用了;它不会被复制到 Windows 安装文件中
(GUI 安装模式用到的安装文件)。
因为 Windows 不会用到它,所以,像是系统文件保护(SFC)这样的功能就不会影响到它。
它也没有数字签名,因此你可以随意修改它而不会出现问题。
可以利用 txtsetup.sif 向安装文件中添加第三方驱动,修改安装Windows 的最小系统需求,添加或删除注册表预设,以及更多。
制作自己的安装光盘,这个文件就必须仔细研究一下,有用的地方不少。
txtsetup.sif是制作安装光盘中极为重要的一个文件,里面记录了安装文件所在位置以及安装时文件拷贝的目标文件夹,实际作用其实就是把指定的文件按要求拷贝到预设好的位置上最可能用到的是以下几段:
[SourceDisksNames.x86]——用代码表示源文件的位置
[WinntDirectories] ——用代码表示文件拷贝的目标文件夹,其根目录为 %WinDir%,
即安装指定的Windows文件夹
[SourceDisksFiles] ——根据前面设定的代码表示文件拷贝的具体细节
首先要看的是[SourceDisksNames.x86]段
[SourceDisksNames.x86]
1 = %cdname%,%cdtagfilei%,,i386
2 = "%cd2name%","%cd2tagfilei%",,cmpnentstabletpci386
3 = "%cd2name%","%cd2tagfilei%",,cmpnentsmediactri386
4 = "%cd2name%","%cd2tagfilei%",,cmpnentsnetfxi386
……
这里规定了复制文件时的源位置,例如1代表光盘根目录下的i386文件夹。
其次我们要注意的是“[WinntDirectories]”段
[WinntDirectories]
1 = ""
2 = system32
3 = system32config
4 = system32drivers
5 = system
7 = system32ras
9 = system32spool
10 = system32spooldrivers
11 = system32spooldriversw32x863
12 = system32spoolprtprocs
13 = system32spoolprtprocsw32x86
14 = system32wins
15 = system32dhcp
16 = repair
17 = system32driversetc
18 = system32spooldriversw32x86
19 = system32driversdisdn
20 = inf
21 = Help
22 = Fonts
23 = Config
24 = msagentintl
25 = Cursors
26 = Media
27 = java
28 = javaclasses
29 = javatrustlib
30 = system32ShellExt
31 = Web
32 = system32Setup
33 = Webprinters
34 = system32spooldriverscolor
35 = system32wbem
36 = system32wbemRepository
37 = addins
38 = "Connection Wizard"
39 = "Driver Cachei386"
40 = security
41 = securitytemplates
42 = system32npp
43 = system32ias
44 = system32dllcache
45 = Temp
46 = Webprintersimages
47 = system32export
48 = system32wbemmofgood
49 = system32wbemmofbad
50 = twain_32
51 = msappsmsinfo
52 = msagent
53 = msagentchars
54 = securitylogs
55 = system32icsxml
57 = system32mui
58 = %MUI_PRIMARY_LANG_ID_DIR%
59 = system32muidispspec
60 = AppPatch
61 = Debug
62 = DebugUserMode
63 = system32oobe
67 = HelpTours
68 = ResourcesThemesLuna
69 = ResourcesThemesLunaShellNormalColor
70 = system32oobehtmlispsgnup
71 = system32oobehtmlmouse
72 = system32oobehtmloemcust
73 = system32oobehtmloemhw
74 = system32oobehtmloemreg
75 = system32oobeimages
76 = system32oobesetup
77 = system32oobesample
78 = ResourcesThemesLunaShellMetallic
79 = ResourcesThemesLunaShellHomestead
91 = HelpToursmmTour
92 = HelpTourshtmlTour
93 = ProvisioningSchemas
100 = system321025
101 = system321028
102 = system321031
103 = system321033
104 = system321037
105 = system321041
106 = system321042
107 = system321054
108 = system322052
109 = system323076
110 = system32wbemxml
111 = system32usmt
112 = system32inetsrv
123 = mui
124 = WinSxS
125 = WinSxSManifests
126 = WinSxSInstallTemp
127 = ime
129 = ResourcesThemes
130 = ime
132 = imeimejp
133 = System32IMEPINTLGNT
134 = System32IMECINTLGNT
135 = System32IMETINTLGNT
136 = IMECHTIMEApplets
137 = imeimejp98
138 = imeimejpapplets
139 = pchealthhelpctrbinaries
180 = system323com_dmi
181 = PeerNet
239 = system32wbemLogs
240 = ehome
241 = "Network Diagnostic"
242 = L2Schemas
这里规定了复制文件时的目标位置,默认根目录是Windows文件夹,1代表Windows文件夹根目录,2代表WindowsSystem32文件夹。
最后要看的是[SourceDisksFiles]段,这一段控制我们从源位置读取什么文件复制到什么位置。
例如我们想集成OEM信息和图片,这就需要把oeminfo.ini和oemlogo.bmp复制到WindowsSystem32文件夹下,我们可以在[SourceDisksFiles]段下添加
oeminfo.ini = 1,,,,,,,2,0,0
oemlogo.bmp = 1,,,,,,,2,0,0
oeminfo.ini和oemlogo.bmp代表我们要复制的文件的文件名。
1这个位置是用来填写源文件位置,即[SourceDisksNames.x86]段中规定好的位置,以上两行中的源位置都是1,那么系统在复制文件时就会去i386根目录下去寻找这个文件。
1和2之间的“,”,其实每个“,”间都有相应参数,不过这些参数我们用不上,所以就不用写了。
2这个位置用来填写目标文件位置,也就是[WinntDirectories]段中预先规定的位置,例如2代表WindowsSystem32文件夹,那么系统在复制文件时就会把这个文件复制到WindowsSystem32文件夹下。
随后的两个“0”也是参数,不过意义不必了解,但是一定要写。
0后其实还可以跟一个参数,就是用来重命名文件的,例如:
Sky.jpg = 1,,,,,,,1981,0,0,Skyfree.jpg
这个就代表从i386文件夹中复制Sky.jpg文件到WindowsWebWallpaper下,并改名为Skyfree.jpg
下面3段为集成 SATA、SCSI 等驱动时所用:
[HardwareIdsDatabase] —— 硬件标识
[SCSI.Load] —— SCSI驱动加载
[SCSI] —— SCSI设备说明
[HiveInfs.Fresh] —— 全新安装时根据指定的 inf 文件中的字段添加注册表信息
[HiveInfs.Upgrade] —— 升级安装时根据指定的 inf 文件中的字段添加注册表信息
若想把 txtsetup.sif 中的某行移除掉,那么应该在此行前添加一个分号(;)或是把这行整个的删掉,
通常,把 txtsetup.sif 中的某行删掉之后,那么还需要把 dosnet.inf 中的对应行删掉。
如果想添加一行,那就比较复杂了,下面是 txtsetup.sif 的某个示例行:
locsecw.chm = 1,,,,,,,21,0,0,defrag.chm
locsecw.chm 是 Windows 安装文件中的某个文件。
1 代表着它是个初始(RTM)XP 文件,通常你会看到 1 或 100,1 的定义来自于[SourceDisksNames.x86],表示源文件为原版本且在光盘上i386文件夹,100表示源文件为SP补丁中较新版本的文件,100 代表它是个SPx 文件(SP1,SP2..SPx)
21 代表着它的复制目的地,其相对于 %windir% 文件夹,在这里,21 是让安装程序把 locsecw.chm 复制到 %windir%help。具体哪些值代表哪些目录可以在 [WinntDirectories] 中找到。一般情况下,[WinntDirectories] 中定义的目录都是相对于 %windir% 文件夹的子目录,这就意味着你把文件添加到 txtsetup.sif 中,那么它就会被复制到 %windir% 文件夹中(可能在其子文件夹中)。
第一个0为升级代码位,含义为:(升级时)
0-总拷贝文件
1-安装文件夹中有该文件才拷贝
2-安装文件夹中有该文件时不拷贝;
3-不拷贝文件
第二个0为新安装代码位,含义同上(全新安装时)另外据说此代码若不为0,其前面需多加2个逗号
defrag.chm表示将目标文件改名为此,因此,这一行表明,不管是升级还是全新安装都将源文件locsecw.chm拷贝到%WinDir%help文件夹下并改名为defrag.chm,就如在示例中所看到的一样,可以在行的末尾重命名要复制的文件。Microsoft 用它来区分 Windows XP Home 和 Pro 版。Home 的文件带有P, Pro 的文件带有 W。W 可能是代表着工作站(WorkStation) 的意思,P 可能是代表着个人版(Personal) 的意思,Windows XP Home 最初就叫做 Whistler Personal。
示例:
cmconW.chm = 1,,,,,,,21,0,0,cmconcepts.chm - xp pro txtsetup.sif
cmconP.chm = 1,,,,,,,21,0,0,cmconcepts.chm - xp home txtsetup.sif
就如所见的一样,XP Home 和 XP Pro 的文件并不相同,但是最后复制到系统中的文件名称都一样。
同时请注意,txtsetup.sif 支持长文件名。
现在来看看另一行:
autofmt.exe = 1,,,,,,_x,2,0,0,,1,2
“_x”代表着这个安装盘上的这个文件没有经过压缩,如果没有这个,那么安装程序会认为这个文件已被压缩过了。
这个对于保证安全性和可靠性很重要。每个 XP 文件都被列在了“layout.inf”中,包括这个文件的大小(按字节计算),很明显,一个文件的压缩前和压缩后的大小是不会相同的。
如果“txtsetup.sif”告诉安装程序“某个文件未被压缩”,那么安装程序就会在“layout.inf”中查找它的文件大小以确保这个文件未经修改或是损坏。
如果文件大小与“layout.inf”中记录的不同,那么 XP 安装程序就会报错并停止安装。
这个能够保证安装程序的安全性,以确定文件是否被修改过。
它还能验证文件是否已被损坏,如果文件已被损坏,那么稍后安装时就可能会出现问题。
如果以“_x”为关键字在“txtsetup.sif”进行搜索,那么就能找到所有未经压缩的 Windows 安装文件。
有个很重要的事情就是,txtsetup.sif 并没有告诉安装程序应当从哪里获取安装文件。它唯一的功能就是把按照正确的文件名把文件复制到正确的目录中。
举例说明:
比如说,把 tweakui 集成到 Windows 安装文件中,但是不想使用无人值守的方式。那么利用 txtsetup.sif 可以很轻松地做到这点。
第一步:下载 Tweak UI:下载后,用 WinRAR 把 tweakui.exe 提取出来,或是先安装这个程序再把windowssystem32 中的tweakui.exe 复制出来;
第二步:把 tweakui.exe 复制到 XP 安装文件所在的文件夹中,把 XP 安装盘上的文件复制到硬盘上,然后把 tweakui.exe 放到 i386 文件夹中;
第三步:修改 txtsetup.sif 和 dosnet.inf,把以下行添加到 dosnet.inf 中:
d1,tweakui.exe
把以下行添加到txtsetup.sif 中:
tweakui.exe = 1,,,,,,,2,0,0
现在运行安装程序,dosnet.inf 会把 tweakui.exe 复制到 C:$WIN_NT$.~LSi386 中,接着重启之后,就会进入文本安装模式了,而 txtsetup.sif 会把 C:$WIN_NT$.~LSi386 中的 tweakui.exe 复制到 C:WindowsSystem32 中,当整个安装进程完成之后,若要运行 tweakui.exe,那么只需转到 “开始”>”运行”>输入:tweakui,点击确定就行了。那为什么不在新添加的行中使用“_x”呢?这是因为 tweakui.exe 不是 XP 的初始安装文件,XP 不需要检查它(因为它未在 layout.inf 中进行定义).
filename_on_source=diskid,subdir,upgradecode,newinstallcode,spare,spare,newfilename
源文件名=磁盘号,子目录,升级代码,新建安装代码,备用,备用,新文件名


额外字段由逗号(,)隔开, 这是 Windows NT 指定的.
当从软盘上开始安装时就会用到 diskid 了. (或者是多张光盘?)
subdir 就是复制文件的目的文件夹. Subdir 代码是在 TXTSETUP.SIF 的 [WinntDirectories] 区段中进行定义的.
upgradecode 是个个位数, 用于决定是否要升级比较老版本的同名文件. 它可以决定是否要在文本安装模式下复制这个文件.
以下是用于决定文件复制的代码定义.
状态代码 – 复制操作
0 – 总是复制这个文件
1 - 只有当同名文件存在于安装目录中时, 才复制这个文件
2 - 只有当安装目录中没有同名文件时, 才复制这个文件
3 - 不要复制这个文件
newinstallcode 是个个位数, 当全新安装时就要用到这个. 它可以决定是否要在文本安装模式下复制这个文件. newinstallcode 为可选项; 如果没有包含这个代码, 则文件不会被复制 (代码 = 3).
newfilename 用于重命名要复制的文件. 以下举例说明.
autochk.exe = 100,,,,,,_x,2,0,0,,1,2
此行的定义是, AUTOCHK.EXE 这个文件是在安装光盘上, 没有压缩, 会被复制到 %WinDir%system32 文件夹中(可在[WinntDirectories] 中查到 2 的定义). “upgrade code” 和“new installation code” 都是 0, 这意味着不管原来是 Win2000 还是要全新安装, 这个文件都会被复制到目的文件夹中..
利用“Txtsetup.sif”和“xpinstall”集成安装打补丁
将补丁以及xpinstall等相关文件准备好,放在同一文件夹下,并配置好“xpinstall.xml”(用xpinstall来安装补丁比较美观)。用WinRAR将这些文件做成自解压压缩文件“xp_patch.exe”,并在自解压选项的模式中指定解包到临时文件夹和全部隐藏,以及指定“xpinstall”为解压后运行的程序,用“makecab”压缩该文件,并把文件拷贝到i386文件夹中
在 [SourceDisksFiles] 中添加:
xp_patch.exe = 1,,,,,,,1,0,0
在“winnt.sif”中的 [GuiRunOnce] 添加:
Command0="%WinDir%xp_patch.exe"
Dosnet
Dosnet中相应要修改的东西就简单的多。
先看[Directories]段,这段代表文件复制的源位置
[Directories]
d1 = I386
d2 = cmpnentstabletpcI386
再看[Files]段
[Files]
d1,2gmgsmt.sf2
d1,3cwmcru.sys
d1,3dfxvs2k.inf
d1,3dfxvs.dll
……
这段代表要从源位置去复制哪些文件。
如果在txtsetup.sif中添加了:
Sky.jpg = 1,,,,,,,1981,0,0,Skyfree.jpg
那么dosnet中要相应添加:
d1,Sky.jpg
这样即可。
;磁盘空间需求
[DiskSpaceRequirements]
FreeSysPartDiskSpace = 1024
UpgradeFreeSysPartDiskSpace = 1024
51WinDirSpace = 726788
351PFDocSpace = 0
40PFDocSpace = 1744
50PFDocSpace = 25336
51PFDocSpace = 25336
PFDocSpace = 81112
351WinDirSpace = 100000
40WinDirSpace = 173024
50WinDirSpace = 702144
TempDirSpace512= 535560192,13448704
TempDirSpace1K = 537122816,13496320
TempDirSpace2K = 540235776,13568000
TempDirSpace4K = 547213312,13787136
TempDirSpace8K = 562634752,14008320
TempDirSpace16K = 596869120,15024128
TempDirSpace32K = 669876224,17170432
TempDirSpace64K = 829161472,21561344
TempDirSpace128K = 1169555456,31719424
TempDirSpace256K = 1889533952,52953088
WinDirSpace512= 1288649
WinDirSpace1K = 1291273
WinDirSpace2K = 1296888
WinDirSpace4K = 1308112
WinDirSpace8K = 1331296
WinDirSpace16K = 1382368
WinDirSpace32K = 1482528
WinDirSpace64K = 1725952
WinDirSpace128K = 2270464
WinDirSpace256K = 3457536
 
级别: 光盘初级
发帖
657
飞翔币
142
威望
8
飞扬币
1785
信誉值
0
只看该作者 1 发表于: 2011-09-23
要花时间才能理解。