一些关于 Txtsetup.sif 的说明
什么是 Txtsetup.sif?
Txtsetup.sif 是一个安装信息文件 (sif), 主要用于 Windows 的文本安装模式(就如其名). 而且, 它还可能会被其它的一些东西使用, 例如, Windows PE 启动时也会用到它 (Windows PE 用到了文本安装模式的末尾和 GUI 安装模式的开始部分). 文本模式完成后, 这个文件就没什么用了; 它不会被复制到 Windows 安装文件中 (GUI 安装模式用到的安装文件). 因为 Windows 不会用到它, 所以, 像是系统文件保护 (SFC) 这样的功能就不会影响到它. 它也没有数字签名, 因此你可以随意修改它而不会出现问题.
你可以利用 txtsetup.sif 向你的安装文件中添加第三方驱动, 修改安装Windows 的最小系统需求, 添加或删除注册表预设, 以及更多.
利用 Txtsetup.sif 添加或删除文件.
若想把 txtsetup.sif 中的某行移除掉, 那么应该在此行前添加一个分号(或是把这行整个的删掉. 通常, 把 txtsetup.sif 中的某行删掉之后, 那么还需要把 dosnet.inf 中的对应行删掉.
如果你想添加一行, 那就比较复杂了. 下面是txtsetup.sif 的某个示例行, 我会按照我的理解进行.
locsecw.chm = 1,,,,,,,21,0,0,localsec.chm
locsecw.chm 是 Windows 安装文件中的某个文件.
1 代表着它是个初始 (RTM) XP 文件. 1 的定义来自于[SourceDisksNames.x86]. 通常你会看到 1 或 100, 1 表示它是未打补丁的初始文件, 100 代表它是个SPx 文件 (SP1, SP2..SPx).
21 代表着它的复制目的地, 其相对于 %windir% 文件夹. 在这里, 21 是让安装程序把 locsecw.chm 复制到 %windir%\help\. 具体哪些值代表哪些目录可以在[WinntDirectories] 中找到. 一般情况下, [WinntDirectories] 中定义的目录都是相对于 %windir% 文件夹的子目录, 这就意味着你把文件添加到txtsetup.sif 中, 那么它就会被复制到 %windir% 文件夹中 (可能在其子文件夹中).
我无法确定这两个 0 的意义.
就如你在示例中所看到的一样, 可以在行的末尾重命名要复制的文件. 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 并没有告诉安装程序应当从哪里获取安装文件. 它唯一的功能就是把按照正确的文件名把文件复制到正确的目录中. 从硬盘安装时, 安装程序会先利用 dosnet.inf 中的定义把文件复制到C:\$WIN_NT$.~LS 中. 然后, 安装程序才会利用 Txtsetup.sif 把这个文件夹中的文件复制到对应的文件夹中.
因为只能利用 txtsetup.sif 把文件复制到 %windir% 文件夹下, 所以它的用途有限. 主要是用它来添加注册表预设 (%windir%\system32\config) 和驱动 (%windir%\system32\config).
稍后我会介绍如何把第三方驱动集成到 XP 安装文件中. 在我的 “Using txtsetup.sif to add registry settings” 中, 我介绍了如何利用txtsetup.sif 添加自定义的注册表预设文件 (.inf 文件).
举例说明:
比如说, 你想把 tweakui 集成到 Windows 安装文件中, 但是你不想使用无人值守的方式. 那么利用 txtsetup.sif 可以很轻松地做到这点.
第一步: 下载 Tweak UI
在这里下载 TweakUI. 下载之后, 用 WinRAR 把 tweakui.exe 提取出来, 或是先安装这个程序再把windows\system32 中的 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$.~LS\i386 中. 接着重启之后, 就会进入文本安装模式了, 而 txtsetup.sif 会把 C:\$WIN_NT$.~LS\i386 中的tweakui.exe 复制到 C:\Windows\System32 中. 当整个安装进程完成之后, 若要运行 tweakui.exe, 那么只需转到 “开始”>”运行”>输入: tweakui, 点击确定就行了.
你可能想知道我为什么不在新添加的行中使用 _x. 这是因为 tweakui.exe 不是 XP 的初始安装文件, XP 不需要检查它 (因为它未在 layout.inf 中进行定义).
你也可以用这个方法把 msconfig.exe 集成到 Win2000 的安装文件中. 只需用 msconfig.exe 替换掉tweakui.exe, 其它的都一样.
若想了解更多信息, 请查看 MSFN - Problem installing PowerToys from svcpack
更新 (2/10/04)
raskren 提交了一些关于txtsetup.sif 的有用信息, 这是他从一本 Windows 2000 的书中了解到的. 我不想重新编写这个文档, 因此我只把 raskren 提供的新信息添加到这里. 初始帖子在这里, MSFN - Switches in TXTSETUP.SIF
以下行说明了[SourceDisksFiles] 区段中每行的语法:
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 还是要全新安装, 这个文件都会被复制到目的文件夹中..
摘取自:
Windows® 2000 Server Professional Reference
(Windows® 2000 Server 专业参考)
作者: Karanjit S. Siyan Ph.D.