Chinaunix首页 | 论坛 | 博客
  • 博客访问: 186582
  • 博文数量: 40
  • 博客积分: 2576
  • 博客等级: 少校
  • 技术积分: 494
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-14 17:19
文章分类

全部博文(40)

文章存档

2011年(21)

2010年(19)

我的朋友

分类: WINDOWS

2011-03-16 16:49:47

Txtsetup.sif 是一个 安装信息文件(sif),主要用于 Windows 的文本安装模式(就如其名)。而且,它还可能会被其它的一些东西使用,例 如,Windows PE 启动时也会用到它(Windows PE 用到了文本安装模式的末尾和 GUI 安装模式的开始部分)。文本模式完成后,这个 文件就没什么用了;它不会被复制到 Windows 安装文件中(GUI 安装模式用到的安装文件)。因为 Windows 不会用到它,所以,像是系统 文件保护(SFC) 这样的功能就不会影响到它。它也没有数字签名,因此你可以随意修改它而不会出现问题。

    可以利用 txtsetup.sif 向安装文件中添加第三方驱动,修改安装Windows 的最小系统需求,添加或删除注册表预设,以及更多。

    制 作自己的安装光盘,这个文件就必须仔细研究一下,有用的地方不少。txtsetup.sif是制作安装光盘中极为重要的一个文件,里面记录了安装文件所在 位置以及安装时文件拷贝的目标文件夹,实际作用其实就是把指定的文件按要求拷贝到预设好的位置上最可能用到的是以下几段:

[SourceDisksNames.x86]——用代码表示源文件的位置
[WinntDirectories]——用代码表示文件拷贝的目标文件夹,其根目录为 %WinDir%,即安装指定的Windows文件夹
[SourceDisksFiles]——根据前面设定的代码表示文件拷贝的具体细节

    下面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 提取出来,或是先安装这个程序再把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: \Windows\System32 中,当整个安装进程完成之后,若要运行 tweakui.exe,那么只需转到 “开始”>”运行”> 输入:tweakui,点击确定就行了。那为什么不在新添加的行中使用“_x”呢?这是因为 tweakui.exe 不是 XP 的初始安装文 件,XP 不需要检查它(因为它未在 layout.inf 中进行定义)。
        你也可以用这个方法把 msconfig.exe 集成到 Win2000 的安装文件中. 只需用 msconfig.exe 替换掉tweakui.exe, 其它的都一样. 

以下行说明了[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 还是要全新安装, 这个文件都会被复制到目的文件夹中..


    利用“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 是正确的,而其它的则无法工作且文本模式安装程序会报错:

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 没有被引号括住。

阅读(1970) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~