Txtsetup.sif 是一个安装信息文件 (sif), 主要用于 Windows 的文本安装模式(就如其名). 而且, 它还可能会被其它的一些东西使用, 例如, Windows PE 启动时也会用到它 (Windows PE 用到了文本安装模式的末尾和 GUI 安装模式的开始部分). 文本模式完成后, 这个文件就没什么用了; 它不会被复制到 Windows 安装文件中 (GUI 安装模式用到的安装文件). 因为 Windows 不会用到它, 所以, 像是系统文件保护 (SFC) 这样的功能就不会影响到它. 它也没有数字签名, 因此你可以随意修改它而不会出现问题.
你可以利用 txtsetup.sif 向你的安装文件中添加第三方驱动, 修改安装Windows 的最小系统需求, 添加或删除注册表预设, 以及更多.
制作自己的安装光盘,这个文件就必须仔细研究一下,有用的地方不少
txtsetup.sif是制作安装光盘中极为重要的一个文件
里面记录了安装文件所在位置以及安装时文件拷贝的目标文件夹
txtsetup.sif的实际作用其实就是把指定的文件按要求拷贝到预设好的位置上
最可能用到的是以下几段:
[SourceDisksNames.x86]——用代码表示源文件的位置
[WinntDirectories]——用代码表示文件拷贝的目标文件夹
其根目录为%WinDir%,即安装指定的Windows文件夹
[SourceDisksFiles]——根据前面设定的代码表示文件拷贝的具体细节
下面3段为集成SATA、SCSI等驱动时所用
这个问题我在签名的集成SATA驱动的分支里面已经简单介绍了
[HardwareIdsDatabase]——硬件标识
[SCSI.Load]——SCSI驱动加载
[SCSI]——SCSI设备说明
[HiveInfs.Fresh] ——全新安装时根据指定的inf文件中的字段添加注册表信息
[HiveInfs.Upgrade]——升级安装时根据指定的inf文件中的字段添加注册表信息Txtsetup.sif 是一个安装信息文件 (sif), 主要用于 Windows 的文本安装模式
(就如其名). 而且, 它还可能会被其它的一些东西使用, 例如:
Windows PE 启动时也会用到它
(Windows PE 用到了文本安装模式的末尾和 GUI 安装模式的开始部分).
文本模式完成后, 这个文件就没什么用了; 它不会被复制到indows 安装文件中
(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 或 100
1 的定义来自于[SourceDisksNames.x86].
表示源文件为原版本且在光盘上i386文件夹
100表示源文件为SP补丁中较新版本的文件
1 表示它是未打补丁的初始文件, 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表示将目标文件改名为此
因此,这一行表明,不管是升级还是全新安装
都将源文件defragP.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
在这里下载 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$.~LSi386 中. 接着重启之后, 就会进入文本安装模式了, 而 txtsetup.sif 会把 C:$WIN_NT$.~LSi386 中的tweakui.exe 复制到 C:WindowsSystem32 中.
当整个安装进程完成之后, 若要运行 tweakui.exe, 那么只需转到 “开始”>”运行”>输入: tweakui, 点击确定就行了.
那为什么不在新添加的行中使用 _x呢?. 这是因为 tweakui.exe 不是 XP 的初始安装文件, XP 不需要检查它
(因为它未在 layout.inf 中进行定义).
利用 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.inf 中的定义把文件复制到C:$WIN_NT$.~LS 中. 然后,安装程序才会利用 Txtsetup.sif 把这个文件夹中的文件复制到对应的文件夹中. 因为只能利用 txtsetup.sif 把文件复制到 %windir% 文件夹下, 所以它的用途有限.
主要是用它来添加注册表预设和驱动
用 txtsetup.sif 来添加自定义的注册表条目
每次文本安装模式即将结束时, 安装程序就会利用txtsetup.sif 中的某些定义来创建注册表(文件复制结束时). 如果是全新安装的话, 安装程序就会按照 txtsetup.sif 的 [HiveInfs.Fresh] 区段中的定义来生成注册表. 你可以使用这个区段来添加你自己的注册表条目.
如果你已经把你的注册表设置保存为一个 .reg 文件的话,
那么你需要用.inf 文件导入这些设置.
将你的 .reg 文件重命名为 settings.reg 并将其置入i386 文件夹中.
将以下内容复制到一个新文件中并另存为settings.inf,然后将其保存到 i386 文件夹中.
[Version]
Signature = "$Windows NT$"
DriverVer=07/01/2001,5.1.2600.1106[update]
HKLM,"Software\Microsoft\Windows\CurrentVersion\RunOnce",
"MyUpdate",0x00020002,"%systemroot%\regedit.exe /s %systemroot%\system32\settings.reg"
添加 inf 条目
如果你已经有了一个 .inf 文件, 那么将其复制到 i386 文件夹中并将其重命名为settings.inf. 并确保这个 .inf 文件中有个名为 [update] 区段
只有这个区段下的设置会被使用!
你可以用 makecab.exe 把 settings.inf 压缩成 settings.in_, 但这只是可选的.
添加方法
打开 txtsetup.sif 并转到 [HiveInfs.Fresh], 按以下添加一行.
[HiveInfs.Fresh]
AddReg = hivedef.inf,AddReg
AddReg = hivesys.inf,AddReg
AddReg = hivesft.inf,AddReg
AddReg = hivecls.inf,AddReg
AddReg = hiveusd.inf,AddReg
AddReg = dmreg.inf,DM.AddReg
AddReg = settings.inf,update
再把以下 2 行添加到 txtsetup.sif 的 [SourceDisksFiles] 区段下.
如果你要使用一个 .reg 文件, 那么就要添加第二行, 不需要的只需添加第一行.
settings.inf =1,,,,,,_x,3,,3
settings.reg =100,,,,,,,2,0,0
把以下 2 行添加到dosnet.inf 的 [Files] 区段下. 如果你要使用一个 .reg 文件,
那么就要添加第二行, 不需要的只需添加第一行.
d1,settings.inf
d1,settings.reg
现在开始安装 XP, 当文本安装模式结束时就会导入你的注册表设置了.
你不需要使用无人值守安装方式.
疑难解答
文本模式安装程序所用的解释引擎不同于 SetupAPI.
因此, 处理相关的 inf 文件时要小心点以免设置无效.
当你编辑用于文本安装模式下用的 inf 文件时, 应当遵循以下方针:
1 - 避免 strings. 就是那些在 [strings] 下定义的字符串. 我听说在文本安装模式下无法使用字符串.
2 – 总是使用引号. 请你尽可能地用引号括住你的设置.
3 – 避免缩写. 在一般的 inf 中你可以使用 0x1 或 0x1002. 而在文本安装模式下, 以上值不起作用.
4 - 避免不必要的空格. 这个可能不是强制性的, 但是我觉得你最好这么做.
5 - 无法确定能用文本安装模式 .inf 做什么事情? 那么请参考 hivesys.inf, hivesft.inf.
以下是 5 个不同的 .inf 设置. 粗体的那个是正确的, 而其它的则无法工作且文本模式安装程序会报错.
1 - HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Hotfix\KB826939","Installed",0x00010001,1
2 - HKLM,SOFTWARE\Microsoft\Windows NT\CurrentVersion\Hotfix\KB826939,"Installed",0x00010001,1
3 - HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Hotfix\KB826939","Installed",0x10001,1
4 - HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Hotfix\KB826939","Installed"",0x00010001,1
5 - HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Hotfix\KB826939",Installed,0x00010001,1
1 –此行没有任何错误. 注意第二段和第三段都用引号括住了.你必须用引号将其括住!
2 –此行无法工作, 因为第二段没用引号括住.
3 - 此行无法工作, 因为 0x00010001 被搞成了0x10001.
在正常情况下没有问题, 但是在文本安装模式下,
安装程序就无法理解它的含义了. 有所怀疑的话, 请不要使用任何缩写.
4 - 此行无法工作, 因为 Installed 后有两个引号.
5 - 此行无法工作, 因为 Installed 没有被引号括住!
对于简体中文版 Windows XP SP2 中 TXTSETUP.sif 的注释--tingpu
[Version]
signature="$Windows NT$"
ClassGUID={00000000-0000-0000-0000-000000000000}
;[SourceDisksNames] 中代码的用途, 请参考 "什么是 txtsetup.sif"
;源光盘名称, 通用
[SourceDisksNames]
;_x = "Windows XP Professional CD-ROM","win51ip",,""
_x = %cdname%,%cdtagfile%,,""
;..........................................
_6 = %cdname%,%cdtagfile%,,""
1_ = %cdname%,%cdtagfile%,,""
;..........................................
6_ = %cdname%,%cdtagfile%,,""
;x86 平台的源光盘名称
[SourceDisksNames.x86]
;代表了在必须有 "WIN51IP" 的光盘上的 i386 目录中
;而这个 WIN51IP 则说明了这个光盘是 XP 的初始盘, 那么使用了 1 的文件即是 XP 初始文件, 从未升
级.
;1 = "Windows XP Professional CD-ROM","win51ip",,i386
1 = %cdname%,%cdtagfilei%,,i386
;代表了在必须有 "win51ip.sp2" 的光盘上的 cmpnents abletpci386 目录中
;2 = "Windows XP Professional Service Pack 2 CD","win51ip.sp2",,cmpnents abletpci386
2 = "%cd2name%","%cd2tagfilei%",,cmpnents abletpci386
3 = "%cd2name%","%cd2tagfilei%",,cmpnentsmediactri386
4 = "%cd2name%","%cd2tagfilei%",,cmpnents etfxi386
;代表了在必须有 "win51ip.sp2" 的光盘上的 i386 目录中
;而这个 WIN51IP 则说明了这个光盘是 XP SP2 安装盘, 那么使用了 100 的文件即是 XP SP2 升级后的
文件.
;100 = "Windows XP Professional Service Pack 2 CD","win51ip.sp2",,i386,1
100 = %spcdname%,%spcdtagfilei%,,i386,1
;同张光盘上可能同时存在 WIN51, WIN51IP, WIN51IP.SP2, 说明光盘上同时存在 XP 初始文件和 SP2 文
件
;以下定义类似, 大家可以参考上面的说明
_1 = %bootname1%,"%boottagfile1%",,""
;..........................................
6_ = %bootname6%,"%boottagfile6%",,""
7 = %cdname%,%cdtagfilei%,,i386lang
107 = %spcdname%,%spcdtagfilei%,,i386lang,1
;.............................................
15 = %cdname%,%cdtagfilei%,,i386
;amd64 平台的源光盘名称
[SourceDisksNames.amd64]
1 = %cdname%,%cdtagfilem%,,amd64
;................................................
56 = %cdname%,%cdtagfilem%,,i386lang
;ia64 平台的源光盘名称
[SourceDisksNames.ia64]
1 = %cdname%,%cdtagfilem%,,ia64
7 = %cdname%,%cdtagfilem%,,ia64lang
55 = %cdname%,%cdtagfilem%,,i386
56 = %cdname%,%cdtagfilem%,,i386lang
;目录代码定义
;如何用到这些代码, 请参考 "什么是 txtsetup.sif"
;你可以手动在这里添加自己的想要的路径 (注意, 不要重名), 这样, 安装时会自动生成. 比如:
;1985 = "system32IMEunispim"
;注意, 这里的目录都是相对于系统的安装目录的 (一般为系统盘的 windows 目录), 你只能自定义相对于安装目录的子目录. 至于说, "Program Files" 等目录, 那都是后来另外生成的, 与此无关.
[WinntDirectories]
1 = "\"
2 = system32
;...............................................
240 = ehome
;这里定义了文本安装模式下是如何复制某些文件的
;这是第一段 [SourceDisksFiles], 这段是通用定义, 不管是哪种语言, 哪种平台, 都要执行这一段..
;具体介绍, 请参考 "什么是 txtsetup.sif"
[SourceDisksFiles]
bootvid.dll = 1,,,,,,3_,2,0,0,,1,2
;............................................................
mediactr.cab = 3,,,,,,_x,,3,3
;这里定义了 ia64 平台的文本安装模式下特别需要复制的某些文件
[SourceDisksFiles.ia64]
agp460.sys = 100,,,,,,,4,2
;..........................................
wind_w64.chq = 1,,,,,,,21,0,0,windows.chq
;这里定义了 amd64 平台的文本安装模式下特别需要复制的某些文件
[SourceDisksFiles.amd64]
ntdetect.com = 100,,,,,,_1,1,3,,,1,1
ntldr = 100,,,,,,_x,1,3
;这里定义了 x86 平台的文本安装模式下特别需要复制的某些文件
;大家的平常使用的平台基本都是 x86 的, 不知 ia64 和 amd64 还算不算 x86 平台的
[SourceDisksFiles.x86]
hal.dll = 100,,,,,,3_,2,3,,,1,2
;..............................................
winshfhc.dll = 100,,,,,,,2,0,0
;这里定义了文本安装模式下是如何复制某些文件的
;具体介绍, 请参考 "什么是 txtsetup.sif"
;这个第二段, 专门定义了一些键盘布局文件.
[SourceDisksFiles]
kbdycl.dll = 1,,,,,,_x,2,1
kbdycc.dll = 1,,,,,,_x,2,1
kbdvntc.dll = 1,,,,,,_x,2,1
kbduzb.dll = 1,,,,,,_x,2,1
kbdsl.dll = 1,,,,,,_x,2,1
kbdsl1.dll = 1,,,,,,_x,2,1
kbdro.dll = 1,,,,,,_x,2,1
kbdru.dll = 1,,,,,,_x,2,1
kbdru1.dll = 1,,,,,,_x,2,1
kbdtat.dll = 1,,,,,,_x,2,1
kbdtuf.dll = 1,,,,,,_x,2,1
kbdtuq.dll = 1,,,,,,_x,2,1
;目录代码定义
;如何用到这些代码, 请参考 "什么是 txtsetup.sif"
;这是第二段定义, 看样子, 是专门用于添加简体中文微软拼音支持的. 这样让你在安装期间即可使用微
软拼音. 而像是英文版, 它这应该是无法在安装期间使用微软拼音的.
[WinntDirectories]
204 = System32IMEPINTLGNT
205 = IMECHSIMEAPPLETS
220 = IMESHARED
221 = IMESHAREDRES
;这里定义了文本安装模式下是如何复制某些文件的
;具体介绍, 请参考 "什么是 txtsetup.sif"
;这个第三段, 添加了对于简体中文的额外支持.
[SourceDisksFiles]
sprs0804.dll = 100,,,,,,,2,0,0,xpsp1res.dll,1,2
sprt0804.dll = 100,,,,,,,2,0,0,xpsp2res.dll,1,2
;......................................................
femgrate.exe = 100,,,,,,,2,0,0
femgrate.inf = 1,,,,,,,20,0,0
;这里定义了文本安装模式下是如何复制某些文件的
;具体介绍, 请参考 "什么是 txtsetup.sif"
;这个第四段, 只是定义了要复制一些代码页和字体.
[SourceDisksFiles]
c_10004.nls = 1,,,,,,,,3,3
c_10005.nls = 1,,,,,,,,3,3
c_720.nls = 1,,,,,,,2,1,3
c_862.nls = 1,,,,,,,,3,3
vga737.fon = 1,,,,,,,22,0
vga775.fon = 1,,,,,,,22,0
vga852.fon = 1,,,,,,,22,0
vga855.fon = 1,,,,,,,22,0
vga857.fon = 1,,,,,,,22,0
vga866.fon = 1,,,,,,,22,0
vga869.fon = 1,,,,,,,22,0
vgaf1257.fon = 1,,,,,,,22,0
;字符串定义, 比如, %MyPicturesScreenSaver% 就是 "图片收藏屏幕保护程序.scr" 的意思, 主要用来
帮助记忆, 或是能让你轻松实现本地化
[Strings]
MyPicturesScreenSaver = "图片收藏屏幕保护程序.scr"
;.........................................
cd2tagfilei = "win51ip2"
;默认安装数据
[SetupData]
;源安装文件相对位置
SetupSourcePath = "\"
;5.1 就是 XP 的意思
MajorVersion = 5
MinorVersion = 1
;默认安装路径
DefaultPath=WINDOWS
;记载系统时的某些选项, 可参考 boot.ini
OsLoadOptions = "/fastdetect /noguiboot /nodebug"
;强制检查 Scsi
ForceScsi = 1
;强制检查磁盘类的软件
ForceDiskClass = 1
;强制检查光驱
ForceCDRom = 1
;目录结构
Architecture = i386
;驱动文件所在位置
DriverCabName=driver.cab,sp2.cab
;产品类型?
ProductType = 0
;加载时显示的标识, 在 [Strings] 定义中, 应该可以自己修改, 不过最好只用英文
LoadIdentifier = %wks_id%
LoadIdentifierCancel = %cancel_id%
LoadIdentifierWin9x = %9x_id%
BaseVideoLoadId = %wks_id_vga%
;所需最低的内存为 64M
RequiredMemory = 67108864
;页面文件大小, 也就是虚拟内存
Pagefile = 115,250 |