目 录

前 言 ..............................................................................................................................................5 
第一章、基础...................................................................................................................................7 
1.1 基本 DOS 和批处理...........................................................................................................7 
1.2  基本 AU3 脚本使用........................................................................................................13 
1.2.1 AutoIt v3 的“Hello World !” ................................................................................13 
1.2.2 AutoIt v3 入门........................................................................................................14 
1.2.3  顺序结构、选择结构、循环结构入门...............................................................16 
1.2.4  常用的 AU3 函数.................................................................................................18 
1.2.5 AU3 中的宏 ...........................................................................................................27 
1.3  系统补丁获取方法..........................................................................................................28 
1.4  驱动提取的基本方法......................................................................................................29 
1.5  注册表优化基础..............................................................................................................35 
1.6  服务优化基础..................................................................................................................46 
1.6.1  系统服务的基本概念...........................................................................................46 
1.6.2  系统服务优化指南...............................................................................................47 
1.6.3 系统服务优化的自动化实现................................................................................52 
1.7  软件自动安装的实现......................................................................................................57 
1.7.1  静默安装参数实现软件自动安装.......................................................................57 
1.7.2  简单的 AU3 脚本实现软件自动安装 .................................................................58 
1.8 Windows 环境变量列表...................................................................................................64 
1.9  总结..................................................................................................................................65 
第二章、无人值守安装 XP 的定制..............................................................................................67 
2.1  光盘镜像与 UltraISO ......................................................................................................67 
2.1.1  使用 UltraISO 将光盘变成光盘 ISO 镜像..........................................................68 
2.1.2 提取光盘镜像内的文件........................................................................................69 
2.1.3 使用 UltraISO 来提取光盘的引导文件 ...............................................................70 
2.1.4 使用 UltraISO 来生成可启动光盘 .......................................................................71 
2.2  无人值守应答文件 Winnt.sif 详解 .................................................................................73 
2.3  驱动的自动安装..............................................................................................................80 
2.4  补丁的集成......................................................................................................................81 
2.5  软件的自动安装..............................................................................................................84 
2.6  系统优化的导入..............................................................................................................85 
2.7 Windows Media Player 的集成 ........................................................................................86 
2.8  总结..................................................................................................................................91 
第三章、使用 nLite 定制 XP ........................................................................................................93 
3.1  初识 nLite ........................................................................................................................93 
3.2  使用 nLite 集成 Service Pack、系统补丁、整合包......................................................96 
3.2.1  集成 Service Pack .................................................................................................96 
3.2.2 集成系统补丁........................................................................................................96 
3.3  使用 nLite 集成驱动 .......................................................................................................98 
3.4  系统组件的精简............................................................................................................100

3.4.1  操作系统选项.....................................................................................................102 
3.4.2  多媒体.................................................................................................................104 
3.4.3  服务.....................................................................................................................105 
3.4.4  键盘布局.............................................................................................................107 
3.4.5  驱动程序.............................................................................................................108 
3.4.6  网络.....................................................................................................................108 
3.4.7  应用程序.............................................................................................................110 
3.4.8 硬件支持..............................................................................................................110 
3.4.9  语言..................................................................................................................... 111 
3.5  使用 nLite 自动生成无人值守应答文件 ..................................................................... 111 
3.6  使用 nLite 完成关于系统的调整 .................................................................................118 
3.7  使用 nLite 完成常用注册表项与服务的优化调整......................................................119 
3.8 nLite 后期制作 ...............................................................................................................121 
3.8.1  额外保留.............................................................................................................122 
3.8.2  额外删除.............................................................................................................122 
3.8.3 最少文件实现 DOS 下或 Windows 下安装系统...............................................124 
3.8.4 nLite 字体修正 ....................................................................................................125 
3.8.5  处理输入法.........................................................................................................125 
3.8.6 DOS 和 Windows 下安装造成东亚语言包不能自动安装问题不完全解决 ....127 
3.8.7  破解 Winlogon.exe .............................................................................................127 
3.8.8 luna 主题修正......................................................................................................128 
3.8.9 USB 插入新硬件驱动安装问题不完全解决 .....................................................128 
3.8.10  精简掉搜索助手但保留搜索功能的方法.......................................................128 
3.9  简单整合包的制作........................................................................................................129 
3.10  总结..............................................................................................................................130 
第四章、使用 DPS 向 XP 集成驱动 ..........................................................................................131 
4.1  初识 DPS .......................................................................................................................131 
4.2  使用 DPS 集成驱动的流程 ..........................................................................................131 
4.3  总结................................................................................................................................143 
第五章、XP 个性化定制 ............................................................................................................144 
5.1  文件复制控制——Txtsetup.sif 与 Dosnet.inf 的简单使用 .........................................144 
5.1.1 Txtsetup................................................................................................................144 
5.1.2 Dosnet ..................................................................................................................146 
5.2 XP 安装过程背景个性化...............................................................................................146 
5.3  滚动条的个性化............................................................................................................149 
5.4  系统属性个性化............................................................................................................151 
5.4.1 OemLogo.bmp 与 OemInfo.ini ............................................................................152 
5.4.2 sysdm.cpl..............................................................................................................153 
5.5  开始菜单与 IE 浏览器中的 OEM 信息加载 ...............................................................156 
5.5.1  开始菜单的 OEM 信息......................................................................................156 
5.5.2 IE 浏览器的 OEM 信息 ......................................................................................157 
5.6  其他个性化....................................................................................................................158 
5.7  总结................................................................................................................................158 
第六章、XP 安装过程的控制.....................................................................................................160

6.1 XP 安装过程中可用的外部程序调用接口...................................................................160 
6.2 XP 系统安装前调用接口的实现...................................................................................163 
6.2.1 DPS 方式 2 带给我们的启示..............................................................................163 
6.2.2 DPS 的 OEM 文件夹...........................................................................................163 
6.2.3 PreSetup.cmd 解析 ..............................................................................................164 
6.2.4 PreSetup.cmd 为我所用 ......................................................................................166 
6.3  总结................................................................................................................................168 
第七章、XP 多合一光盘制作.....................................................................................................169 
7.1 EasyBoot 的基本使用 ....................................................................................................169 
7.1.1  “文件”选项卡.................................................................................................171 
7.1.2  “屏幕布局”选项卡.........................................................................................173 
7.1.3  “文本显示”选项卡.........................................................................................174 
7.2  多合一光盘的制作........................................................................................................176 
7.2.1 启动软盘组..........................................................................................................176 
7.2.2  手动生成启动软盘组.........................................................................................176 
7.2.3 自动生成启动软盘组..........................................................................................181 
7.2.4  多合一的完成.....................................................................................................182 
7.3  将 DOS 工具和 Windows PE 集成到多合一光盘 .......................................................183 
7.4  总结................................................................................................................................183 
第八章、XP 的封装与部署.........................................................................................................185 
8.1 基础的系统封装与部署.................................................................................................185 
8.2  突破限制的系统封装与部署........................................................................................187 
8.2.1  三个限制.............................................................................................................187 
8.2.2  突破 HAL 限制...................................................................................................188 
8.2.3  突破 SRS 限制....................................................................................................189 
8.2.4  对系统驱动程序的处理.....................................................................................194 
8.3  总结................................................................................................................................195 
第九章、XP 封装与部署的自动化实现.....................................................................................196 
9.1  封装过程自动化控制....................................................................................................196 
9.1.1 DevCon.exe..........................................................................................................196 
9.1.2  自动更改计算机模式.........................................................................................197 
9.1.3  自动更改 IDE 控制器 ........................................................................................198 
9.1.4 自动卸载驱动......................................................................................................202 
9.1.5 自动使系统进化为可自动判断 HAL.................................................................204 
9.1.6 自动运行 Sysprep.exe 封装系统 ........................................................................206 
9.1.7 自动导入 SRS 驱动和注册表.............................................................................207 
9.1.8  自动封装的最终实现.........................................................................................207 
9.2  部署过程自动化控制....................................................................................................208 
9.2.1  接管部署过程.....................................................................................................208 
9.2.2  第三方驱动的导入与自动安装.........................................................................210 
9.2.3  部署中程序调用控制.........................................................................................211 
9.3  自动化系统封装与部署常见问题和解答....................................................................211 
9.4  总结................................................................................................................................218 
第十章、XP 封装与部署实例.....................................................................................................220

10.1  母盘..............................................................................................................................220 
10.2  系统补丁......................................................................................................................222 
10.3  系统的设置修改..........................................................................................................222 
10.4  系统精简......................................................................................................................223 
10.5  软件安装......................................................................................................................224 
10.6  实现万能部署的必要修改..........................................................................................224 
10.7  系统封装......................................................................................................................224 
10.8  使用 Ghost 将系统备份为系统映像 ..........................................................................225 
10.9  从系统映像到系统恢复光盘......................................................................................226 
10.10  总结............................................................................................................................227

前 言
虽然 Windows Vista 已经开始逐步流行,但是不可否认的 Windows XP 依然是当前最流
行的操作系统。
安装 Windows XP 并不是一件难事,用心学一下几分钟就可以学会。虽然安装不是难事,
但却的的确确是一件麻烦事。且不说安装 XP 的过程中要输入各种信息,安装完 XP 后还要
为其安装系统补丁、安装驱动程序、安装各种软件、优化系统等等,我们自己整这么一套工
序下来已经够烦了,更不要说每天要将这个工序做几十上百遍的系统维护人员了。
怎么能让 XP 更符合自己的要求,怎么能让 XP 的安装过程更为自动化、高效化,成了
很多系统维护工作者一直在努力实现的目标。
本文全文分为十章,围绕着这两个问题展开一系列的讨论。
第一章,基础。操作系统是用户与硬件的桥梁,我们做的就是定制这个桥梁,自然,我
们要了解很多东西才行。第一章中讲述了批处理和 AutoIt  v3 脚本这两种自动化控制方法,
又讲述了系统补丁与系统驱动程序的获取方法,最后详细的讲述了有关 XP 的注册表与系统
服务优化等。正所谓磨刀不误砍柴工,有了扎实的基础才能更好的进行更高层的操作。
第二章,无人值守安装 XP 定制。XP 的无人职守安装,也就是说在 XP 的整个安装过
程中无需任何人为干预。经过对系统无人职守应答文件的修改,以及对系统提供的对外调用
接口的使用,XP 的安装、驱动程序的安装、系统补丁的安装、软件的安装、系统优化的执
行全部无需人为参与。更简单的说,这一章旨在实现只要选择好要将系统安装在哪个分区,
就只需要等待所有工作的自动化完成就可以了。
第三章,使用 nLite 定制 XP。nLite 是国外的一款用来自动化定制 Windows 操作系统的
工具。nLite 的智能化程度很高,可以根据用户的选择与操作直接修改系统安装文件。nLite 
有很多功能,例如直接集成系统补丁到系统安装文件、集成驱动、自动创建无人应答文件等,
但是 nLite 最出众的功能还在于 nLite 可以对系统组件进行定制,这也就是说我们可以根据
需要精简不需要的系统组件。nLite  的灵活使用可以帮我们更快更准确的定制一个符合我们
要求的 XP 系统。
第四章,使用 DPS 向 XP 集成驱动。DPS(DriverPacks Base)
,也是国外的一款软件,
用于向 Windows 操作系统中集成驱动程序。DPS 官方网站不只提供 DPS 程序,还提供大量
的驱动包,这为我们向系统集成驱动程序提供了极大的方便。XP 由于诞生已久,其中的很
多驱动已经跟不上时代的脚步,而且由于近些年来磁盘控制器技术和磁盘技术的进步,原始
的 XP 安装程式有很多时候无法识别新型的磁盘控制器。DPS 可以方便的为我们解决 XP 中
许多由于驱动而造成的问题。
第五章,XP 个性化定制。现在是个讲究个性化的年代,很多朋友喜欢将自己的 XP 也
修改的符合自己的个性。这一章提供了很多的个性化修改方法,这些方法足以您将您的 XP 
修改的“面目全非”了!
第六章,XP  安装过程的控制。XP  安装过程中提供了很多对外程序接口,也就是说我
们可以通过设定,让 XP 在安装过程中调用某些外部程序来做我们想做的事。这一章中讲述
了微软提供的接口,又通过对第四章中  DPS  的工作原理进行分析,总结出了一个系统安装
前调用接口。这些接口的合理使用,可以让我们更方便的控制 XP 安装过程中的文件复制等
工作,当然,我们也能很方便的实现在 XP 安装未完成时就安装我们所需的系统补丁、软件。
第七章,XP  多合一光盘制作。我们有些时候需要将几种“不同的”XP  整合在一张光
盘中,这种整合通过使用微软官方的技术,让相同文件在光盘镜像中只存储一次,又通过使
用 EasyBoot 改变了光盘启动原理。通过这几种方法,我们将好几个类似的 Windows 操作系

统集成在一张光盘中,免除了我们携带多张光盘的麻烦。
第八章,XP  的封装与部署。XP  的封装与部署技术,是微软官方提供的一种用于快速
将 XP 部署到多台计算机中的方法。封装与部署技术可以将在一台计算机中安装好的系统经
封装后完全的部署到另外一台计算机中,在源计算机中对系统的各种修改都会一并转移到目
标计算机中。这种方法稳定、高效,但是微软对这种方法做出了使用限制,此章即讲述了封
装与部署技术,也讲述了突破微软限制的方法,让封装与部署技术不再受到计算机硬件抽象
层必须相同的限制,而能用于更多的计算机。
第九章,XP 封装与部署的自动化实现。在讲述了封装与部署技术后,为了更简便的实
现自动化封装与万能部署,我们使用了 AutoIt  v3 脚本实现了封装过程的自动化,并接管了
部署过程,让系统封装与系统部署变的更为自动化、高效化,也更具有可自定义性。
第十章,XP  封装与部署实例。此章以一个实例讲述了怎么将一个安装并修改完的  XP 
系统封装起来,再用第三方磁盘映像软件将这个封装好的 XP 备份成系统映像,并将这个映
像通过各类技术的综合应用做成一张系统恢复光盘的全过程。
本文通过十章的讲述,将 XP 定制技术完全展示出来,并实现了最初的两个目标。 
XP 定制技术成为了很多系统维护工作者的福音,原本麻烦的系统安装工作,变成了只
需放入光盘做一个选择就可以完成的工作。极大的节省了系统维护时间,降低了系统维护难
度,提高了系统维护效率。
希望此文可以给大家带来更轻松的工作体验!

第一章、基础 
1.1 基本 DOS 和批处理
虽然  Windows  已经流行了这么多年,虽然图形化操作界面已经成了当今的趋势,但是 
DOS 的威力依旧势不可挡。在很多苛刻的条件下,DOS 仍旧是最好的操作系统,DOS 命令
也自然是最简单实用的命令。
批处理,简单来讲,就是将一个个的 DOS 命令规定的顺序执行下来。批处理可以帮我
们自动化的按顺序执行一些操作,十分方便,一般只要熟悉 DOS 命令的人,写一个按照自
己意愿执行的批处理,是轻松自如的。 
DOS  命令有很多,但是我们没有必要一个个的都背下来怎么使用,更不用精通每一个
的使用方法,如果您真的要熟悉每一个 DOS 命令的使用方法,的确是一个不小的工程。我
们只需要熟悉并记住其中常用的那些命令即可,下面,我将平时十分常用的命令以及这些命
令的参数列举给大家。 
1>Attrib 
作用:显示或更改文件属性。
语法:ATTRIB [+R | ­R] [+A | ­A ] [+S | ­S] [+H | ­H] [[drive:] [path] filename] [/S [/D]] 
参数:

设置属性 
­ 
清除属性 

只读文件属性 

存档文件属性 

系统文件属性 

隐藏文件属性 
[drive:][path][filename]  指定要处理的文件属性 
/S  处理当前文件夹及其子文件夹中的匹配文件 
/D  也处理文件夹
说明:这是个很有用的命令,可以更改文件的属性,我们经常用这个命令添加或者去除
文件的只读、系统、隐藏等属性,例如, 
Attrib C:\Skyfree\Skyfree.esp +S +H 
或者 
Attrib C:\ntldr –R –S –H 
或者 
Attrib C:\Skyfree\*.* +R +S +H 
2> CD 
作用:显示当前目录名或改变当前目录。
语法:
CD [drive:][path] 
CD [..] 
参数:

.. 
上层目录
说明:这个命令可以帮我们切换到任意我们想进入的目录,是极为常用的命令,例如, 
CD D:\,这个命令将帮我们切换到 D 盘根目录下 
CD C:\Skyfree,这个命令将帮我们切换到 C:\Skyfree 目录下 
CD \,这个命令将帮我们切换到当前盘符根目录下 
CD..,这个命令将帮我们切换到上层目录
特别要注意的是,如果将要进入的目录名有空格,例如 Program Files,我们如果写成 
CD C:\Program Files 
那么将报错并不能进入,必须写为 
CD “C:\Program Files” 
才可以正常进入 C:\Program Files 文件夹下。 
3>Cls 
作用:清屏。
说明:这是个很简单的命令,清理当前命令行窗口中所显示的内容,有时的确很好用。 
4>Copy 
作用:复制文件。 
(Copy 的语法和参数其实比较复杂,我只说一下我们常用的语法和参数) 
语法:Copy [/Y | /­Y] source destination 
参数:
Source 
源文件 
Destination 
目标文件 
/Y 
如果该复制操作要覆盖或改写当前已存在的文件不提示 
/­Y 
如果该复制操作要覆盖或改写当前已存在的文件提示
说明:这个命令可以让我们随心的复制文件,例如, 
Copy /Y C:\Skyfree\Skyfree.esp D:\Skyfree.esp 
5>Del 
作用:删除文件
语法:
DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names 
ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names 
参数:
Names 
指定一个或数个文件或目录列表。通配符可被用来删除多个文件。如果
指定了一个目录,目录中的所有文件都会被删除。 
/P 
删除每一个文件之前提示确认 
/F 
强制删除只读文件 
/S 
从所有子目录删除指定文件 
/Q 
安静模式。删除全局通配符时,不要求确认 
/A 
根据属性选择要删除的文件 
attributes            R 只读文件,S 系统文件,H 隐藏文件,A  存档文件,­  表示“否”
的前缀
如果命令扩展名被启用,DEL  和  ERASE  会如下改变:

/S  开关的显示句法会颠倒,即只显示已经删除的文件,而不显示找不到的文件。
说明:
Del 命令的参数其实最常用的还是/S 和/Q,尤其是/Q,这样我们可以静默删除一个
文件夹中的所有文件了。例如, 
Del /Q C:\Skyfree\*.* 
6>Dir 
作用:显示目录下的文件列表 
(Dir 的语法和参数很多,我只列举常用的部分) 
语法:DIR [drive:][path][filename] [/A[[:]attributes]] 
参数:
[drive:][path][filename] 
指定要列出的驱动器、目录和/或文件,如果不指定这个
参数,则列出当前文件夹下的文件列表 
/A[[:]attributes] 
列出指定属性的文件,如果不指定  attributes,则列出所有属性
的文件,当然包括隐藏的 
attributes      D 目录,R  只读文件,H  隐藏文件,A  准备存档的文件,S  系统文件, 
­  表示“否”的前缀
说明:
这个命令的使用频率很高,通常我们使用 CD 进入某文件夹后,都会习惯性的 DIR 
一下。 
7>Echo 
作用:显示信息,或将命令回显打开或关上。
语法:
ECHO [ON | OFF] 
ECHO [message] 
参数:
[ON | OFF] 
打开或者关闭命令显示。在运行批处理程序时,MS­DOS 一般在屏
幕上显示(回显)批处理程序中的命令,Echo On 可以控制显示这些回显信息,Echo Off 
则可以关闭这些回显信息。 
[message] 
这个参数代表将要在屏幕上显示的信息内容
说明:
如果你要使用批处理作为与用户交流的见面,Echo  命令是不可少的,它可以显示
一些提供给用户的信息,例如, 
Echo  Www.FreeSkyCD.Com.Cn 
这样就会在 DOS 或者命令提示符窗口中显示自由天空技术论坛的网址 
Echo. 
这样将会在 DOS 或者命令提示符窗口中显示一个空行 
8>MD(MKDir) 
作用:创建文件夹
语法:
MKDIR [drive:]path 
MD [drive:]path

参数:
[drive:]path 
要建立的文件夹的驱动器和路径
说明:
我们可以用这个命令建立文件夹,例如 
MD C:\Skyfree 
9>Move 
作用:移动文件并重命名文件和目录。
语法:
要移动至少一个文件: 
MOVE [/Y | /­Y] [drive:][path]filename1[,...] destination 
要重命名一个目录: 
MOVE [/Y | /­Y] [drive:][path]dirname1 dirname2 
参数:
[drive:][path]filename1  指定您想移动的文件位置和名称。 
destination 
指定文件的新位置。目标可包含一个驱动器号和冒号、一
个目录名或组合。如果只移动一个文件并在移动时将其重命名,您还可以包括文件名。 
[drive:][path]dirname1  指定要重命名的目录。 
dirname2 
指定目录的新名称。 
/Y 
取消确认改写一个现有目标文件的提示。 
/­Y 
对确认改写一个现有目标文件发出提示。
说明:
这个命令就好像是把 Copy 和 Del 命令一起用一样,例如, 
Copy C:\Skyfree\Skyfree.esp D:\Miranda.esp 
Del C:\Skyfree\Skyfree.esp 
如同 
Move C:\Skyfree\Skyfree.esp D:\Miranda.esp 
10>Pause 
作用:形成一个中断
语法:Pause 
说明:
只要批处理中运行到这个命令,DOS 窗口就会出现一句 
Press any key to continue . . . 
并暂停在这里,直到你按下任意键,批处理才继续运行
这个在我们测试批处理的运行时十分有效 
11>RD(RMDIR) 
作用:删除一个目录。
语法:
RMDIR [/S] [/Q] [drive:]path 
RD [/S] [/Q] [drive:]path 
参数:
/S 
除目录本身外,还将删除指定目录下的所有子目录和文件。用于删除目录树。

10 

/Q 
安静模式,带  /S  删除目录树时不要求确认
说明:
这个命令是十分常用的命令,配合/S  和/Q 参数,可以静默的删除任意一个包含子
目录和文件的文件夹,这点很重要。例如, 
RD /S /Q C:\Skyfree 
这个命令如果执行,无论 Skyfree 文件夹下是否包含文件,是否包含子目录,一律
会删除 Skyfree 文件夹。 
12>Ren(ReName) 
作用:重命名文件
语法:
RENAME [drive:][path] filename1 filename2 
REN [drive:][path]filename1 filename2 
参数:
[drive:][path] 
驱动器路径 
filename1 
需要进行改名的文件 
filename2 
将要改为的名字
注意,不能为目标文件指定新的驱动器或路径,如果需要这样操作请使用 Move 命
令!
说明:
简单的重命名的命令,例如, 
Ren C:\Skyfree\Skyfree.esp Miranda.esp 
13>Start 
作用:运行某些外部程序 
(Start 的参数和语法很多,我只列举常用部分) 
语法:
START ["title"] [/MIN] [/MAX] [/WAIT] 
参数:
["title"] 
在窗口标题栏中显示的标题 
[/MIN] 
开始时窗口最小化 
[/MAX] 
开始时窗口最大化 
[/WAIT] 
启动应用程序并等候它结束
说明:
这是个很常用的命令,特别是/Wait  参数,我们可以用这个实现逐一的调用外部程
序,例如,我们写这样一个批处理: 
Start /wait C:\Skyfree\1.exe 
Start /wait C:\Skyfree\2.exe 
Start /wait C:\Skyfree\3.exe 
这个批处理在运行的时候,会先运行  1.exe,并等待  1.exe  运行结束,然后再运行 
2.exe,再等待 2.exe 结束然后运行 3.exe,依次类推。 
14>XCopy 
作用:复制文件和目录树。

11 

语法: 
XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W] 
[/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U] 
[/K] [/N] [/O] [/X] [/Y] [/­Y] [/Z] 
[/EXCLUDE:file1[+file2][+file3]...] 
参数: 
source 
指定要复制的文件。 
destination  指定新文件的位置和/或名称。 
/A 
只复制有存档属性集的文件,
但不改变属性。 
/M 
只复制有存档属性集的文件,
并关闭存档属性。 
/D:m­d­y 
复制在指定日期或指定日期以后更改的文件。
如果没有提供日期,只复制那些源时间
比目标时间新的文件。 
/EXCLUDE:file1[+file2][+file3]... 
指定含有字符串的文件列表。每一个字符串
必须在文件的单独行中。如果有任何
字符串与要被复制的文件的绝对路径
相符,那个文件将不会得到复制。
例如,指定如  \obj\  或  .obj  的字符串会排除
目录  obj  下面的所有文件或带有 
.obj  扩展名的文件。 
/P 
创建每个目标文件前提示。 
/S 
复制目录和子目录,除了空的。 
/E 
复制目录和子目录,包括空的。
与  /S /E  相同。可以用来修改  /T。 
/V 
验证每个新文件。 
/W 
提示您在复制前按键。 
/C 
即使有错误,也继续复制。 
/I 
如果目标不存在,又在复制一个以上的文件,
则假定目标一定是一个目录。 
/Q 
复制时不显示文件名。 
/F 
复制时显示完整的源和目标文件名。 
/L 
显示要复制的文件。 
/G 
允许将没有经过加密的文件复制到
不支持加密的目标。 
/H 
也复制隐藏和系统文件。 
/R 
覆盖只读文件。 
/T 
创建目录结构,但不复制文件。
不包括空目录或子目录。/T /E  包括
空目录和子目录。 
/U 
只复制已经存在于目标中的文件。 
/K 
复制属性。一般的  Xcopy  会重置只读属性。

12 

用生成的短名复制。 
复制文件所有权和  ACL  信息。 
复制文件审核设置(隐含  /O)。 
复制文件审核设置(隐含  /O)。
现存目标文件。 
/­Y 
导致提示以确认改写一个
现存目标文件。 
/Z 
用重新启动模式复制网络文件。
说明:XCopy,可以收是 Copy 命令的完美进化升级版,这个命令十分的强悍,参数很
多而且具有很高的可用性。大家多多使用和研究这个命令。
/N 
/O 
/X 
/Y 

好了,到此常用的 DOS 和批处理命令就介绍完了。其实 DOS 命令和参数比我介绍的要
多的多,不过就像我开始时所说的,我们只记住常用的就可以,有需要到其他命令时,我们
可以到时候再进行查阅。
这 14 个命令是我们在定制操作系统时最常用的,很多情况下,批处理这种“老少皆宜”
的东西还是最好用的,批处理可以让我们方便的实现很多自动化操作。
不过,虽然批处理性能十分强大,但是也有很多不便利的地方,特别是它的“黑框”,
让很多人比较厌烦。幸好,我们找到了一种在  Windows  环境下基本可以代替批处理的好用
的脚本语言,AutoIt v3(AU3)。
下一节里,我将为介绍一些关于 AU3 的基本使用方法。 

1.2  基本 AU3 脚本使用 
1.2.1 AutoIt v3 的“Hello World !”
其实 AutoIt  v3(AU3)已经不是一种简单的脚本语言了,AU3 在 GUI 界面方面也是很有
效果的,
不过我在这一节中只介绍 AU3 的一些常用的基本用法,如果您想了解更多关于 AU3 
编程的信息和方法,请参阅 AU3 的帮助文档——这真的是一篇很全面的帮助文档。
在这一节中,我将和大家一起学习 AU3 的一些基本使用方法,不求多,只求常用、好
用、好学,这一节的目的,旨在可以让大家和我一起在 Windows 环境下让 AU3 彻底替代批
处理。
在 Windows 环境下让批处理难看的黑框见鬼去吧~~。
学习任何一门语言,基本上所要做的第一件事,就是在 10 分钟内学会如何用这门语言
编出一个可以显示“Hello World !”的小程序,当然,我们学习 AU3 的基本使用方法,这个
就不例外了。 
AU3  的源码,可以使用记事本直接编辑——其实很多语言的源码也都可以直接使用纯
文本文档来编辑,不过我个人并不建议初学者使用记事本,编写 AU3 源码,有一个非常好
的文本编辑器,SCITE。 
SCITE 是一个类似记事本的小程序,它会用不同颜色标记您所编写的 AU3 源码中的不
同类别的命令,而且它内置记录了许多 AU3 的函数与指令,在您编写 AU3 源码时可以提供
给您很大的帮助。
好的,下面我们打开  SCITE  编辑器,我们将会得到一个类似记事本的界面,下面,我

13 

们就可以编写 AU3 源码了。大家跟我写下如下代码: 
MsgBox(0,"我的第一个 AU3 程序","Hello World !") 
写好后保存,保存后,这将是一个以  AU3  为后缀的文件,例如我们将它命名为 
Skyfree.au3,不过这个程序还不能运行,它只是源码,我们必须将它转化为可执行文件,也
就是 EXE 文件,它才会正常运行。这个由源码转换为可执行文件的过程,也就是我们经常
听到高手口中所说的“编译”了。
如何执行编译呢?我们可以右键单击 Skyfree.au3 这个 AU3 源码文件,然后会出现“编
译脚本”这个选项,我们单击“编译脚本”
,几秒钟,这个 Skyfree.au3 源码文件就被编译成
了 Skyfree.exe 文件了。双击 Skyfree.exe 文件,立刻会弹出来一个对话框,上面写着“Hello 
World”

怎么样,是不是很神奇,我们的第一个 AU3 程序就这么写出来了,简单吗?
其实编程就是这么简单,不要在某些高手的神话传说和谆谆教诲下感觉编程很神秘了,
只要有耐心和恒心,菜鸟照样玩编程。
不过这一节我也不是来领着大家做游戏的,这一小节有几个很重要的概念信息我再来重
复一下,一个是源码,一个是可执行程序,从源码到可执行程序,需要一个过程,这个过程
叫做“编译”
。 

1.2.2 AutoIt v3 入门 
1>  数据类型
任何编程语言都有数据这个概念,当然,任何编程语言都讲究数据类型,AU3 也一样,
不过 AU3 对数据类型的分类比较简单,在 AU3 中,数据大概分成四类:数字类型、字符串
类型、布尔值、二进制类型
数字类型,顾名思义,就是数字,例如 1、2、47.3、­5 等等,AU3 对数字类型没有再
进行详细的分类(很多语言中都将数字类型再详细分为整形、浮点型等等),这给初学者带
来了不少方便,只记住数字类型就是我们常说的“数”就可以了。
字符串类型,字符串即使一串字符,例如 ABCDE、Skyfree、SK1023Y 等等,这些都是
字符串,这个是很好理解的,不过大家应该分清楚一点,就是数字 1 和字符 1 是有区别的。
布尔类型,不要被这个名字搞乱了,所谓布尔类型的值,就是 True(真)和 False(假)这两
个值,这在进行数据判断的时候十分有用。
二进制类型我们很少用到,本着不常用的不浪费我们时间的原则,这个我就不多废口水
了,有兴趣的朋友可以参考 AU3 帮助文档中的相应说明。 
2>  变量
说完了数据类型,终于可以说数据了。
所谓变量,就是在程序运行过程中其值可以改变的量——简单了说就是可以变的量就是
变量(……好像废话)。我们可以定义一个变量,例如, 
Dim $Skyfree 
$Skyfree 就是一个变量,Dim 是定义变量的意思。在程序运行过程中,我们可以将 1 这
个值赋给$Skyfree 这个变量, 
$Skyfree=1 
这时$Skyfree 就代表着 1 这个值,不过由于$Skyfree 是变量,我们可以在任意我们喜欢
的时刻将 2 再赋值给$Skyfree, 
$Skyfree=2

14 

再次赋值结束后,$Skyfree 就代表着 2 这个值。
说到这里,大家大概明白什么叫变量了吧。大家就随手命名几个变量吧。
不过有一点要说的是,AU3  的变量命名有它的规则,不符合命名规则的变量将不被称
之为变量,AU3 的变量命名规则是:
以$开头的,字母、数字、下划线组合,例如$Sky、$Sky_Free、$Sky1023  这些都是合
乎 AU3 变量命名规则的变量。 
3>常量
明白了什么是变量,常量的意义就很好解释了。
常量,就是在程序运行过程中其值不能被随意改变的量。我们可以定义一个常量,例如, 
Const $Skyfree=1 
常量一旦被赋值,在整个程序运行过程中其值将不能被改变。
当然,常量的命名也有它的规则,常量的命名规则与变量相同。 
4>数组
数组这个概念可能稍微难理解一些,我们先来看一个简单的例子: 
Dim $Sky[3] 
$Sky[0]=17 
$Sky[1]=21 
$Sky[2]=65 
最初,我们以 Dim $Sky[3]定义了一个包含三个元素的数组 Sky[3],这三个元素的名字
分别为 Sky[0]、Sky[1]、Sky[2],然后我们分别将 17、21、65 赋值给他们。
到这里,大家也大概看出来什么是数组了,所谓数组,就是以一个名字命名一组变量,
就像 Sky 这个数组名,这个数组包含从 0 到(数组元素数量­1)
,例如 Sky[3],那么其中的
元素就是从 Sky[0]~Sky[3­1]。
如果说的再简单点,就是一组使用着同一个变量名的变量(例如数组  Sky[3]中的每一个
元素都使用 Sky 这个变量名),为了区别这一组的每一个变量,使用一个序号来唯一标识这
个元素(例如 Sky[1]和 Sky[2],虽然都使用 Sky 这个变量名,但它们使用[1]和[2]来区别彼此)。
数组的运用十分广泛,通常一个数组里存储着一组有关系的数据,或者有着一定相似性
的数据。
如果您现在还不能完全理解数组,也没关系,随着对 AU3 程序理解的深入,会慢慢理
解数组这个概念的。 
5>运算符
数据运算: 

赋值运算,将“=”右边部分的值赋给左边 

加法运算,  $S=2+3 
­ 
减法运算,  $S=2­3 

乘法运算,  $S=2*3 

除法运算,$S=2/3 

字符串连接运算,$St=”ABC” & “DEF” & “123” 

冥运算,$S=2^3(2 的三次方) 
布尔运算:(返回 True 或者 False 值) 

判断左右两侧的值是否相等,如果左右两侧为字符串,则不区分大小写比较

15 

== 
判断左右两侧的值是否相等,如果左右两侧为字符串,则区分大小写比较 
<> 
判断左右两侧是否不等于 

判断左侧是否大于右侧 
>= 
判断左侧是否大于等于右侧 

判断左侧是否小于右侧 
<= 
判断左侧是否小于等于右侧
逻辑运算: 
AND 
与运算,只有“AND”两侧的值都为“真”时,才返回“真”,否则返回“假” 
OR 
或运算,当“OR”两侧只要有一侧为“真”时就返回“真”,否则返回“假” 
NOT 
非运算,NOT 真为假,NOT 假为真
这些运算符是有优先级一说的,就像我们小学所学的“先乘除后加减”一样,这些运算
符的优先级如下,自上而下优先级依次降低,同级自左向右优先级依次降低: 
NOT 

* /
+ ­ 

< > <= >= = <> == 
AND OR 
牢记这些优先级,否则很容易在以后的编程中造成混淆。 

1.2.3  顺序结构、选择结构、循环结构入门
所有的编程语言都遵守这三种代码结构,我将在下面一一介绍。 
1>顺序结构
顺序结构是十分简单的结构,就像批处理一样,一条一条的运行所写下的代码,脚本运
行时,就会一条一条的运行代码,例如: 
Dim $S,$a,$b 
$a=1 
$b=2 
$S=$a+$b 
MsgBox(0,"运算结果",$S) 
这是个简单的程序,定义了变量$S,$a,$b,再分别将 1 和 2 赋值给$a,$b,然后计算$a 和 
$b 的和,并将这个和复制给$S,最后使用一个窗口将这个和显示出来。
程序从第一行定义变量到最后一行显示$S  的值依次执行下来,这就是顺序结构,也是
一个程序里最基本的结构。 
2>选择结构
选择结构中我只介绍 If…Then…结构,这个是极为常用的选择结构,十分直观。选择结
构里还有 Select…Case…这种结构,感兴趣的朋友可以参照 AU3 帮助文档。 
If…Then…的基本语法是: 
If [条件] Then 
[语句段 1]

16 

Else 
[语句段 2] 
EndIf 
If 后面跟一个条件,如果这个条件的结果为真,则执行语句段 1,否则将执行语句段 2, 
Else 和语句段 2 这两者不是必须的,下面举两个简单的例子: 
Dim $a 
$a=5 
If $a>3 Then 
MsgBox(0,"选择结构示例","大于 3") 
Else 
MsgBox(0,"选择结构示例","小于或等于 3") 
EndIf 
运行这个程序,则会出现一个对话框,对话框中显示为“大于 3”

随后我们可以将一个小于 3 的数例如 2 复制给$a,如下: 
Dim $a 
$a=2 
If $a>3 Then 
MsgBox(0,"选择结构示例","大于 3") 
Else 
MsgBox(0,"选择结构示例","小于或等于 3") 
EndIf 
再运行这个程序,对话框将显示为“小于或等于 3”。
只要理解了  If…Then…这个最基本的选择结构语句,就能做一些简单的判断了。其实 
If…Then…语句还有很多其他模式,例如 If…Then…ElseIf…Then….Else…Endif 等,不过只
要理解了 If…Then…一切都迎刃而解。 
3>循环结构
循环结构我只介绍最常用的 While…Wend 循环和  For…Next  循环,其他的循环结构控
制语句,如果有需要可以参考 AU3 帮助文档。 
While…Wend,语法: 
While [条件] 
[语句段] 
Wend 
这个语句中,While 后的[条件]只要为真,则会循环执行[语句段],直到[条件]为假才结
束循环,如果无论怎么循环[条件]都始终为真,则这个循环会成为死循环,这样会造成系统
资源耗尽而死机或者其他情况。
举个例子,例如我们想计算 1+2+3+…..+100 的结果,如下: 
Dim $i,$Sum 
$i=1 
$Sum=0 
While $i<=100 
$Sum=$Sum+$i 
$i=$i+1 
WEnd

17 

MsgBox(0,"计算 1+2+...+100 的和",$Sum) 
这个例子中,我们首先定义了$i 和$Sum 这两个变量,随后我们将他们赋以最初值, 
$i=1、 
$Sum=0,然后进入了 While 循环,在每次循环中$Sum 会被赋予当前$Sum 的值与$i 值的和,
而每次循环结束后$i  的值都会被+1,这样,$i  会依次表示  1、2、3…这些值(注意,这些$i 
的值都<=100,所以循环会继续执行),而$Sum 会记录从 1+2+3+…的值。在第 100 次循环结
束时,也就是$i=$i+1 运行到第 100 次时,此时$i 的值为 101,那么第 101 此循环运行前检
测 While 后的条件$i<=100 时,这个条件将不符合,不符合 While 后面的条件,也就是 While 
后面的条件为假时,则退出循环。退出循环后运行 MsgBox 这一行,这样就将$Sum 的值,
也就是 1+2+3+…+100 的值显示在弹出的对话框中。
下面,我们来看一下 For…Next 循环 
For…Next,语法: 
For [变量]=[初值] To [终值] [Step [步进值]] 
[语句段] 
Next 
For…Next 循环结构经常与数组一起使用,例如: 
Dim $Sky[5],$i,$Sum 
$Sky[0]=10 
$Sky[1]=20 
$Sky[2]=30 
$Sky[3]=40 
$Sky[4]=50 
$Sum=0 
For $i=0 To 4 
$Sum=$Sum+$Sky[$i] 
Next 
MsgBox(0,"For...Next 循环结构范例",$Sum) 
这个例子中,首先我们定义了$Sky 数组,这个数组包含 5 个元素,然后我们又定义了 
$i 和$Sum 这两个变量,分别用来计数和计算和值。接着我们为$Sky 中的 5 个元素赋了初始
值,以及为$Sum 赋了初始值。进入 For 循环,循环一共进行了 5 次,5 次中$i 分别等于 0、 
1、2、3、4,在这 5 次循环中,$Sum 依次记录$Sky[0]、$Sky[1]、…$Sky[4]的和值。5 次循
环结束后,使用 MsgBox 语句将$Sum 结果显示在对话框中。 

1.2.4  常用的 AU3 函数
什么是函数?很多人初接触编程对这个存在很大的疑惑。
举个简单的例子,有一个制造桌子的工厂,你从这边将木材送进去,就会从工厂的那边
生产出桌子来,如果你送进去檀木,那么就会生产出檀木桌子,如果你送进去红木,那么就
会生产出红木的桌子。
这个工厂就是函数,我们送进去的木头就是函数的参数,工厂生产出来的桌子就是函数
的返回值。我们不必知道工厂的内部结构,也不必知道桌子的生产过程,我们只需要调整木
头的类型,就可以生产出不同的桌子。也就是说,我们不必知道函数的工作原理,而只需要
调整参数,就能得到我们想要的结果。 
AU3 提供了大量的函数,这些函数很方便,但是 AU3 的函数有几百个,全部记住反正
笔者我这样的破脑袋是不行,下面我列举一些十分常用的 AU3 函数及其常用参数,大家如

18 

果懒得记忆全部 AU3 函数,就记住这些常用的就可以。 
1>EnvGet 
作用:获取当前环境变量的值
语法:EnvGet ( "环境变量" ) 
范例: 
$SysDrv= EnvGet("systemdrive") 
运行完成后,$SysDrv  将记录环境变量%SystemDrive%的值,如果系统盘为  C  盘,则 
$SysDrv 的值为“C:” 
2>EnvSet 
作用:设置环境变量和其值
语法:EnvSet ( "环境变量" [, "值"] ) 
范例: 
EnvSet ("TEMP ", EnvGet("systemdrive") & ”\Windows\Temp”) 
运行完成后,%TEMP%这个环境变量的值将被修改,如果系统盘为 C 盘,则%TEMP% 
的值为“C:\Windows\Temp” 
3>DirCopy 
作用:复制指定目录及其所有子目录和文件
语法:DirCopy ( "源目录", "目标目录" [,  标志] ) 
参数:
[标志],为 0(默认)时不覆盖已有的文件夹,为 1 则覆盖
范例:DirCopy("C:\Skyfree","D:\Skyfree",1) 
4>DirCreate ( "路径" ) 
作用:创建文件夹
语法:DirCreate ( "路径" ) 
范例:DirCreate ("C:\Skyfree" ) 
5>DirGetSize 
作用:返回指定目录的占用空间大小(单位:  字节) 
语法:DirGetSize( "目标路径" ) 
范例: 
$Size = DirGetSize("C:") / 1024 / 1024 
由于 DirGetSize 返回值的单位是字节,所以我们需要连续除以两次 1024 才能得到 MB 
级别的剩余空间 
6> DirMove 
作用:移动指定目录及其所有子目录和文件
语法:DirMove ( "源目录", "目标目录" [,  标志] ) 
参数:
[标志],为 0(默认)时不覆盖已有的文件夹,为 1 则覆盖
范例:DirMove ("C:\Skyfree","D:\Skyfree",1)

19 

7> DirRemove 
作用:删除一个目录/文件夹
语法:DirRemove ( "路径" [,  递归遍历] ) 
参数:
[递归遍历],0 则不删除其子文件和文件夹,1 则删除
范例:DirRemove("C:\Skyfree", 1) 
8>DriveGetFileSystem 
作用:返回指定驱动器的文件系统类型
语法:DriveGetFileSystem ( "路径" ) 
返回值: 
1(数字),未知的文件格式 
FAT,FAT 格式 
FAT32,FAT32 格式 
NTFS,NTFS 格式 
CDFS,CD 格式 
UDF,DVD 格式
范例:$Format=DriveGetFileSystem ( "C:\" ) 
9>DriveGetType 
作用:返回指定驱动器的类型
语法:DriveGetType ( "路径" ) 
返回值: 
"Unknown" (未知类型)、 
"Removable" (可移动)、 
"Fixed" (固定的)、 
"Network"(网络)、 
"CDROM" (光驱)、"RAMDisk"(内存盘) 
范例:$Type=DriveGetFileSystem ( "C:\" ) 
10> DriveSpaceFree 
作用:以 MB(兆字节)为单位返回指定路径所在分区的剩余空间
语法:DriveSpaceFree ( "路径" ) 
范例:
$FreeSpace= DriveSpaceFree ( "C:\" ) / 1024 
这样将获得 GB 级别的剩余体积 
11> FileCreateShortcut 
作用:创建指定文件的快捷方式(.lnk 文件) 
语法:FileCreateShortcut ( "目标文件", "lnk 文件" [, "工作目录"]) 
范例:
FileCreateShortcut("D:\360safe\360Safe.exe",@DesktopCommonDir & "\360 安
卫士.lnk","D:\360safe") 

12>FileCopy 
作用:复制一个或多个文件

20 

语法:FileCopy ( "源文件", "目标路径" [,  标志] ) 
参数:
[标志]  0 = (默认)  不覆盖存在的文件 
1 =  覆盖存在的文件 
8 =  如果目标文件夹不存在,就先创建  (查看注意部分) 
范例:
FileCopy("C:\Skyfree.esp","D:\Skyfree.esp",1) 
13> FileDelete 
作用:删除一个或多个文件
语法:FileDelete ( "路径" ) 
范例:FileDelete("C:\Skyfree\Skyfree.esp") 
14> FileExists 
作用:检查指定文件或目录是否存在
语法:FileExists ( "路径" ) 
返回值:存在则返回 1(真)
,不存在则返回 0(假)
范例:
If FileExists("C:\Skyfree\Skyfree.esp ") Then 
MsgBox(0, "", "存在") 
Else 
MsgBox(0,"", "不存在") 
EndIf 
15>FileMove 
作用:移动一个或多个文件
语法:FileMove ( "源文件", "目标路径" [,  标志] ) 
参数:
[标志]  0 = (默认)  不覆盖存在的文件 
1 =  覆盖存在的文件 
8 =  如果目标文件夹不存在,就先创建  (查看注意部分) 
范例:
FileMove ("C:\Skyfree.esp","D:\Skyfree.esp",1) 
16> FileSetAttrib 
作用:修改一个或多个文件的属性
语法:FileSetAttrib ( "文件", "+­RASHNOT" ) 
参数:
"R" = READONLY(只读) 
"A" = ARCHIVE(存档) 
"S" = SYSTEM(系统文件) 
"H" = HIDDEN(隐藏文件) 
"N" = NORMAL(普通) 
"O" = OFFLINE(脱机文件)

21 

"T" = TEMPORARY(临时文件) 
+  增加属性,例如+R、+S、+H 
­  去除属性,例如­R、­S、­H 
范例:
FileSetAttrib("C:\Skyfree.esp","+RSH") 
FileSetAttrib("C:\Skyfree.esp","­RSH") 
17>IniRead 
作用:从某标准配置文件(*.ini)中读取某个数值
语法:IniRead ( "文件名", "字段名", "关键字", "默认值" ) 
范例:
IniRead("C:\Windows\AllUsrRun.ini","PreSetup","Exe","NA") 
这行语句的意思是从 C:\Windows\AllUsrRun.ini 这个配置文件中寻找 PreSetup 段,
再从 PreSetup 这段下寻找 Exe 关键字,随后读取 Exe 关键字对应的值,如果 Exe 
关键字的值为空则返回“NA”
。 
IniRead 是十分常用的函数,常用于读取外部配置文件以改变程序运行的方法。 
18> IniWrite 
作用:向某标准配置文件(*.ini)中写入某个数值
语法:IniWrite ( "文件名", "字段名", "关键字", "数值" ) 
范例:
IniWrite("C:\Sysprep\AutoSysprep.ini","SK3","UnDev","True") 
IniWrite  和  IniRead  是对应的,IniWrite  用来写配置文件,上面语句的意思是寻找 
C:\Sysprep\AutoSysprep.ini 这个配置文件,并寻找 SK3 这一段,
再由 SK3 段中寻找 UnDev 
项并把这项的值设置为 True。 
19> Random 
作用:产生一个伪随机的浮点数
语法:Random ( [最小值  [,  最大值  [,  标志]]] ) 
参数:
最小值,随机数的最小值,默认为 0 
最大值,随机数的最大值,默认为 1 
标志,设为 1 则返回整数,默认则返回一个浮点数
范例:
$Rs=Random(2,5,1) 
上述语句将随机选取 2 到 5 之间的一个整数赋值给$Rs。 
20>InputBox 
作用:显示以一个输入框以供用户输入数据
语法:InputBox ( "标题", "提示信息" [, "默认数据" [, "密码字符" [,  宽度,  高度  [,  左边, 
上边  [,  超时时间]]]]] ) 
参数:
标题,输入框的标题文字
提示信息,提示用户程序需要获得的数据

22 

默认数据,显示在输入文本框中的默认文字
密码字符,[可选参数]  显示在输入文本框中用以代替用户输入字符的字符。如果
要正常显示字符只需定义此参数为空字符串""(默认)或空格字符即可。 如果此参数
被设为多字符的字符串则只有第一个字符才有效。第二个字符及后面的其它字符有其它
特殊用途。请查看下面的注意部分
宽度,[可选参数]  窗口宽度。如有指定此参数则高度参数也必须指定。指定  ­1  则
表示使用默认宽度
高度,[可选参数]  窗口高度。如有指定此参数则宽度参数也必须指定。指定  ­1  则
表示使用默认高度
左边,[可选参数]  输入框左边离屏幕左边的距离(象素)。默认情况下,输入框是
居中显示的,如有指定此参数则 上边 参数也必须指定
上边,[可选参数]  输入框上边离屏幕左边的距离(象素)。默认情况下,输入框是
居中显示的,如有指定此参数则 左边 参数也必须指定
超时时间,[可选参数]  以秒为单位。指定时间过后输入框将自动关闭
范例:
$passwd = InputBox("权限核查", "请输入密码:", "", "*") 
21>MsgBox 
作用:显示一个简单的对话框(可设置超时属性)
语法:MsgBox (  标志, "标题", "文本" [,  超时时间] ) 
参数:
标志,标志是几个值的加和,我只介绍最常用的两类值,如果有更多的需要请参阅 
AU3 帮助文件。一个是要显示的按钮的对应值,一个是要显示的提示图标对应的值。
这两个值的列表如下:
按钮对应的值: 
0=确定 
1=确定 和 取消 
2=终止、重试、忽略 
3=是、否、取消 
4=是 和 否 
5=重试 和 取消 
6=取消、重试、继续
提示图标对应的值: 
0=(无图标) 
16=警告标志(一般用于错误提示) 
32=问号图标 
48=感叹号图标 
64=由一个“i”和圆圈组成的图标(消息通知)
返回值:
这些返回值代表着所按下的按钮, 
OK(确定)=1 
CANCEL(取消)=2 
ABORT(终止)=3 
RETRY(重试)=4

23 

IGNORE(忽略)=5 
YES(是)=6 
NO(否)=7 
TRY AGAIN  (重试)=10 
CONTINUE  (继续)=11 
范例:
$Flag=MsgBox(4+32,"驱动包删除","是否要删除系统驱动包备份?") 
If $Flag=6 Then 
DirRemove("C:\Drivers",1) 
EndIf 
这个例子中,$Flag 用来记录 MsgBox 执行后的返回值,MsgBox 由于我的标志选
择了 4+32,这将意味着这个 MsgBox 框中会有 Yes 和 No 两个按钮并且提示标志是一个
“?”
,在随后的判断中,$Flag 如果等于 6,则代表我在 MsgBox 中单击了 Yes 这个按
钮,这将执行 DirRemove("C:\Drivers",1),否则将不执行。 
22> ToolTip 
作用:在屏幕的任意位置显示一个工具提示
语法:ToolTip ( "文本" [, X 坐标  [, Y 坐标  [, "标题" [,  图标  [,  选项]]]]] ) 
参数:
文本,工具提示的文本(如果是空字符串则清除现有的工具提示) 
X,Y 坐标,[可选参数]  工具提示出现位置地  X  和  Y  坐标
标题,[可选参数]  工具提示的标题,  需要  IE5+支持
图标,[可选参数]  预定义标题显示的图标:  需要  IE5+支持.  需要设置一个标题, 
0=  没有图标, 1 =  信息图标, 2 =  警告图标, 3 =  错误图标
选项=[可选参数]  为不同的显示类型设置不同的显示选项: 
1 =  显示气泡提示,  需要  IE5+支持 
2 =  在 X,Y 坐标中,居中显示提示.而不是在左上角显示. 
4  =  如果有必要,强制显示工具提示总是可见,如果有多个显示器并且工具提示显示
于屏幕边界,那么在另外的显示器上面也会显示.  这个选项不能工作于  Windows  95  或
者  Windows NT.  在那些平台,工具提示只能限制在主显示器里面
范例:
TooTip 可以很简单帮我们做出来一些提示,这些提示有些事后很有用。 
ToolTip(@CR&"      "  &  " 正 在 安 装  AMD  双 核 驱 动 ..."  &  "      "&@CR, 
@DesktopWidth­260, @DesktopHeight­120) 
23> RunWait 
作用:运行一个外部程序并暂停脚本的执行直至该程序执行完毕
语法:RunWait ( "文件名" [, "工作目录" [,  标志]] ) 
参数:
文件名,可执行文件的完整路径(文件格式为  EXE、BAT、COM  或  PIF)

工作目录,[可选参数]  工作目录。
标志,[可选参数]  启动程序时的初始状态: 
@SW_HIDE =  隐藏窗口 
@SW_MINIMIZE =  最小化窗口

24 

@SW_MAXIMIZE =  最大化窗口
范例:
RunWait("C:\Skyfree\1.exe","",@SW_HIDE) 
RunWait("C:\Skyfree\2.exe","",@SW_HIDE) 
隐藏运行 1.exe,1.exe 运行完毕再隐藏运行 2.exe。
还有一个 Run 函数,和 RunWait 类似,只是 Run 函数只调用外部程序运行而不等
待这个外部程序的运行结束。 
24>Shutdown 
作用:关机操作
语法:Shutdown (  参数  ) 
参数:
0 = Logoff(注销) 
1 = Shutdown(关机) 
2 = Reboot(重启) 
4 = Force(强制执行) 
8 = Power down(关机) 
32= Suspend(待机) 
64= Hibernate(休眠)
范例:
Shutdown(Reboot) 
25>RegDelete 
作用:从注册表中删除指定键值
语法:RegDelete ( "键名" [, "值项"] ) 
范例:RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE", "TestKey") 
26>RegRead 
作用:读取注册表指定的值
语法:RegRead ( "键名", "值项" ) 
范例: 
$Reg 
RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion", 
"ProgramFilesDir") 

27>  RegWrite 
作用:创建一个主键、子键或值项
语法:RegWrite ( "键名" [,"值项", "类型",  数据] ) 
参数:
类型,[可选参数]  目标值项的数据类型,比如:"REG_SZ"、"REG_MULTI_SZ"、 
"REG_EXPAND_SZ"、"REG_DWORD"  或  "REG_BINARY"。
范例: 
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Test",  "TestKey",  "REG_SZ",  "Hello 
this is a test")

25 

28>StringInStr 
作用:检查某个字符串是否含有给定的子串
语法:StringInStr ( "字符串", "子串" [,  区分大小写  [,  出现次序]] ) 
参数:
字符串,目标字符串。
子串,要搜索的子串。
区分大小写,[可选参数]  指定匹配操作是否要区分大小写。 
0 =  不区分大小写(默认) 
1 =  区分大小写 
2 =  不区分大小写,  使用基本/快速的比较方法
出现次序,[可选参数]  指定要提取目标字符串中第几个匹配的子串。若给定的是
负数则表示要从字符串右边开始搜索。默认值为  1(搜索第一个匹配的子串)。
返回值:包含则返回 1(真)
,不包含则返回 0(假)
范例:
If StringInStr("nVIDIA Geforce 8600GTS","nVIDIA") Then 
$SndName="nVIDIA" 
EndIf 
29>StringLen 
作用:返回指定字符串的字符总数
语法:StringLen ( "字符串" ) 
范例:
$Length=StringLen("Skyfree") 
此时,$Length 的值应该为 7 
30>StringMid 
作用:取某个字符串的部分字符
语法:StringMid ( "字符串",  起始位置  [,  数量] ) 
范例:
$S=StringMid("Skyfree",4,4) 
此时,$S 的值应该为“free” 
31>Sleep 
作用:使脚本暂停指定时间段
语法:Sleep (  延迟  ) 
范例:
Sleep(3000) 
暂停脚本运行 3 秒,注意,参数里的“延迟”是以毫秒为单位的
好了,终于把  AU3  常用的函数介绍完了,是不是看得有点晕了,这  31  个函数是所有 
AU3 函数中相对常用的,AU3 的函数十分的多,而且功能十分的多,如果想要了解关于更
多 AU3 函数的知识,可以参阅 AU3 帮助文档。

26 

1.2.5 AU3 中的宏
什么是宏,不要被这个术语吓到了,宏的意思简单的来说,就是一些系统预先命名好的
常量。写程序的过程中可以使用这些宏所代表的数据,但是不可对这些宏进行赋值操作。
常用的宏有如下这些: 
@AppDataCommonDir,公共  Application Data  文件夹所在路径 
@AppDataDir,当前用户  Application Data  文件夹所在路径 
@ComSpec , %comspec% 的 值 , 指 定 的 第 二 个 命 令 解 释 程 序 (SPECified  secondary 
COMmand interpreter),主要用于命令行使用,  如.    Run(@ComSpec & " /k help | more") 
@CR,回车符,用于换行 
@LF,换行符,用于换行 
@CRLF,@CR+@LF,回车换行符,用于换行 
@DesktopCommonDir,公共  Desktop  文件夹路径(桌面) 
@DesktopDir,当前用户  Desktop  文件夹路径(桌面) 
@DesktopHeight,桌面高度(像素) (垂直分辨率) 
@DesktopWidth,桌面宽度(像素) (水平分辨率) 
@DesktopDepth,像素颜色位深度(如 32 Bit) 
@DesktopRefresh,屏幕刷新率.(如 75 HZ) 
@DocumentsCommonDir,公共  Documents  文件夹路径(我的文档) 
@FavoritesCommonDir,公共  Favorites  文件夹路径 
@FavoritesDir,前用户的  Favorites  文件夹路径 
@HomeDrive,当前用户主目录所在的驱动器号(主要用于确定系统所在分区) 
@MyDocumentsDir,我的文档的路径. 
@OSServicePack,系统已安装的  Service  pack  信息,比如"Service  Pack  3"  ,若是 
Windows 95  则可能返回  "B" 
@OSVersion , 返 回 操 作 系 统 的 版 本 , 如 : "WIN_2003",  "WIN_XP",  "WIN_2000", 
"WIN_NT4", "WIN_ME", "WIN_98", "WIN_95" 
@ProgramFilesDir,返回  Program Files  文件夹路径. 
@ProgramsCommonDir ,「 开 始 」 菜 单 \ 程 序 目 录 所 在 路 径 ( 例 : C:\Documents  and 
Settings\All Users\「开始」菜单\程序)公共用户 
@ProgramsDir,
「开始」菜单\程序 目录所在路径(例: 
C:\Documents and Settings\All Users\ 
「开始」菜单\程序)  当前用户 
@ScriptDir,脚本所在目录. (不包含反斜杠符号"\") 
@ScriptName,当前运行的脚本的长文件名 
@ScriptFullPath,等价于  @ScriptDir & "\" & @ScriptName 
@StartMenuCommonDir,公共用户「开始」菜单 目录所在路径(例:C:\Documents and 
Settings\All Users\「开始」菜单) 
@StartMenuDir,当前用户的 「开始」菜单目录所在路径 
@StartupCommonDir , 公 共 用 户 的 启 动 目 录 所 在 路 径 ( 例 : C:\Documents  and 
Settings\All Users\「开始」菜单\程序\启动) 
@StartupDir,当前用户的 启动 目录所在路径 
@WindowsDir,Windows  文件夹 所在路径,(例:C:\WINDOWS) 
以上的 AU3 的宏只是所有 AU3 的宏中比较常用的一部分,如果您想了解更多关于 AU3 
宏的信息,请查阅 AU3 帮助文档。

27 

其实大家可能也看出来了,宏有点类似  Windows  的环境变量,当然,其性能和多样性
远远超过 Windows 环境变量。
讲到这里,关于 AU3 的基础知识就给大家介绍完了。以后我们也可以亲手写一些简单
的小程序来满足我们对自动化操作的需要,同样,当我们再碰到高手们写的 AU3 源代码终
于也可以看懂一些了。
编程,其实无论是 AU3 还是其他的,如果想熟练掌握仅仅靠背诵这些语法、函数、宏
是不管用的,不过如果你不知道这些语法、函数、宏也是更行不通的。想熟练使用一样东西,
就要经常使用它。一开始写程序是有点小困难,但这只是因为您对编程还不熟悉,并不代表
着您不能掌握编程。编程很大程度上靠的不是智力,而是一个人的毅力! 

1.3  系统补丁获取方法
系统补丁,是在操作系统发布后发布的一些关于系统性能、漏洞、BUG  等进行修正的
程序。XP 从发布至今也有许多年了,微软基本上每个月都会发布关于 XP 的系统补丁。
如果我们要使用原版 XP 进行修改与定制,必然是不带这些后来发布的补丁的,当然,
如果您不在乎您的系统有上百个漏洞的话也就不用管这些补丁的问题(……)
。那么我们应
当怎样获得这些补丁呢?
首先,我们在虚拟机中安装一个原版  XP,也就是从未加载过任何系统补丁的  XP。安
装完成后将虚拟机接入网络。
然后,我们下载 360 安全卫士(当然也可以用 Windows Update 来获得补丁)
,360 安全
卫士官方网站:www.360safe.com。
下载完成后安装 360 安全卫士,安装完毕后启动,就会出现如下图类似的情况。

28 

切换到“修复系统漏洞”选项卡,

选中“全选”
,再单击“下载并修复”,360 安全卫士就会将这些补丁依次下载,下载完
成后依次进行安装。
这些下载完毕的补丁默认保存在  360 安全卫士的安装目录下的 Hotfix  文件夹中。我们
可以将这些系统补丁备份起来以备以后使用。 

1.4  驱动提取的基本方法
大家经常能看到网络上的高手做的驱动包,大家可能有所疑问,这些驱动包是怎么做的。
说这些驱动包是怎么搜集的之前,我想先说几个概念。
第一个问题,什么是驱动?
所谓驱动,简单说,就是操作系统与硬件之间的桥梁,系统可以通过驱动程序更好的控
制硬件,让硬件发挥更好的性能。我们平时所说的主板、显卡、声卡等驱动就是指的这个桥
梁。
第二个问题,驱动安装包和大侠们的驱动综合包有什么关系?
大家经常会安装驱动程序,而且多数人采取的方法就是去硬件的官方网站或者驱动之家
(http://www.mydrivers.com)下载与硬件相对应的驱动,下载好后解压运行,按照提示一步
步的做,驱动就会被安装好。
其实驱动安装包简单来说包含两个部分,一部分是驱动本身,一个驱动安装程序。工作
步骤基本遵循先解压驱动到一个特定的文件夹,随后驱动安装程序运行并命令系统安装这些
驱动。
大侠们的驱动综合包则不同,这些驱动综合包一般只包含纯驱动部分。纯驱动一版只包
含.inf  文件、.sys  文件、.cat  文件以及相应的控制器文件、控制面板文件等。这些纯驱动可

29 

以通过 Windows 自身的驱动搜索程序搜索并安装。
我们需要搜集大量的第三方驱动,一共 XP 在安装过程中可以自动搜寻并安装,所以我
们要搜集的应该是纯驱动。
下面我简单的介绍集中常见的纯驱动的搜集。
我准备了 Intel 的主板驱动、ATi 的显卡驱动、nVIDIA 的显卡驱动以及 RealtekHD 声卡
的驱动作为例子为大家讲解。

在讲解驱动搜集前,我请大家先安装一个软件,7z。 
7z 是当前比较流行的一款压缩与解压缩工具,7z 具有压缩率高、解压速度快、易上手
等优点,而且我们可以用它强行解压一些程序。 
OK,现在我们准备好了驱动,也准备好了工具,开工吧~~。 
1>主板驱动的搜集(以 Intel 的为例)
使用 7z 强行解压“Intel 主板驱动.exe”
,我们将得到一个文件夹,文件夹中包含如下文
件,

但是哪个文件夹里才是驱动呢?
我们可以通过文件夹的名称来粗略的判断一下。 
Lang 一般代表着语言文件,所以这个文件夹中应该是关于语言的各类文件。Vista 不用
说了,我们要搜集 XP 的驱动,Vista 的我们不要。x64 代表着为 64 位系统准备的,我们要
搜集 32 位系统的驱动,所以不需要这个。
那么最后我们的目标就集中在了 All 这个文件夹上,打开 All 文件夹,

30 

这些就是纯驱动了。上文中我已经提到,纯驱动一般由.inf、.cat、.sys 这几类文件组成,
所以如果实在不认得英文,我们可以专门去找那个包含.inf、.cat、.sys 文件的文件夹。这也
是个简单而有效的方法了。
把 All 文件夹里的文件都复制出来,例如复制到一个新建的 Intel_Chipset 文件夹里,那
么这个 Intel_Chipset 文件夹就是关于 Intel 主板的纯驱动了。 
2>ATi 显卡驱动 
ATi 的驱动搜集和其他的驱动略有不同,直接解压它的安装包容易造成一点小混乱,所
以我们可以使用一个简单的办法。
运行 ATi 显卡安装程序,

31 

选择“ATi Catalyst Driver”
,因为我们只需要驱动,然后单击“Next”,

上图界面中,其实就是一个自解压程序,这个程序会将  ATi  的显卡驱动解压到 
C:\ATI\SUPPORT\7­11_xp32_dd_54435 文件夹中,如果您特别心疼您的 C 盘,可以更改一下
这个自解压路径。
然后我们单击“Install”来进行驱动的自解压。ATi  的驱动默认在自解压结束后开始安
装,当弹出驱动安装界面后,我们可以关闭这个安装界面,毕竟我们只搜集驱动并不安装。
现在我们进入刚才的那个 C:\ATI\SUPPORT\7­11_xp32_dd_54435 文件夹中,其中仅包含
一个 Driver 文件夹。进入这个 C:\ATI\SUPPORT\7­11_xp32_dd_54435\Driver 文件夹,我们可
以看到很多文件,

还是按刚才搜集  Intel  主板驱动的原则,先读一下各个文件夹的英文,很简单的,我们
可以在这里又发现一个  Driver  文件夹,不用说了,从名字来看,这个文件夹里包含的肯定
是驱动,再进入这个新发现的 Driver 文件夹。进入这个 Driver 文件夹后会发现这里还是有

32 

很多文件,

按我们的原则,找那个包含着.inf、 
.cat、 
.sys 文件的文件夹。顺势,我们就找到了 XP_INF 
文件夹, 

OK,这些就是我们要搜集的  ATi  显卡驱动了。将这些驱动复制到一个新建的例如 
ATi_Display 文件夹中就完成对 ATi 显卡驱动的搜集了。 
3>nVIDIA 显卡驱动 
nVIDIA 的显卡驱动搜集要简单的多,直接解压 nVIDIA 显卡驱动的安装包,

这些就是  nVIDIA  的显卡驱动了,搜集起来,保存到一个新建的例如  nVIDIA_Display

33 

文件夹中。 
4> RealtekHD 声卡驱动
解压 RealtekHD 声卡驱动,解压后包含一个 MSHDQFE 和 WDM 文件夹以及若干其他
文件,仅从文件名来看,还真不好判断哪个是驱动。

不过我们还有第二条规则,找那个包含着.inf、.cat、.sys 文件的文件夹。按照第二条原
则,我们进入 WDM 文件夹下,

嗯 ,没错 ,这些 就是我 们要 搜集 的  RealtekHD  声 卡 驱动了 。复制 到一个 新建 的 
Realtek_Sound 文件夹中,就完成对 RealtekHD 声卡驱动的搜集了
怎么样,看完了这几种简单的驱动搜集方法是不是也对驱动的搜集有一定了解了呢?
其实这些只是最简单的方法,玩驱动的大侠们通常都有自己的独门秘技。不过我们只要
了解驱动是如何搜集的就可以了,毕竟现在大侠们提供的驱动包都很完美了,包含的驱动种
类很多而且体积并不大。

34 

建议直接下载这些大侠们的驱动综合包,本节的意义只在于让大家了解驱动的基本搜集
方法。如果您想对驱动有更多的研究,请更多的参考大侠们的驱动综合包作品。 

1.5  注册表优化基础
一般的,从我们刚接触计算机开始,
最常听到高手挂在嘴边的一句话就是“注册表优化”

注册表优化的确可以一定程度上提高计算机的运行效率,可以让我们感觉计算机运行起来更
快一些。
说注册表优化之前,我们先来了解一下什么是注册表吧。
注册表最初被设计为一个应用程序的数据文件相关参考文件,最后扩展成对于 32 位操
作系统和应用程序包括了所有功能下的东西。注册表是一套控制操作系统外表和如何响应外
来事件工作的文件。这些“事件”的范围从直接存取一个硬件设备到接口如何响应特定用户
到应用程序如何运行等等。注册表因为它的目的和性质变的很复杂,它被设计为专门为  32 
位应用程序工作,文件的大小被限制在大约 40MB。
然而,微软并没有完全公开讲述关于注册表正确设置的支持信息,这样使得注册表看上
去更不可琢磨。处理和编辑注册表如同“黑色艺术”一样,它在系统中的设置让用户感觉象
在黑暗中摸索一样找不到感觉。
就我个人的理解,我将注册表理解为一份记录着系统各方面参数、信息的配置文件,系
统各方面的运行都会去注册表中找相应的运行参数。这样理解似乎不那么准确,不过至少可
以让我们可以感觉到注册表不是什么绝对神秘的东西。
那么所谓的注册表优化,就是改变这些运行参数,例如一个菜单打开的默认时间是 400 
毫秒,我们可以将其修改为 0,这可以让我们感觉打开菜单快一些。不过有一点要说的是注
册表优化只能在你硬件配置的可行性范围内达到最优效果,也就是说如果您的计算机配置达
不到我们在注册表优化里所要求的水平,那么优化的再好也没有任何意义。
经过无数前辈们的努力,有很多实用的注册表优化项。如果大家想了解所有注册表优化
相关的内容,请参阅: 
http://www.freeskycd.com.cn/bbs/Show.asp?id=346&BoardID=15&TB=1。
下面我列举 89 条十分常用的注册表优化与调整, 
1 显示认证码 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Security] 
"BlockXBM"=dword:00000000 
2 禁用桌面清理向导 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop 
\CleanupWiz] 
"NoRun"=dword:00000001 
3 禁用错误报告,但在发生严重错误时通知我 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PCHealth\ErrorReporting] 
"DoReport"=dword:00000000 
4 禁止 Windows 漫游气球提醒 
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Applets\Tour] 
"RunCount"=dword:00000000 
5 减少开机滚动条滚动次数 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session

35 

Manager\Memory Management\PrefetchParameters] 
"EnablePrefetcher"=dword:00000001 
6 缩短 XP 的开关机的等待时间 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control] 
"WaitToKillServiceTimeout"="500" 
7 让欢迎窗口更清晰 
[HKEY_USERS\.DEFAULT\Control Panel\Desktop] 
"FontSmoothing"="2" 
"FontSmoothingType"=dword:00000002 
8 加快开关机机速度,自动关闭停止响应 
[HKEY_USERS\.DEFAULT\Control Panel\Desktop] 
"AutoEndTasks"="1" 
"HungAppTimeout"="200" 
"WaitToKillAppTimeout"="1000" 
9 加快局域网访问速度 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Re 
moteComputer\NameSpace] 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Re 
moteComputer\NameSpace\{2227A280­3AEA­1069­A2DE­08002B30309D}] 
@="Printers" 
10 加快程序运行速度 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem] 
"ConfigFileAllocSize"=dword:000001f4 
11 加快菜单显示速度 
[HKEY_CURRENT_USER\Control Panel\Desktop] 
"MenuShowDelay"="0" 
12 彻底关闭 Dr_Warson 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows 
NT\CurrentVersion\AeDebug] 
"Auto"="0" 
13 打开启动优化功能 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Dfrg\BootOptimizeFunction] 
"Enable"="Y" 
14 开启硬件优化 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Vxd\BIOS] 
"CPUPriority"=dword:00000001 
"PCIConcur"=dword:00000001 
"FastDRAM"=dword:00000001 
"AGPConcur"=dword:00000001 
15 加速 zip 文件的拷贝和移动(禁用 windows 自带的 zip 功能) 
[­HKEY_CLASSES_ROOT\.zip\CompressedFolder] 
[­HKEY_CLASSES_ROOT\CLSID\{E88DCCE0­B7B3­11d1­A9F0­00AA0060FA31}] 
[­HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CompressedFolder] 
16 关闭"压缩旧文件"功能

36 

[­HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\V 
olumeCaches\Compress old files] 
17 关闭分组相似任务栏按钮 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advance 
d] 
"TaskbarGlomming"=dword:00000000 
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\Advan 
ced] 
"TaskbarGlomming"=dword:00000000 
18 系统失败 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl] 
不将事件写入系统日志 
"LogEvent"=dword:00000000 
不发送管理警报 
"SendAlert"=dword:00000000 
禁用自动重启动 
"AutoReboot"=dword:00000000 
不写入调试信息 
"CrashDumpEnabled"=dword:00000000 
19 允许为回收站重命名 
[HKEY_CLASSES_ROOT\CLSID\{645FF040­5081­101B­9F08­00AA002F954E}\ShellFol 
der] 
"Attributes"=hex:50,01,00,20 
"CallForAttributes"=dword:00000000 
20 让 IE6 可以 9 线程下载 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings] 
"MaxConnectionsPer1_0Server"=dword:00000009 
"MaxConnectionsPerServer"=dword:00000009 
21 禁止远程修改注册表 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winr 
eg] 
"RemoteRegAccess"=dword:00000001 
22 开启  IE  自动缩图功能 
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main] 
"Enable AutoImageResize"="yes" 
23 使 XP 系统支持 136G 以上的硬盘 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\atapi\Parameters] 
"EnableBigLba"=dword:00000001 
24 在所有 windows 窗口显示状态栏 
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main] 
"StatusBarOther"=dword:00000001 
25 去掉右键“新建”中的公文包、BMP、WAV 等 
[­HKEY_CLASSES_ROOT\.bfc\ShellNew] 
[­HKEY_CLASSES_ROOT\.doc\ShellNew]

37 

[­HKEY_CLASSES_ROOT\.rtf\ShellNew] 
[­HKEY_CLASSES_ROOT\.bmp\ShellNew] 
[­HKEY_CLASSES_ROOT\.wav\ShellNew] 
[­HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.bfc\ShellNew] 
[­HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.bmp\ShellNew] 
[­HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.doc\ShellNew] 
[­HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.rar\ShellNew] 
[­HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.rtf\ShellNew] 
[­HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.zip\ShellNew] 
[­HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\FlashFXP.exe] 
[­HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\moviemk.exe] 
[­HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\mspaint.exe] 
[­HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\shimgvw.dll] 
[­HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\wordpad.exe] 
[­HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\zipfldr.dll] 
26 显示所有文件扩展名 
[HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanc 
ed] 
"HideFileExt"=dword:00000000 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advance 
d] 
"HideFileExt"=dword:00000000 
27 删除 WinXP 磁盘分区的默认共享 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\paramete 
rs] 
"AutoShareServer"=dword:00000000 
"AutoShareWks"=dword:00000000 
28 改变最大图标缓冲 
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorer] 
"Max Cached Icons"="7500" 
29 自动检测硬盘等待时间 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager] 
"AutoChkTimeOut"=dword:0 
30 禁止启动时弹出错误信息 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows] 
"NoPopUpsOnBoot"="1" 
31 当文件没有关联的打开程序时,禁止从网络上去搜索打开类型 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Sys 
tem] 
"NoInternetOpenWith"=dword:00000001 
32 在开始菜单显示"网上邻居"

38 

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advance 
d] 
"Start_ShowNetPlaces"=dword:1 
33 禁止在开始菜单显示"打印机和传真" 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advance 
d] 
"Start_ShowPrinters"=dword:0 
34 禁止在开始菜单显示"帮助" 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advance 
d] 
"Start_ShowHelp"=dword:0 
35 禁止在开始菜单显示"设定程序访问和默认值" 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advance 
d] 
"Start_ShowSetProgramAccessAndDefaults"=dword:0 
36 自动终止无响应程序 
[HKEY_CURRENT_USER\Control Panel\desktop] 
"AutoEndTasks"="1" 
37 启动 XP 的路由功能和 IP 的过滤功能 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] 
"IPEnableRouter"=dword:00000001 
"EnableSecurityFilters"=dword:00000001 
38 使用最大传输单元(1500) 
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\NetTrans] 
"MaxMTU"=dword:5DC 
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net] 
"MaxMTU"=dword:5DC 
39 加速 TCP/IP windows size(372300) 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] 
"TCPWindowSize"=dword:5AE4C 
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters] 
"TCPWindowSize"=dword:5AE4C 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] 
"GlobalMaxTcpWindowSize"=dword:5AE4C 
40TCP/IP 分组寿命(TTL)(64) 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] 
"DefaultTTL"=dword:40 
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters] 
"DefaultTTL"=dword:40 
41 加速  selectiove acknowledgement 
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\MSTCP] 
"NameSrvQueryTimeout"=­ 
[HKEY_LOCAL_MACHINE\System\ControlSet001\Services\VxD\MSTCP]

39 

"NameSrvQueryTimeout"=­ 
42 加速 TCP 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] 
"EnablePMTUBHDetect"=­ 
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters] 
"EnablePMTUBHDetect"=­ 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] 
"EnablePMTUDiscovery"=­ 
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters] 
"EnablePMTUDiscovery"=­ 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] 
"SackOpts"=dword:1 
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters] 
"SackOpts"=dword:1 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] 
"Tcp1323Opts"=dword:3 
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters] 
"Tcp1323Opts"=dword:3 
43 打开快速启动 
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Stre 
ams\Desktop] 
"TaskbarWinXP"=hex:0c,00,00,00,08,00,00,00,02,00,00,00,00,00,00,00,b0,e2,2b,\ 
d8,64,57,d0,11,a9,6e,00,c0,4f,d7,05,a2,22,00,1c,00,0a,01,00,00,1a,00,00,00,\ 
01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,4c,00,00,00,01,14,02,00,00,\ 
00,00,00,c0,00,00,00,00,00,00,46,83,00,00,00,10,00,00,00,a0,b0,48,5e,89,8d,\ 
bd,01,00,d8,9e,e4,2a,8d,bd,01,00,45,fe,5e,89,8d,bd,01,00,00,00,00,00,00,00,\ 
00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,13,01,14,00,1f,0f,e0,4f,\ 
d0,20,ea,3a,69,10,a2,d8,08,00,2b,30,30,9d,19,00,23,44,3a,5c,00,00,00,00,00,\ 
00,00,00,00,00,00,00,00,00,00,00,00,cd,97,15,00,31,00,00,00,00,00,af,24,5c,\ 
b9,10,80,57,69,6e,6e,74,00,00,20,00,31,00,00,00,00,00,af,24,a3,b9,10,00,50,\ 
72,6f,66,69,6c,65,73,00,50,52,4f,46,49,4c,45,53,00,19,00,31,00,00,00,00,00,\ 
c1,24,08,92,10,00,69,65,35,30,30,2e,30,30,30,00,00,28,00,31,00,00,00,00,00,\ 
c1,24,08,92,10,00,41,70,70,6c,69,63,61,74,69,6f,6e,20,44,61,74,61,00,41,50,\ 
50,4c,49,43,7e,31,00,21,00,31,00,00,00,00,00,c5,22,9d,91,10,00,4d,69,63,72,\ 
6f,73,6f,66,74,00,4d,49,43,52,4f,53,7e,31,00,29,00,31,00,00,00,00,00,d3,22,\ 
32,a6,10,00,49,6e,74,65,72,6e,65,74,20,45,78,70,6c,6f,72,65,72,00,49,4e,54,\ 
45,52,4e,7e,31,00,24,00,31,00,00,00,00,00,db,22,76,ba,10,00,51,75,69,63,6b,\ 
20,4c,61,75,6e,63,68,00,51,55,49,43,4b,4c,7e,31,00,00,00,8d,00,00,00,1c,00,\ 
00,00,01,00,00,00,1c,00,00,00,36,00,00,00,0d,f0,ad,ba,8c,00,00,00,1a,00,00,\ 
00,03,00,00,00,e7,18,2d,23,10,00,00,00,49,45,35,30,30,5f,58,31,43,00,43,3a,\ 
5c,57,49,4e,4e,54,5c,50,72,6f,66,69,6c,65,73,5c,49,45,35,30,30,2e,30,30,30,\ 
5c,41,70,70,6c,69,63,61,74,69,6f,6e,20,44,61,74,61,5c,4d,69,63,72,6f,73,6f,\ 
66,74,5c,49,6e,74,65,72,6e,65,74,20,45,78,70,6c,6f,72,65,72,5c,51,75,69,63,\ 
6b,20,4c,61,75,6e,63,68,00,00,10,00,00,00,05,00,00,a0,1a,00,00,00,a3,00,00,\

40 

00,00,00,00,00,08,00,00,00,02,00,00,00,cc,00,00,00,01,00,00,00,03,00,00,00,\ 
4a,00,00,00,01,00,00,00,40,00,32,00,e6,01,00,00,c4,24,15,9f,20,00,4c,61,75,\ 
6e,63,68,20,49,6e,74,65,72,6e,65,74,20,45,78,70,6c,6f,72,65,72,20,42,72,6f,\ 
77,73,65,72,2e,6c,6e,6b,00,4c,41,55,4e,43,48,7e,32,2e,4c,4e,4b,00,00,00,40,\ 
00,00,00,02,00,00,00,36,00,32,00,48,02,00,00,c4,24,15,9f,20,00,4c,61,75,6e,\ 
63,68,20,4f,75,74,6c,6f,6f,6b,20,45,78,70,72,65,73,73,2e,6c,6e,6b,00,4c,41,\ 
55,4e,43,48,7e,31,2e,4c,4e,4b,00,00,00,36,00,00,00,00,00,00,00,2c,00,32,00,\ 
51,00,00,00,ec,22,46,39,20,00,53,68,6f,77,20,44,65,73,6b,74,6f,70,2e,73,63,\ 
66,00,53,48,4f,57,44,45,7e,31,2e,53,43,46,00,00,00,52,00,00,00,e0,00,00,00,\ 
00,00,00,00,16,00,00,00,00,00,00,00,00,00,00,00,16,00,00,00,00,00,00,00,01,\ 
00,00,00,01,00,00,00,aa,4f,28,68,48,6a,d0,11,8c,78,00,c0,4f,d9,18,b4,37,02,\ 
00,00,e0,00,00,00,00,00,00,00,16,00,00,00,00,00,00,00,00,00,00,00,16,00,00,\ 
00,00,00,00,00,01,00,00,00 
44 安装驱动时不搜索 Windows Update(检测新的 HW 认证时) 
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\DriverSearching] 
"DontSearchWindowsUpdate"=dword:00000001 
"DontPromptForWindowsUpdate"=dword:00000001 
45 设置主页 
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main] 
"NoUpdateCheck"=dword:00000001 
"NoJITSetup"=dword:00000001 
"Start Page"="about:blank" 
"StatusBarOther"=dword:00000001 
"StatusBarWeb"=dword:00000001 
46 下载完成后自动关闭 
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main] 
"NotifyDownloadComplete"="no" 
47 设置记事本默认为自动换行方式 
[HKEY_CURRENT_USER\Software\Microsoft\NotePad] 
"fwrap"=dword:1 
48 用记事本打开 nfo 文件 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts 
\.nfo] 
"Application"="NOTEPAD.EXE" 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts 
\.nfo\OpenWithList] 
"a"="Explorer.exe" 
"MRUList"="ba" 
"b"="NOTEPAD.EXE" 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts 
\.nfo\OpenWithProgids] 
"MSInfo.Document"=hex(0): 
48 显示桌面系统图标 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDes

41 

ktopIcons] 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDes 
ktopIcons\ClassicStartMenu] 
"{450D8FBA­AD25­11D0­98A8­0800361B1103}"=dword:00000000 
"{20D04FE0­3AEA­1069­A2D8­08002B30309D}"=dword:00000000 
"{208D2C60­3AEA­1069­A2D7­08002B30309D}"=dword:00000000 
"{871C5380­42A0­1069­A2EA­08002B30309D}"=dword:00000000 
"{645FF040­5081­101B­9F08­00AA002F954E}"=dword:00000000 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDes 
ktopIcons\NewStartPanel] 
"{450D8FBA­AD25­11D0­98A8­0800361B1103}"=dword:00000000 
"{20D04FE0­3AEA­1069­A2D8­08002B30309D}"=dword:00000000 
"{208D2C60­3AEA­1069­A2D7­08002B30309D}"=dword:00000000 
"{871C5380­42A0­1069­A2EA­08002B30309D}"=dword:00000000 
"{645FF040­5081­101B­9F08­00AA002F954E}"=dword:00000000 
49 有可用下载时通知我但不要自动下载 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsU 
pdate\Auto Update] 
"AUOptions"=dword:00000002 
50 禁用 Messenger 服务
(为了评比垃圾信息,
而不会影响你的 Windows/MSN Messenger) 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Messenger] 
"Start"=dword:00000004 
51 不加载多余的 DLL 文件 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer] 
"AlwaysUnloadDLL"=dword:00000001 
52 关闭程序仅等待 1 秒_程序出错时等待 0.5 秒 
[HKEY_CURRENT_USER\Control Panel\Desktop] 
"HungAppTimeout"="200" 
53 加快开关机机速度,自动关闭停止响应 
[HKEY_USERS\.DEFAULT\Control Panel\Desktop] 
"AutoEndTasks"="1" 
"HungAppTimeout"="200" 
"WaitToKillAppTimeout"="1000" 
54 自动关闭不响应程序 
[HKEY_CURRENT_USER\Control Panel\Desktop] 
"AutoEndTasks"=dword:00000001 
"WaitToKillAppTimeout"="1000" 
55 清除共享文件夹 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\M 
yComputer\NameSpace\DelegateFolders] 
56 删除图标快捷方式的字样 
[HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Explorer] 
"Link"=hex:00,00,00,00 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer]

42 

"Link"=hex:0,0,00,00 
57 禁用杀毒软件提醒 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Security Center] 
"AntiVirusDisableNotify"=dword:00000001 
58 禁用防火墙提醒 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Security Center] 
"FirewallDisableNotify"=dword:00000001 
59 禁用自动更新提醒 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Security Center] 
"UpdatesDisableNotify"=dword:00000001 
60 系统属性右键添加“设备管理器” 
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0­3AEA­1069­A2D8 
­08002B30309D}\shell\DevMgr] 
@=hex(2):40,00,25,00,77,00,69,00,6e,00,64,00,69,00,72,00,25,00,5c,00,73,00,79,\ 
00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,64,00,65,00,76,00,6d,00,67,00,\ 
72,00,2e,00,64,00,6c,00,6c,00,2c,00,2d,00,34,00,00,00 
"SuppressionPolicy"=dword:4000003c 
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0­3AEA­1069­A2D8 
­08002B30309D}\shell\DevMgr\command] 
@=hex(2):25,00,77,00,69,00,6e,00,64,00,69,00,72,00,25,00,5c,00,73,00,79,00,73,\ 
00,74,00,65,00,6d,00,33,00,32,00,5c,00,6d,00,6d,00,63,00,2e,00,65,00,78,00,\ 
65,00,20,00,2f,00,73,00,20,00,25,00,77,00,69,00,6e,00,64,00,69,00,72,00,25,\ 
00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,64,00,65,00,\ 
76,00,6d,00,67,00,6d,00,74,00,2e,00,6d,00,73,00,63,00,00,00 
61 关闭系统还原 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\srservice] 
"Start"=dword:00000004 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows 
NT\CurrentVersion\SystemRestore] 
"DisableSR"=dword:00000001 
62 修复 AMD 处理器的 AGP 内存分页问题 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session 
Manager\Memory Management] 
"LargePageMinimum"=dword:ffffffff 
63 显示系统文件夹的内容(移除系统文件夹障碍) 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\WebVie 
w\BarricadedFolders] 
"shell:ControlPanelFolder"=dword:00000000 
"shell:SystemDriveRootFolder"=dword:00000000 
"shell:ProgramFiles"=dword:00000000 
"shell:Windows"=dword:00000000 
"shell:System"=dword:0000000 
64 用于 windows 不能自动设置硬盘或者光驱为 DMA 模式时,打开 DMA 模式 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A­E325

43 

­11CE­BFC1­08002BE10318}\0001] 
"MasterDeviceTimingModeAllowed"=dword:ffffffff 
"SlaveDeviceTimingModeAllowed"=dword:ffffffff 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A­E325 
­11CE­BFC1­08002BE10318}\0002] 
"MasterDeviceTimingModeAllowed"=dword:ffffffff 
"SlaveDeviceTimingModeAllowed"=dword:ffffffff 
65 加速打开我的电脑和资源管理器 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\stisvc] 
"Start"=dword:00000004 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer] 
"NoSaveSettings"=dword:00000000 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advance 
d] 
"NoNetCrawling"=dword:00000001 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Ex 
plorer] 
"NoRemoteRecursiveEvents"=dword:00000001 
66 禁止 IE“发送信息到 Internet”提示 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet 
Settings\Zones\3] 
"1601"=dword:00000000 
67 当你第一次运行 IE6 时跳过 Internet 连接向导 
[HKEY_CURRENT_USER\Software\Microsoft\Internet Connection Wizard] 
"Completed"=dword:00000001 
68 自动接受 Windows Media Player 用户协议(EULA)(针对 XPSP2 第一次运行时) 
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\WindowsMediaPlayer] 
"GroupPrivacyAcceptance"=dword:00000001 
69 在任务栏显示音量图标 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\SysTray] 
"Services"=dword:0000001f 
70Messenger 不随 Outlook 启动 
[HKEY_LOCAL_MACHINE\Software\Microsoft\Outlook Express] 
"Hide Messenger"=dword:00000002 
71 当你删除 Messenger 时修正减慢 Outlook 启动的问题,并且禁止了动画屏幕 
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{FB7199AB­79BF­11d2­8D94­ 
0000F875C541}\InProcServer32] 
"ThreadingModel"="Apartment" 
@="" 
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{FB7199AB­79BF­11d2­8D94­ 
0000F875C541}\LocalServer32] 
"ThreadingModel"="Apartment" 
@="" 
72 不让 Messenger 在每次系统启动时不知不觉的启动

44 

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Messenger\Client] 
"PreventAutoRun"=dword:00000001 
73 防止 messenger 每 6 分钟新添加下载 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MessengerService\Policies] 
"DisableCrossPromo"=hex:80 
74 在 Outlook 中禁止 Messenger 分类 
[HKEY_LOCAL_MACHINE\Software\Microsoft\Outlook Express] 
"Hide Messenger"=dword:00000002 
75 在 Outlook 2003 中禁止 Messenger 分类 
[HKEY_CURRENT_USER\Software\Policies\Microsoft\Office\11.0\Outlook\InstantMessag 
ing] 
"ForceDisableIM"=dword:00000001 
76 为所有帐户启用 ClearType 字体效果 
[HKEY_CURRENT_USER\Control Panel\Desktop] 
"FontSmoothingType"=dword:00000002 
77 开启 DOS 提示符下按 Tab 键自动完成功能 
[HKEY_CURRENT_USER\Software\Microsoft\Command Processor] 
"CompletionChar"=dword:9 
78 激活屏幕截图功能 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectDraw] 
"EnablePrintScreen"=dword:1 
79 禁止“搜索狗”、使用高级搜索 
[HKEY_CURRENT_USER\Software\Microsoft\Search Assistant] 
"Actor"="" 
"SocialUI"=dword:00000000 
"UsageCount"=dword:00000000 
"UseAdvancedSearchAlways"=dword:00000001 
80 搜索所有文件类型 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ContentIndex] 
"FilterFilesWithUnknownExtensions"=dword:00000001 
81 在 DOS 中支持长文件名 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor] 
"CompletionChar"=dword:00000009 
82 当文件没有关联的打开程序时,禁止从网络上去搜索打开类型 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Sys 
tem] 
"NoInternetOpenWith"=dword:00000001 
83 启用蜂鸣(打开开机音乐) 
[HKEY_CURRENT_USER\Control Panel\Sound] 
"Beep"="yes" 
"ExtendedSounds"="yes" 
84 在右键添加 CMD 
[HKEY_CLASSES_ROOT\Directory\shell\Command] 
@="在本目录下运行 CMD"

45 

[HKEY_CLASSES_ROOT\Directory\shell\Command\command] 
@="cmd.exe /k \"cd %L\"" 
85  系统退出时不保存打开窗口的位置和大小,任务栏中工具栏的位置,但依然保存桌
面图标位置、开始菜单排序等设置 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer] 
"NoSaveSettings"=dword:00000001 
86 每个资源管理器窗口使用单独进程 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advance 
d] 
"SeparateProcess"=dword:00000001 
87 每个 IE 窗口使用单独进程 
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Browse 
NewProcess] 
"BrowseNewProcess"="yes" 
88 禁止 WINDOWS 平滑卷动 
[HKEY_CURRENT_USER\Control Panel\Desktop] 
"SmoothScroll"=dword:00000000 
89 关闭窗口动画效果 
[HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics] 
"MinAnimate"="0" 

1.6  服务优化基础 
1.6.1  系统服务的基本概念
系统服务的概念: 
1.在 Windows 2000/XP/2003 系统中,服务是指执行指定系统功能的程序、例程或进程,
以便支持其他程序,尤其是低层(接近硬件)程序。通过网络提供服务时,服务可以在 Active 
Directory(活动目录)中发布,从而促进了以服务为中心的管理和使用。 
2.服务是一种应用程序类型,它在后台运行。服务应用程序通常可以在本地和通过网络
为用户提供一些功能,例如客户端/服务器应用程序、Web  服务器、数据库服务器以及其他
基于服务器的应用程序。
系统服务的作用: 
(1)启动、停止、暂停、恢复或禁用远程和本地计算机服务。 
(2)管理本地和远程计算机上的服务。 
(3)设置服务失败时的故障恢复操作。例如,重新自动启动服务或重新启动计算机。 
(4)为特定的硬件配置文件启用或禁用服务。 
(5)查看每个服务的状态和描述。 
Windows 提供很多服务,但是并非所有的服务普通用户都用得到,这样就造成了很多不
必要的系统资源浪费。所以,我们可以去关闭这些普通用户用不到的服务以节省系统资源。
如果说注册表优化是以修正当前系统参数值来提高系统运行效率的话,那么服务优化就是通
过关闭平时无用的服务来节省系统资源从而提高系统运行速度的方法。

46 

1.6.2  系统服务优化指南
下面来阐述一下笔者对 XP 的 79 项服务的基本理解,希望对大家有帮助。 
1、Alerter 
这个服务用于通知用户一些安全警告,与 Messenger 服务配合起来可以在局域网上公布
服务器传来的各种警报信息。对于不处于局域网或处于局域网却无发放这些警报的局域网服
务器的用户来说,这个服务是无用的。 
2、Application Layer Gateway Service 
这个主要和 Windows 自带的网络防火墙有关,一定程度上还牵扯到 Windows 的网络共
享管理,如果不需要 Windows 自带的防火墙,这个服务可以关掉。 
3、Application Management 
应用程序管理,此服务用于管理应用程序的安装、修复、卸载,并能监视文件复原并通
过复原排除基本故障等。这个是控制应用软件安装变更的重要服务。 
4、Automatic Updates 
这个用于 Windows 的自动更新。如果这个服务被禁用,Windows 将不能使用 Windows 
Update 网站的自动更新功能。 
5、Background Intelligent Transfer Service 
这个服务与  Windows  操作系统进行后台的客户端和服务端的通信有关。最明显的应用
是与 Windows Update 相关联,
如果这个服务被禁用,那么 Windows 将不能自动进行 Windows 
Update。 
6、ClipBook 
剪切簿查看器,用于本地计算机与远程计算机共享剪切簿内的内容,在远程连接时算是
比较有用的服务,但是大多数计算机很少进行本地计算机与远程计算机的剪切簿共享,所以
这个服务可以关闭。 
7、COM+ Event System 
这个是  Windows  的一个重要服务,用于支持各种系统时间的通知服务,也有一些软件
的运行需要这个服务的运作。如果此服务被禁止,将不提供登陆和注销通知。 
8、COM+ System Application 
这个服务用来管理 COM+ Event System 
9、Computer Browser 
用于浏览网络计算机,并更新网络计算机列表。如果停止这个服务,网上邻居中的网络
计算机列表将不进行更新,网络计算机的各种变更将不在本地计算机显示。 
10、Cryptographic Services 
微软的一种认证程序,是微软 Windows Hardware Quality Lab(WHQL)的一种,如果通过 
Automatic Updates 升级驱动程序,就需要这个了。 
11、DCOM Server Process Launcher 
为 DCOM 服务提供加载功能,已知关闭这个服务会让一部分手动服务在需要启动的时
候无法正常启动,还会造成一部分应用程序无法正常安装。 
12、DHCP Client 
DHCP 客户端,用于自动获取 IP 和 DNS。 
13、Distributed Link Tracking Client 
这个用于同步不同计算机  NTFS  分区格式的存储器中的数据,普通用户用不到这个功
能。 
14、Distributed Transaction Coordinator

47 

用于协调多个服务器、消息队列、文件系统等资源管理器的事务,普通用户用不到这个
功能。
15、DNS Client 
DNS 客户端,用于本机解析 DNS 地址与定位 Active Directory 域控制器。 
16、Error Reporting Service 
错误报告,用于收集 Windows 系统的错误信息并创建错误报告发送至微软。 
17、Event Log 
事件日志,用来记录并保存系统的各种运行日志。 
18、Fast User Switching Compatibility 
快速用户切换,用于在  Windows  启动后,在多用户间进行切换。单用户使用的计算机
或多用户却不进行用户切换的计算机可以禁用这个服务。 
19、Help and Support 
微软的帮助中心服务,用于向用户提供各种关于系统的帮助。如果从来不看这些帮助的
话可以禁用这个服务。 
20、HTTP SSL 
用于实现 HTTPS 安全超文本传输协议,日常中很少见,通常只使用 HTTP 普通超文本
传输协议。普通用户可以禁用这个服务。 
21、Human Interface Device Access 
这个是关于一些“人体学设备”的服务,用于使用各种键盘、鼠标或者其他设备中的额
外快捷键。这个服务和 HID 设备有关。 
22、IMAPI CD­Burning COM Service 
为  Windows  自带的光盘刻录功能提供的服务,禁用这个服务后,第三方刻录软件仍然
可以正常使用。 
23、Indexing Service 
索引服务,在本地或远程计算机的各存储器中添加索引,以能更快的搜索需要的文件。
这个服务与 NTFS 格式存储器分区的“建立此驱动器索引”有关。 
24、IPSEC Service 
IP 安全性服务,用于协助保护经由网络传送的数据的安全性。主要为 VPN 网络提供安
全保护功能,普通用户几乎用不上。 
25、Logical Disk Manager 
逻辑磁盘管理器,用于管理本地磁盘的各个逻辑分区,并向逻辑磁盘管理器控制服务发
送各种关于逻辑磁盘分区的信息。 
26、Logical Disk Manager Administrative Service 
逻辑磁盘管理器控制服务,用于衔接逻辑磁盘管理器与用户之间的平台,用户可以在 
MMC 中调节逻辑磁盘管理器控制服务的各个参数,逻辑磁盘管理器控制服务会将这些参数
发布给逻辑磁盘管理器,同样也会将逻辑磁盘管理器的各个信息反馈给辑磁盘管理器控制服
务,辑磁盘管理器控制服务再将这些信息展现给用户。 
27、Messenger 
用于传送 net send 消息或者 Alerter 服务消息。这个服务与 Windows Messenger 无关。由
于这个服务经常被恶意用来在网络间发送广告,以及某些黑客程序会利用本服务进行各种攻
击尝试,所以这个服务建议设置为禁用。 
28、MS Software Shadow Copy Provider 
卷影复制,是微软的一种用于备份数据以及寻找丢失数据的工具,使用简便,主要面向
非 IT 专业人员。但是由于 Symantec  Ghost 的运用,Ghost 在各方面功能上都要强于卷影复

48 

制,这项服务功能渐渐被忽略。 
29、Net Logon 
这个服务被用于登陆局域网中的域,并响应账户登陆身份验证事件。一般用户用不到这
个功能。 
30、NetMeeting Remote Desktop Sharing 
这个用于微软 NetMeeting 应用程序的网络间桌面共享功能。当前可以代替 NetMeeting 
的网络通讯工具很多,这个服务也失去了它应有的功效。 
31、Network Connections 
网络连接管理服务,管理“网络和拨号连接”中的对象。这个服务主要用来管理网络连
接,和网络连接是否连接成功等无关。如果已经连接入网络,关闭这个服务是不会影响网络
的连通性。 
32、Network DDE 
为在一台或多台计算机上运行的程序提供动态数据交换(DDE)的网络传输和安全。
这个也是普通用户不会用到的功能。 
33、Network DDE DSDM 
这个是 Network  DDE 服务的扩充,用于管理动态数据交换网络共享。这个服务功能与 
Network DDE 一样,普通用户几乎用不到。 
34、Network Location Awareness (NLA) 
收集网络配置和位置信息,包括 IP 的修改、DNS 的变更等等,并在这些信息变化的时
候通知应用程序。这只是个管理程序,将各种网络信息变更通知给用户,关闭这个服务不会
影响网络信息的变化,但是会影响用户得知这些消息。例如,关闭这个服务以后如果更改了
网络连接,右下角的网络连接图标将出现问题。 
35、Network Provisioning Service 
为自动网络提供给予域的 XML 配置文件。这个,也是个既不常用的服务。 
36、NT LM Security Support Provider 
为使用传输协议而不是命令管道的远程过程调用程序提供安全机制。Telnet 依赖这个程
序,如果这个服务关闭 Telnet 将不能正常使用。当然,如果用不到 Telnet,这个的确可以禁
用了。
37、Performance Logs and Alerts 
收集本地或远程计算机基于预先配置的日程参数的性能数据,然后将这些数据写入日志
或启用警报。这个服务与系统稳定性有关,而且如果启用预读取功能是一定要打开这个服务
的。 
38、Plag and Play 
即插即用服务,能自行识别或仅需要用户做极少的操作就可以识别新硬件的变更。很多
服务都依赖这个服务,禁用这个服务会影响系统的稳定性。 
39、Portable Media Serial Number Service 
这个和 Windows Media Player 系列配合,用来获取正版音乐的认证代码或者其他认证机
制,控制盗版音乐文件在本地计算机与便携播放器间的复制。 
40、Print Spooler 
将文件加载到内存中以供打印的需要。打印机和一些虚拟打印软件需要这个服务的支
持。 
41、Protected Storage 
这个是用来安全存储本地计算机上的各种密码的服务,例如 Outlook、拨号连接等等。 
42、QoS RSVP

49 

这个会在某些网络程序,例如  BT、eMule,占用大量网络资源时为计算机保留  20%的
网络带宽以供其他应用程序使用。 
43、Remote Access Auto Connection Manager 
远程访问自动连接管理器,用于自动连接远程共享的文件夹。 
44、Remote Access Connection Manager 
远程访问连接管理器,用于创建网络连接。 
45、Remote Desktop Help Session Manager 
微软远程协助服务,如果不用远程协助,大可关闭这个服务。 
46、Remote Procedure Call (RPC) 
这个是系统的核心服务,很多的服务依赖这个服务的运行才可以运行! 
47、Remote Procedure Call (RPC) Locator 
这个服务用于管理 RPC 名称服务数据库。 
48、Remote Registry 
远程注册表修改服务,
可以使远程计算机修改本地计算机的注册表。这是个方便的服务,
同样也方便了网络攻击者利用这个服务做一些破坏工作。 
49、Removable Storage 
这个服务关系到移动存储设备。 
50、Routing and Remote Access 
系统自带的路由功能。 
51、Secondary Logon 
二次登陆服务,可以暂时让非管理员用户使用管理员权限来运行某些程序,个人的单用
户的计算机中用不到这个服务。 
52、Security Accounts Manager 
用于存储本地用户账户的安全信息的服务。 
53、Security Center 
XP SP2  特有的安全中心服务,用于监控计算机的各种与安全相关的配置,例如杀毒、
防火墙、自动升级等,这只是个监控服务,关闭这个服务不会影响到安全配置。 
54、Server 
服务器功能,对网络的其他计算机提供网络共享、打印机共享等。 
55、Shell Hardware Detection 
硬件的自动播放功能,例如自动播放插入的光盘或者  U  盘上的信息,这个服务会自动
读取存储器根目录下的 autorun.inf 文件,并根据 autorun.inf 中的指示执行存储器中的可执行
文件。目前许多病毒利用了这个功能。 
56、Smart Card 
系统的读卡器支持服务,如果此服务被禁止,计算机将无法识别和读取智能卡。 
57、SSDP Discovery Service 
启用网络上的 UPnP 设备发现。这个功能现在被很多的网络数据传输软件广泛运用。 
58、System Event Notification 
系统事件通知,记录和显示各种网络、系统事件,并将这些事件传送给 COM+ 
59、System Restore Service 
XP  SP2 的系统还原功能,可以还原系统到以前创立的还原点,还原系统配置等。比较
方便,但是不如 Ghost 功能强大。 
60、Task Scheduler 
计划任务,可以提前计划让计算机在什么时刻执行什么,很多杀毒软件依赖这个服务来

50 

执行各种定制任务。 
61、TCP/IP NetBIOS Helper 
这个服务是对  TCP/IP  NetBIOS  网络传输协议的支持,如果不用  NetBIOS  网络或者 
WINS,这个服务可以关闭。 
62、Telephony 
一些拨号的调制解调器或者一些 DSL/Cable 等能用到这个服务,如果是局域网不需要拨
号,那么这个服务可以关闭。 
63、Telnet 
允许远程计算机使用 Telnet 登陆本计算机并执行某些程序,这个一般会引起网络安全问
题,所以不用的话就关闭。 
64、Terminal Services 
允许多位用户连接并控制一台计算机,并且在远程计算机上显示本地计算机的桌面和应
用程序。这个服务是远程桌面、用户快速切换、远程协助和终端服务器的基础结构。如果不
用微软的远程桌面等可以关闭这个服务,关闭这个服务会造成任务管理器中的用户名消失。 
65、Themes 
Windows 主题服务。关闭这个将不能加载主题文件。 
66、Uninterruptible Power Supply 
不间断供电支持服务。如果有 UPS 等不间断供电设备可启用本服务。 
67、Universal Plug and Play Device Host 
这个服务用来侦测安装即插即用设备,像打印机、扫描仪等。 
68、Volume Shadow Copy 
卷影复制。如果此服务被终止,备份将没有卷影复制,并且备份会失败。只有使用卷影
复制这个服务才有意义,如果只使用 Ghost 而不使用卷影复制,这个服务可以禁用。 
69、WebClint 
功能不是很明确,目前仅了解到这个和.Net 有关。如果不使用.Net 类,可以关闭这个服
务。 
70、Windows Audio 
Windows 的声音服务,如果这个服务被终止,音频设备及其音效都不能正常使用。简单
的说,关闭这个服务计算机就没有声音了。 
71、Windows Firewall/Internet Connectiong Sharing 
这个与 Windows 自带防火墙以及网络共享有关。 
72、Windows Image Acquisition (WIA) 
这个与扫描仪或者摄像头等视频捕获设备有关。 
73、Windows Installer 
添加、修改和删除各种软件包所需的服务。 
74、Windows Management Instrumentation 
提供一个标准的基础结构来监视和管理系统资源的服务,系统服务,不要更改! 
75、Windows Management Instrumentation Driver Extensions 
与驱动程序交换管理信息,安装驱动程序时需要这个服务。 
76、Windows Time 
用于使当前计算机的时间与 Internet 时间相同步,
如果手动调节时间则不需要这个服务。 
77、Wireless Zero Configuration 
自动配置无线网卡的服务,如果没有无线网卡当然可以禁用 
78、WMI Performance Adapter

51 

从 WMI HiPerf 提供程序提供性能库信息。一般用户用不到。 
79、Workstation 
创建和维护到远程服务的客户端网络连接。这个服务如果被禁用,局域网共享将出现问
题。 

1.6.3 系统服务优化的自动化实现
了解了服务优化的相关内容,相信现在的您已经对服务优化有了一定程度的认识。但是
如果我们经常去手工优化服务无疑是个复杂的工作。 
Windows 下有一个命令可以调整服务的启用与否和运行状态,这个命令就是 SC 命令。 
SC 命令的参数也分的多,我们只需要其中的几个就可以了, 
SC Config,这个命令用来服务的启用状态,可以将服务修改为 Disabled 
(禁用)
、 
Demand 
(手动)
、Auto(自动)三种模式。 
SC Start,用来即时的启动一个服务。 
SC Stop,用来即时的关闭一个服务。
为了实现自动的优化服务,下面我们使用 AU3 脚本来实现: 
Dim $DisabledServ[31],$DemandServ[24],$AutoServ[29] 
Dim $DisabledServName[31],$DemandServName[24],$AutoServName[29] 
Dim $i,$t 
$t=0 
;$Disabled 
$DisabledServ[1] = "Alerter" 
$DisabledServ[2] = "ClipSrv" 
$DisabledServ[3] = "TrkWks" 
$DisabledServ[4] = "MSDTC" 
$DisabledServ[5] = "ERSvc" 
$DisabledServ[6] = "FastUserSwitchingCompatibility" 
$DisabledServ[7] = "helpsvc" 
$DisabledServ[8] = "HidServ" 
$DisabledServ[9] = "ImapiService" 
$DisabledServ[10] = "CiSvc" 
$DisabledServ[11] = "Messenger" 
$DisabledServ[12] = "SwPrv" 
$DisabledServ[13] = "mnmsrvc" 
$DisabledServ[14] = "NetDDE" 
$DisabledServ[15] = "NetDDEdsdm" 
$DisabledServ[16] = "RSVP" 
$DisabledServ[17] = "RemoteRegistry" 
$DisabledServ[18] = "NtmsSvc" 
$DisabledServ[19] = "RemoteAccess" 
$DisabledServ[20] = "seclogon" 
$DisabledServ[21] = "wscsvc" 
$DisabledServ[22] = "ShellHWDetection"

52 

$DisabledServ[23] = "SENS" 
$DisabledServ[24] = "srservice" 
$DisabledServ[25] = "TlntSvr" 
$DisabledServ[26] = "TermService" 
$DisabledServ[27] = "UPS" 
$DisabledServ[28] = "VSS" 
$DisabledServ[29] = "WebClient" 
$DisabledServ[30] = "W32Time" 
$DisabledServName[1] = "Alerter" 
$DisabledServName[2] = "ClipBook" 
$DisabledServName[3] = "Distributed Link Tracking Client" 
$DisabledServName[4] = "Distributed Transaction Coordinator" 
$DisabledServName[5] = "Error Reporting Service" 
$DisabledServName[6] = "Fast User Switching Compatibility" 
$DisabledServName[7] = "Help and Support" 
$DisabledServName[8] = "Human Interface Device Access" 
$DisabledServName[9] = "IMAPI CD­Burning COM Service" 
$DisabledServName[10] = "Indexing Service" 
$DisabledServName[11] = "Messenger" 
$DisabledServName[12] = "MS Software Shadow Copy Provider" 
$DisabledServName[13] = "NetMeeting Remote Desktop Sharing" 
$DisabledServName[14] = "Network DDE" 
$DisabledServName[15] = "Network DDE DSDM" 
$DisabledServName[16] = "QoS RSVP" 
$DisabledServName[17] = "Remote Registry" 
$DisabledServName[18] = "Removable Storage" 
$DisabledServName[19] = "Routing and Remote Access" 
$DisabledServName[20] = "Secondary Logon" 
$DisabledServName[21] = "Security Center" 
$DisabledServName[22] = "Shell Hardware Detection" 
$DisabledServName[23] = "System Event Notification" 
$DisabledServName[24] = "System Restore Service" 
$DisabledServName[25] = "Telnet" 
$DisabledServName[26] = "Terminal Services" 
$DisabledServName[27] = "Uninterruptible Power Supply" 
$DisabledServName[28] = "Volume Shadow Copy" 
$DisabledServName[29] = "WebClient" 
$DisabledServName[30] = "Windows Time" 
;$Demand 
$DemandServ[1] = "AppMgmt" 
$DemandServ[2] = "COMSysApp" 
$DemandServ[3] = "HTTPFilter" 
$DemandServ[4] = "dmadmin" 
$DemandServ[5] = "Netlogon"

53 

$DemandServ[6] = "Netman" 
$DemandServ[7] = "xmlprov" 
$DemandServ[8] = "NtLmSsp" 
$DemandServ[9] = "SysmonLog" 
$DemandServ[10] = "WmdmPmSN" 
$DemandServ[11] = "RasAuto" 
$DemandServ[12] = "RasMan" 
$DemandServ[13] = "RDSessMgr" 
$DemandServ[14] = "RpcLocator" 
$DemandServ[15] = "SCardSvr" 
$DemandServ[16] = "SSDPSRV" 
$DemandServ[17] = "TapiSrv" 
$DemandServ[18] = "stisvc" 
$DemandServ[19] = "MSIServer" 
$DemandServ[20] = "Wmi" 
$DemandServ[21] = "WmiApSrv" 
;$DemandServ[] = "WudfSvc" 
;$DemandServ[] = "WMPNetworkSvc" 
$DemandServName[1] = "Application Management" 
$DemandServName[2] = "COM+ System Application" 
$DemandServName[3] = "HTTP SSL" 
$DemandServName[4] = "Logical Disk Manager Administrative Service" 
$DemandServName[5] = "Net Logon" 
$DemandServName[6] = "Network Connections" 
$DemandServName[7] = "Network Provisioning Service" 
$DemandServName[8] = "NT LM Security Support Provider" 
$DemandServName[9] = "Performance Logs and Alerts" 
$DemandServName[10] = "Portable Media Serial Number Service" 
$DemandServName[11] = "Remote Access Auto Connection Manager" 
$DemandServName[12] = "Remote Access Connection Manager" 
$DemandServName[13] = "Remote Desktop Help Session Manager" 
$DemandServName[14] = "Remote Procedure Call (RPC) Locator" 
$DemandServName[15] = "Smart Card" 
$DemandServName[16] = "SSDP Discovery Service" 
$DemandServName[17] = "Telephony" 
$DemandServName[18] = "Windows Image Acquisition (WIA)" 
$DemandServName[19] = "Windows Installer" 
$DemandServName[20] = "Windows Management Instrumentation Driver Extensions" 
$DemandServName[21] = "WMI Performance Adapter" 
;$Auto 
$AutoServ[1] = "ALG" 
$AutoServ[2] = "wuauserv" 
$AutoServ[3] = "BITS" 
$AutoServ[4] = "EventSystem"

54 

$AutoServ[5] = "Browser" 
$AutoServ[6] = "CryptSvc" 
$AutoServ[7] = "DcomLaunch" 
$AutoServ[8] = "Dhcp" 
$AutoServ[9] = "Dnscache" 
$AutoServ[10] = "Eventlog" 
$AutoServ[11] = "PolicyAgent" 
$AutoServ[12] = "dmserver" 
$AutoServ[13] = "Nla" 
$AutoServ[14] = "PlugPlay" 
$AutoServ[15] = "Spooler" 
$AutoServ[16] = "ProtectedStorage" 
$AutoServ[17] = "RpcSs" 
$AutoServ[18] = "SamSs" 
$AutoServ[19] = "lanmanserver" 
$AutoServ[20] = "Schedule" 
$AutoServ[21] = "LmHosts" 
$AutoServ[22] = "Themes" 
$AutoServ[23] = "upnphost" 
$AutoServ[24] = "AudioSrv" 
$AutoServ[25] = "SharedAccess" 
$AutoServ[26] = "winmgmt" 
$AutoServ[27] = "WZCSVC" 
$AutoServ[28] = "lanmanworkstation" 
$AutoServName[1] = "Application Layer Gateway Service" 
$AutoServName[2] = "Automatic Updates" 
$AutoServName[3] = "Background Intelligent Transfer Service" 
$AutoServName[4] = "COM+ Event System" 
$AutoServName[5] = "Computer Browser" 
$AutoServName[6] = "Cryptographic Services" 
$AutoServName[7] = "DCOM Server Process Launcher" 
$AutoServName[8] = "DHCP Client" 
$AutoServName[9] = "DNS Client" 
$AutoServName[10] = "Event Log" 
$AutoServName[11] = "IPSEC Services" 
$AutoServName[12] = "Logical Disk Manager" 
$AutoServName[13] = "Network Location Awareness (NLA)" 
$AutoServName[14] = "Plug and Play" 
$AutoServName[15] = "Print Spooler" 
$AutoServName[16] = "Protected Storage" 
$AutoServName[17] = "Remote Procedure Call (RPC)" 
$AutoServName[18] = "Security Accounts Manager" 
$AutoServName[19] = "Server" 
$AutoServName[20] = "Task Scheduler"

55 

$AutoServName[21] = "TCP/IP NetBIOS Helper" 
$AutoServName[22] = "Themes" 
$AutoServName[23] = "Universal Plug and Play Device Host" 
$AutoServName[24] = "Windows Audio" 
$AutoServName[25] = "Windows Firewall/Internet Connection Sharing (ICS)" 
$AutoServName[26] = "Windows Management Instrumentation" 
$AutoServName[27] = "Wireless Zero Configuration" 
$AutoServName[28] = "Workstation" 
For $i=1 To 30 
ToolTip(@CR&"  正在将如下服务调整为“禁用”:    "  &  @CRLF  &  "      "  & 
$DisabledServName[$i] & "      " & @CR, @DesktopWidth­260, @DesktopHeight­120) 
RunWait("sc config " & $DisabledServ[$i] & " start= disabled","",@SW_HIDE) 
Sleep($t) 
ToolTip(@CR&"  正在停用:    "  &  @CRLF  &  "      "  &  $DisabledServName[$i]  &  " 
" & @CR, @DesktopWidth­260, @DesktopHeight­120) 
RunWait("sc stop " & $DisabledServ[$i],"",@SW_HIDE) 
Sleep($t) 
Next 
For $i=1 To 21 
ToolTip(@CR&"  正在将如下服务调整为“手动”:    "  &  @CRLF  &  "      "  & 
$DemandServName[$i] & "      " & @CR, @DesktopWidth­260, @DesktopHeight­120) 
RunWait("sc config " & $DemandServ[$i] & " start= demand","",@SW_HIDE) 
Sleep($t) 
If $i=6 Or $i=12 Or $i=16 Or $i=17 Then 
ToolTip(@CR&"  正在启用:    "  &  @CRLF  &  "      "  &  $DemandServName[$i] 
& "      " & @CR, @DesktopWidth­260, @DesktopHeight­120) 
RunWait("sc start " & $DemandServ[$i],"",@SW_HIDE) 
Sleep($t) 
Else 
ToolTip(@CR&"  正在停用:    "  &  @CRLF  &  "      "  &  $DemandServName[$i] 
& "      " & @CR, @DesktopWidth­260, @DesktopHeight­120) 
RunWait("sc stop " & $DemandServ[$i],"",@SW_HIDE) 
Sleep($t) 
EndIf 
Next 
For $i=1 To 28 
ToolTip(@CR&"  正在将如下服务调整为“自动”:    "  &  @CRLF  &  "      "  & 
$AutoServName[$i] & "      " & @CR, @DesktopWidth­260, @DesktopHeight­120) 
RunWait("sc config " & $AutoServ[$i] & " start= auto","",@SW_HIDE) 
Sleep($t) 
ToolTip(@CR&"  正在启用:    " & @CRLF & "      " & $AutoServName[$i] & "      " 
& @CR, @DesktopWidth­260, @DesktopHeight­120) 
RunWait("sc start " & $AutoServ[$i],"",@SW_HIDE) 
Sleep($t)

56 

Next 
ToolTip(@CR&" 
@DesktopHeight­120) 
Sleep(3000) 

服 务 优 化 完 成 ! 

"  &  @CR,  @DesktopWidth­260, 

OK,学到这里,我们不仅了解了所有服务的用途,同时也学会了如何优化这些服务,
最后的这个自动优化的 AU3 代码可以帮助我们在很短的时间内完成服务的自动化优化,十
分高效。
服务的优化就讲到这里,虽然比较多,但是大多都是一些记忆性的内容。不过一定不要
死记硬背,一定要理解了、看懂了才能灵活运用。 

1.7  软件自动安装的实现 
1.7.1  静默安装参数实现软件自动安装
所谓静默安装参数,是在软件封包时指定的参数,这类参数用于让软件全自动的在系统
后台进行安装。
例 如,我们 以常用的 暴风影 音为例, 暴风影 音的静 默安装参 数为“ /S  /skipcnnic 
/skipasso”
,使用命令提示符切换到盛放暴风影音的文件夹,例如 D:\Skyfree 下,输入命令: 
StormV3.exe /S /skipcnnic /skipasso 
回车后,暴风影音就会执行静默安装,安装过程不需要任何人工参与也不会有任何提示,
几秒钟后安装就完成了。这种安装方法十分的稳定、简单、高效。
虽然有着诸多优点,但是有两个问题也是让人头疼的。
第一,软件静默安装参数的确定。
这的确是个让人头疼的问题,由于软件的封包方法不同,静默安装参数也不同,而且还
有一些软件的确就不提供静默安装参数。一般情况下,我们可以输入命令“软件名  /?”或
“软件名  /HELP”这类命令来查看静默安装参数,但是也并非所有的软件都提供“/?”或
“/HELP”参数,获得静默安装参数也就比较困难了。
根据大量的尝试,一般来说,软件的静默安装参数有“/S”、
“/SILENT”

“/S /v/qn”

“/SP­ 
/SILENT /NORESTART”等等。如果没办法确定一个软件的静默安装参数,可以通过不停的
尝试来实现。
第二,静默安装的可定义性略差
静默安装模式下,一切都是按软件默认的配置来安装。这也就意味着会出现两个比较让
人不爽的问题。 
1、某些捆绑了 LM 软件的软件,静默安装时会将这些 LM 软件也安装进去,这可是大
煞风景了。 
2、不能定义软件安装路径,例如我想将软件安装到我指定的文件夹是不行的。
第一、第二这两个大问题的确有点让人不快,不过不能因此否认了静默安装的优越性。
对于某些系统必须的软件,使用静默安装反倒是很方便地事情。下面我提供几个系统必备增
强软件的静默安装参数: 
DirectX 9.0c,/Silent 
Flash Player 9,/S

57 

MS Java 虚拟机,/Q:A /R:N 
WinRAR,/S 
我们可以通过 AU3 写个脚本,依次静默安装这 4 个系统必备的增强软件。AU3 代码如
下,大家可以参阅: 
ToolTip(@CR&"  正 在 安 装  DirectX  9.0c    "  &  @CR,  @DesktopWidth­200, 
@DesktopHeight­100) 
RunWait(@ScriptDir & "\DX9\DXSETUP.exe /Silent") 
ToolTip(@CR&"  正 在 安 装  Flash  Player  9    "  &  @CR,  @DesktopWidth­200, 
@DesktopHeight­100) 
RunWait(@ScriptDir & "\FlashPlayer9\FlashPlayer9.exe /S") 
ToolTip(@CR&"  正在安装 微软  JAVA  虚拟机  "  &  @CR,  @DesktopWidth­200, 
@DesktopHeight­100) 
RunWait(@ScriptDir & "\MSJAVA\MSJAVX86.EXE /Q:A /R:N") 
ToolTip(@CR&" 
正 在 安 装  WinRAR3.71    "  &  @CR,  @DesktopWidth­200, 
@DesktopHeight­100) 
RunWait(@ScriptDir & "\WinRAR\WinRAR3.71.exe /S") 
与以上代码的 AU3 脚本同目录有四个文件夹 DX9、FlashPlayer9、MSJAVA、WinRAR,
这四个文件夹中分别盛放 DirectX  9.0c 的安装文件、Flash  Player  9 的安装文件、微软 JAVA 
虚拟机的安装文件、WinRAR 的安装文件。
每一个 ToolTip 分别作一个提示,提示用户当前正在安装说明软件,如果要求全静默,
可以将 ToolTip 这几行删除或注释掉。
每一个 RunWait 分别调用一个软件运行并加上静默安装参数, RunWait 会暂停脚本并等
待该软件的静默安装完成。 
OK,软件的静默安装方法就简单的介绍到这里,如果需要更多软件的静默安装方法,
建议去百度搜索一下。
下一小节里我将介绍一种适用范围很广泛的、“神奇的”软件自动安装方法。 

1.7.2  简单的 AU3 脚本实现软件自动安装
用 AU3 脚本来安装软件?嗯,对的。
大家或许见过某些高人做的软件自动安装器,这些安装器在安装软件时会神奇的自动点
击软件安装过程的每一步,自动化程度很高。但是不要感觉这东西太神秘了,只需要十几分
钟,我们自己也可以写出这种“神奇”的软件自动安装脚本。
在说用 AU3 脚本来实现软件的自动安装前,我们要先再看几个 AU3 函数。 
1>WinWaitActive 
作用:暂停脚本的执行直至指定窗口被激活(成为可活动状态)为止
语法:WinWaitActive ( "窗口标题", ["窗口文本"], [超时时间] ) 
2> WinClose 
作用:关闭指定窗口
语法:WinClose ( "窗口标题" [, "窗口文本"] ) 
3>Send

58 

作用:向激活窗口发送模拟键击操作
语法:Send ( "按键" [,  标志] ) 
参数:
标志  = 0  (默认)
,按键序列中含有的特殊字符比如  +  和  !  将被视为  SHIFT  和 
ALT  键。
标志  = 1,按键将按原样发送。 
4>SendX 
作用:向激活窗口发送中文字符
语法:SendX ( "字符",标志) 
参数:
标志,必需,设置为 0 或者非 1 为剪切板模式,1 为发送 ASC 模式 
WinWaitActive 和 Send 函数是我们的主角,WinWaitActive 用于等待某窗口的出现和激
活,Send 用来发送一些键盘事件。有了能做这两件事都函数,我们就能做许多事情了。
下面,我以暴风影音的自动安装为例写一个自动安装脚本。
首先,我们需要启动暴风影音的安装程序。将自动安装脚本与暴风影音安装包放置于同
层目录下,使用如下代码调用暴风影音安装程序启动, 
Run(@ScriptDir & "\Storm.exe") 
暴风影音启动后出现如下所示界面,

这时我们就需要使用 WinWaitActive 函数了。WinWaitActive 的语法是: 
WinWaitActive ( "窗口标题", ["窗口文本"], [超时时间] ) 
“窗口标题”表示窗口标题中的文本,可以写标题中的全部文本,也可以写标题中的部
分文本。如果只写部分,则应当选取比较有代表性的部分,例如上图中的“暴风影音  V3”

“窗口文本”是个可选参数,但是强烈建议写上,以更好地识别安装提示窗口。
“窗口
文本”的内容可以选取当前窗口中比较有代表性的文本,例如上图中的“欢迎使用”

59 

如果担心手工判断“窗口标题”与“窗口文本”会出现错误,建议初学者使用 AU3 工
具箱中的“窗口信息工具”
。这是个相当好的工具,可以显示所选窗口中的所有相关信息。
“超时时间”代表着如果 WinWaitActive 的等待时间超过了超时时间,那么就不等待并
继续执行 WinWaitActive 后面的语句。
那么,我们使用如下语句等待上图的出现和激活, 
WinWaitActive("暴风影音  V3","欢迎使用") 
这时,我们需要使用键盘的“Alt+N”来单击“下一步”按钮,这样一来我们就必须要
用到 Send 函数。使用如下代码来发送“Alt+N”
, 
Send("!N") 
“Alt+N”发送完成后进入下图界面,

同第一个界面一样,我们进行类似的处理:
第一,等待上图窗口的出现与激活;
第二,单击“我接受”按钮。
语句如下: 
WinWaitActive("暴风影音  V3","用户许可协议") 
Send("!I") 
在接受了许可协议后,我们进入了下面的窗口:

60 

这个窗口中有一个让我们填写软件安装路径的文本框,如果我们需要重新填写,那么我
们就必须要用到  SendX  函数了。SendX  最大的一个好处就是支持中文,这就意味着我们可
以填写中文路径了(方便起见,我还是使用英文路径给大家展示)
。使用 SendX 的有一点要
注意,就是使用 SendX 函数时必须在代码的最开始处添加: 
#include <ACN_String.au3> 
做好 SendX 的前提工作后,我们就可以修改我们需要的安装路径了。 
WinWaitActive("暴风影音  V3","选择安装位置") 
SendX("D:\Softwares",0) 
Send("!I") 
当我们发送完“Alt+I”之后也就是按下“安装”按钮后,安装过程将开始执行,如下
图,

61 

安装过程结束后,会自动弹出下图的提示框,

由于此时默认的选中位置在上图中的“运行 暴风影音”处,所以如果我们想去掉这个
复选框的对号,只需要按下空格键就可以了。代码如下: 
WinWaitActive("暴风影音  V3","正在完成") 
Send("{Space}") 
“{Space}”代表着空格键,类似的还有“{TAB}”代表  TAB  键,
“{ENTER}”代表主
键盘区的回车键,{UP}  向上箭头 ,{DOWN}  向下箭头 ,{LEFT}  向左箭头 ,{RIGHT} 
向右箭头等等,如果想了解更多请参与 AU3 帮助文档中关于 Send 命令的部分。

62 

随后我们发送“Alt+F”来完成安装。 
Send("!F") 
到这里,我们就写完了关于暴风影音安装的 AU3 脚本。这只是个范例脚本,只用于给
大家讲解关于 WinWaitActive 函数、Send 函数、SendX 函数等的应用,请勿生搬硬套,要学
会灵活使用,根据不同的情况写出相应的脚本。
总结一下暴风影音的自动安装脚本,再加上一些额外的功能,代码如下: 
#include <ACN_String.au3> 
Dim $Path 
If Not(FileExists(@ScriptDir & "\Storm.exe")) Then 
MsgBox(0+16,"错误","暴风影音安装文件 Storm.exe 未发现!") 
Else 
If FileExists(@ScriptDir & "\InstallPath.ini") Then 
$Path=IniRead(@ScriptDir & "\InstallPath.ini","InstallPath","Path","") 
Else 
$Path="" 
EndIf 
Run(@ScriptDir & "\Storm.exe") 
WinWaitActive("暴风影音  V3","欢迎使用") 
Send("!N") 
WinWaitActive("暴风影音  V3","用户许可协议") 
Send("!I") 
WinWaitActive("暴风影音  V3","选择安装位置") 
If $Path<>"" Then 
SendX($Path,0) 
Sleep(300) 
EndIf 
Send("!I") 
WinWaitActive("暴风影音  V3","正在完成") 
Send("{Space}") 
Send("!F") 
EndIf 
这个脚本中添加了一些内容,我简单的说一下。 
$Path , 这 个 变 量 用 来 记 录 软 件 安 装 路 径 , 这 个 变 量 的 值 由 一 个 外 部 配 置 文 件 
InstallPath.ini 读取,InstallPath.ini 的 InstallPath 段 Path 键记录着软件的安装路径。这样我们
可以在不更改代码的情况下变更软件的安装路径。这个配置文件的内容如下: 
[InstallPath] 
Path = D:\Softwares 
当这个配置文件不存在,或者配置文件里  Path  的值为空,那么软件则按照默认路径进
行安装。
大家是否看明白了呢?不太懂?不用着急,我同样建议初学者不要使用复杂的代码,代
码越简单越好,能实现功能就可以。随着缩写程序的增多,基础的增强,渐渐的就不再怕复
杂的代码了。 
AU3 脚本实现自动安装的方法就讲到这里。 
AU3  脚本实现软件的自动安装有诸多优点,特别是可自定义性极强,可以根据个人需

63 

要定制安装路径、安装模式等等,但是不可回避的,AU3  脚本实现软件的自动安装也有一
定的缺点,不稳定便是一个。
由于 AU3 脚本是通过等待窗口的激活并发送键盘或鼠标事件来实行自动安装的,如果
在脚本执行过程中有键盘动作或者有鼠标动作都会影响安装过程。所以,如果使用 AU3 脚
本来控制软件的自动安装,一定要加一个提示,即“请勿在软件自动安装过程中使用键盘或
鼠标”

不管怎么说,使用 AU3 脚本来实现软件自动安装是时下比较流行的一种方法。写自动
安装脚本时一定要多尝试、多变通,不要模仿,要在理解了以后自己动脑动手。希望这一小
节能给大家带来便利。
现在可以大吼一声:让高手们的“神奇的”软件自动安装见鬼去吧,现在我们都可以亲
手写软件的自动安装脚本! 

1.8 Windows 环境变量列表
所谓环境变量,简单来说,就是一组随系统变化而变化的值,在不同的系统中或在不同
的系统安装条件下都用这一个变量来表达特定的值。
举一个简单的例子,当我把系统安装在  C  盘时,%SystemDrive%这个环境变量就代表
着“C:”
,而我如果把系统安装在 D 盘,那么%SystemDrive%这个环境变量就代表着“D:”

这给我们带来了很大的方便,例如我们想把一个软件安装在系统所在盘符里,但我们并
不确定系统盘的盘符是什么,那么我们就可以用%SystemDrive%这个环境变量来代替系统盘
盘符,十分方便。
常用的各 Windows 环境变量列表如下: 
%ALLUSERSPROFILE%  : 列出所有用户 Profile 文件位置。 
%APPDATA% :  列出应用程序数据的默认存放位置。 
%CD% :  列出当前目录。 
%CLIENTNAME% :  列出联接到终端服务会话时客户端的 NETBIOS 名。 
%CMDCMDLINE% :  列出启动当前 cmd.exe 所使用的命令行。 
%CMDEXTVERSION% :  命令出当前命令处理程序扩展版本号。 
%CommonProgramFiles% :  列出了常用文件的文件夹路径。 
%COMPUTERNAME% :  列出了计算机名。 
%COMSPEC% :  列出了可执行命令外壳(命令处理程序)的路径。 
%DATE% :  列出当前日期。 
%ERRORLEVEL% :  列出了最近使用的命令的错误代码。 
%HOMEDRIVE% :  列出与用户主目录所在的驱动器盘符。 
%HOMEPATH% :  列出用户主目录的完整路径。 
%HOMESHARE% :  列出用户共享主目录的网络路径。 
%LOGONSEVER% :  列出有效的当前登录会话的域名控制器名。 
%NUMBER_OF_PROCESSORS% :  列出了计算机安装的处理器数。 
%OS% :  列出操作系统的名字。(Windows XP  和  Windows 2000  列为  Windows_NT.) 
%Path% :  列出了可执行文件的搜索路径。 
%PATHEXT% :  列出操作系统认为可被执行的文件扩展名。 
%PROCESSOR_ARCHITECTURE% :  列出了处理器的芯片架构。 
%PROCESSOR_IDENTFIER% :  列出了处理器的描述。

64 

%PROCESSOR_LEVEL% :  列出了计算机的处理器的型号。 
%PROCESSOR_REVISION% :  列出了处理器的修订号。 
%ProgramFiles% :  列出了 Program Files 文件夹的路径。 
%PROMPT% :  列出了当前命令解释器的命令提示设置。 
%RANDOM% :  列出界于 0  和  32767 之间的随机十进制数。 
%SESSIONNAME% :  列出连接到终端服务会话时的连接和会话名。 
%SYSTEMDRIVE% :  列出了 Windows 启动目录所在驱动器。 
%SYSTEMROOT% :  列出了 Windows 启动目录的位置。 
%TEMP% and %TMP% :  列出了当前登录的用户可用应用程序的默认临时目录。 
%TIME% :  列出当前时间。 
%USERDOMAIN% :  列出了包含用户帐号的域的名字。 
%USERNAME% :  列出当前登录的用户的名字。 
%USERPROFILE% :  列出当前用户 Profile 文件位置。 
%WINDIR% :  列出操作系统目录的位置
要注意到是有些环境变量所代表的路径中可能带有空格,在前面的 DOS 基础小节里已
经说过,如果要使用带有空格的路径,那么需要用“"”包含起来。
例 如 %ProgramFiles% 这 个 环 境 变 量 , 假 设 我 们 要 运 行  Program  File  文 件 夹 下 的 
Skyfree.exe 文件,如果写成 
Start /Wait %ProgramFiles%\Skyfree.exe 
这样  Skyfree.exe  是不会执行的,因为这行命令直接写出来等同于(假设系统安装在  C 
盘)
: 
Start /Wait C:\Program Files\Skyfree.exe 
这行命令中路径部分包含空格,是不能正确执行的。这行命令应该写成: 
Start /Wait "%ProgramFiles%\Skyfree.exe" 
这样才是正确的。
不要小瞧这些系统变量,很大程度上这些简单而实用的系统变量可以帮我们解决很多问
题。
好的,环境变量就介绍这么多,希望可以给大家带来方便。 

1.9  总结
基础部分终于讲完了,大家可能会有疑问,定制一个系统需要这么多的基础知识吗?
其实定制一个系统并不需要这么多的基础知识,但是,如果想定制一个出色的系统这些
基础知识都是远远不够的。当前,定制系统所需要的软件日益简单化、智能化,但这并不意
味着不需要个人技术的存在,而最后造成系统定制者能力的差别的,往往就是这些简单的基
础。
一定程度上说,这些所谓的基础,其实是一个系统定制者的基本素质和技术水平。只有
基础扎实了,基本的技术水平过硬了,才能做到更好更强,才能做出真正属于自己的技术,
而不仅仅是走在别人后面,活在别人的影子里。 
DOS  和批处理基础,是最基本的东西,也是我们实现一些简单的自动化所必需的基本
技术素养。最基本的东西,往往是最稳定、最实用的。 
AU3 是当前最流行的脚本语言,在 Windows 环境下,AU3 基本可以完全替代批处理,
又由于 AU3 脚本相对其他编程语言比较简单,适用性强,与 Windows 的结合性强,在定制

65 

系统时成为了一个顺手的利器。学习编程一定不要死记硬背,只记住定义、函数等是没有太
大效果的。学习编程最好的手段就是多写、多用以及不怕出错。
系统补丁和驱动对搜集与集成是定制系统所必需的内容,系统补丁可以封闭各种系统漏
洞、提高系统性能,驱动的集成则可以让我们更快捷的完成系统的安装。
注册表与服务优化是  Windows  下最常用的两种优化手段。注册表优化侧重于发挥当前
计算机性能的极限,服务优化则侧重于减少系统资源的浪费。做优化时,不要只看重优化的
结果,不能乱优化。一定程度上讲,优化都会一定程度上损失系统兼容性与稳定性,优化时
一定要讲究寻找一个系统运行速度与兼容性、稳定性的平衡点。
软件的安装是十分重要的,毕竟对于大多数普通用户来讲,用电脑就是用软件,软件的
安装要消耗很多的精力与时间,这也就是我们为什么需要软件自动化安装的原因。软件自动
安装的静默安装模式和 AU3 脚本自动安装模式各有各的优势,也同样各有各的缺点,所以
一定要权衡在什么时候使用何种模式。要灵活使用。 
Windows 环境变量提供给我们很多便利,善用这些环境变量可以大大的提高我们的工作
效率。
本章侧重于讲基础的和常用的知识,所以并不是最全面的,如果要获得更加全面的知识,
请多看帮助文档并多多使用百度搜索。本章的基础对以后各章的学习有很大的帮助,所以建
议初学者多多阅读本章内容,高手就免了,呵呵。
高手与菜鸟的差别,往往在于基础的厚薄。
基础的,最好的。

66 

第二章、无人值守安装 XP 的定制
本章的内容十分基础,强烈不建议高手阅读。
本章会讲述以最原始的方式定制一张 XP 无人值守安装光盘,绝大多数内容为手动操作。
如果您对这种“原始的”和“过时了的”方法没兴趣,那么您可以略过本章阅读后面的内容。
不过如果您认为理解最原始的规则才能有所创新的话,笔者还是十分欣喜您能阅读一下本章
内容的。
在阅读本章前,请更改您计算机的两个配置:
打开任意文件夹,单击工具栏的“工具”à“文件夹选项”à“查看”,选定“显示所
有文件和文件夹”
,并去掉“隐藏已知文件类型的扩展名”前的对号。 

2.1  光盘镜像与 UltraISO 
每天都听高手在讲光盘镜像,光盘镜像是什么?
所谓光盘镜像,简单说,就是把一张光盘的全部内容以一个镜像文件的形式存储起来。
一张光盘的镜像,包含这张光盘的全部。将光盘插入光驱与将光盘镜像载入虚拟光驱,对于
计算机来说是没有差别的。
光盘镜像包含光盘的全部,就意味着不仅仅包含光盘内的文件,还包含光盘的引导区、
启动区等等。
最简单的例子,如果您将一张 XP 安装盘内的全部文件刻在光盘上,放入光驱并设定以
光驱为第一启动设备,计算机启动时并不能从这张光盘启动,因为这张光盘只包含 XP 安装
光盘内的文件,却不包含 XP 安装光盘上的引导信息。而如果您将 XP 安装盘的镜像刻录在
光盘上,那么这张光盘时能够启动的。
我们从网络上下载的各类系统光盘,都是以光盘镜像的模式存储的。
说到这里就要说几个问题了。
第一,如何把光盘转化为光盘镜像?
第二,如何提取光盘镜像内的文件?
第三,如何提取光盘的引导文件?
第四,如何生成可启动光盘?
要解决这四个问题,我们需要借助一个软件,UltraISO。 
UltraISO(软碟通)是一款光盘镜像 ISO 文件编辑制作工具,它可以图形化地从光盘、
硬盘制作和编辑 ISO 文件。 
UltraISO 可以做到: 
1>从 CD­ROM 制作光盘的映像文件。 
2>将硬盘、光盘、网络磁盘文件制作成 ISO 文件。 
3>从 ISO 文件中提取文件或文件夹。 
4>编辑各种 ISO 文件(如 Nero Burning ROM、Easy CD Creator、Clone CD  制作的光盘
映像文件)
。 
5>制作可启动 ISO 文件 
UltraISO 的这几项功能正好用来解决我们的这几个问题。

67 

上图是 UltraISO 的主界面,十分简洁。 
UltraISO 主界面,上半部分为光盘目录,下半部分为本地目录,便于各种添加与删除操
作。 

2.1.1  使用 UltraISO 将光盘变成光盘 ISO 镜像
将要制作成光盘 ISO 镜像的光盘放入光驱。单击 UltraISO 工具栏上的“工具”按钮再
单击“制作光盘映像文件”
,或者直接按“F8”
,即可调出光盘镜像制作程序界面,如下图
所示:

选择好存放光盘 ISO 镜像的路径后,单击“制作”按钮就会开始光盘 ISO 镜像生成过
程,

68 

几分钟后,光盘 ISO 镜像生成完毕。 

2.1.2 提取光盘镜像内的文件
当我们通向提取光盘  ISO  镜像中的文件时,我们可以通过虚拟光驱直接加载这个光盘 
ISO  镜像,但是通过虚拟光驱加载  ISO  镜像中的某些文件是看不到的,例如使用  Easyboot 
加密制作的光盘中的 EZBOOT 文件夹就看不到。 
UltraISO 直接可以加载并打开 ISO 镜像,并且 ISO 镜像中的内容一览无余。
在 UltraISO 主界面工具栏单击“文件”再单击“打开”
,或者直接使用“Ctrl+O”快捷
键,都可以调出“打开 ISO 文件”这个对话框,如下图所示:

在上图中选中您将要打开的 ISO 镜像,然后单击“打开”,出现如下图界面,

69 

上半部分右侧就是光盘  ISO  镜像中的内容了,如果我们需要提取其中的某文件或者文
件夹,只需要右键单击要提取的部分,再单击“提取到”,就会出现一个询问你保存提取的
文件的对话框,设置完毕后,就开始提取过程:

片刻后,文件提取完毕。是不是很方便呢? 

2.1.3 使用 UltraISO 来提取光盘的引导文件
本节开始处我说过关于光盘引导文件的问题,光盘的引导文件在光盘  ISO  镜像内是看
不到的。
目前最常用的光盘  ISO  引导文件一般有两种,一种是引导  2000/XP/2003  启动的 
w2ksect.bin,这种引导文件普遍存在于  2000/XP/2003  的单启动光盘中;另一种则是使用 
Easyboot  制作的可启动光盘中使用的  loader.bin,这种引导文件用的最多,多用于引导多合
一光盘、GhostXP 光盘等等。w2ksect.bin 和 loader.bin 两类使用最为广泛的引导文件。
但如果我们不清楚某 ISO 镜像的引导文件是什么,怎么办?没关系,UltraISO 提供一个
提取 ISO 镜像引导文件的功能。
用刚学的方法,打开某光盘  ISO  镜像文件,然后单击工具栏“启动光盘”再单击“保
存引导文件…”
,将会出现如下界面:

70 

自定义引导文件名,例如我提取了 XP SP2 的引导文件,设定其名为 XP_Loader.bif,然
后单击保存。 

2.1.4 使用 UltraISO 来生成可启动光盘
制作可启动光盘分两步做。
第一步,将选定的光盘文件拖放到 UltraISO 上半部分右侧,

第二步,加载引导文件。单击工具栏的“启动光盘”按钮再单击“加载引导文件”
,出

71 

现如下对话框,

根据光盘的具体情况选择合适的引导文件,例如我现在要做 XP 的安装光盘,那么我就
选择我刚才由 XP SP2 原版提取的“XP_Loader.bif”
,选好后单击“打开”,加载引导文件完
成。
完成这两步,我们就可以生成可引导的光盘 ISO 镜像了。 
UltraISO 主界面,单击“保存”按钮(就是那个像软盘的按钮)或者 Ctrl+S,弹出如下
对话框,

选择好保存位置与名称,单击“保存”,可引导光盘 ISO 镜像开始生成:

72 

几十秒后,一个可启动的光盘 ISO 镜像就生成完毕了。 
UltraISO  的简单使用就介绍到这里,其实  UltraISO  的功能可不只这些,很多其他功能
还得靠大家多用多琢磨。 

2.2  无人值守应答文件 Winnt.sif 详解
从本节起,我们将一步步的手工定制一张 XP 无人值守安装光盘。所以我需要您准备一
张 XP  原版光盘和 UltraISO 软件,以方便我们从此节向后的讲解。
在定制 XP 光盘时,需要首先从 XP 原版光盘中提取几个文件 XP 安装所必需的文件以
及 XP 光盘的引导文件。 
1>提取文件:I386 文件夹、BOOTFONT.BIN、WIN51、WIN51IP、WIN51IP.SP2。
其中 I386 文件夹中包含着 XP 安装所必需的文件,BOOTFONT.BIN 是启动时所使用的
字体文件,WIN51、WIN51IP  文件用来在启动安装程式时判断该光盘为  XP,WIN51IP.SP2 
用来在启动安装程式时判断该光盘为  SP2(如果今后发布  XP  SP3,说不定这里会是 
WIN51IP.SP3 呢)
。这些文件是我们安装 XP 时所必需的,至于 XP 原版光盘里其他的几个文
件夹里是什么,大家可以自己研究一下。 
2>提取引导文件,这个我已经在上一小节里给大家介绍了。按照上一小节的方法提取
后保存为 XP_Loader.bif,我们以后将修改后的文件重新封成可启动光盘时会用得到。
做完这些准备工作后,我们就可以进入正题了。
如果您亲手安装过 XP 原版光盘,那么一定会记得在安装过程中要填写很多内容,诸如
序列号、时区、计算机名等等,那么有没有办法让这些内容自动填写免除我们手工操作的麻
烦?可以,而实现无人值守安装的方法很简单,只需要一个无人值守应答文件即可实现, 
Winnt.sif。 
Winnt.sif 其实是一份配置文件,XP 在安装过程中会读取这份配置文件,并按照配置文
件中所写的内容来自动设置原本需要用户手工设置的内容。 
Winnt.sif 可以直接使用记事本编
辑。
关于 Winnt.sif 文件中各配置项目的详解如下: 
(这份关于 Winnt.sif 对详解出自无忧启动论坛,http://bbs.wuyou.com/,特此感谢!) 
[Data] 
AutoPartition=0 
安装程序会在安装过程中讯问你要把操作系统安装到哪个硬盘分区,并且如果该分区已
经包含了一个操作系统,安装程序也会给你合理建议。
在这里设置为  0,则安装程序会在安装过程中讯问你要把操作系统安装到哪个硬盘分

73 

区,并且如果该分区已经包含了一个操作系统,安装程序也会给你合理建议。 
MsDosInitiated="0" 
通知安装程序,你是从光盘上安装操作系统的
如果你在这里设置为 0,则会通知安装程序,你是从光盘上安装操作系统的。 
UnattendedInstall="Yes" 
安装程序会进行一次无人值守安装。 
AutomaticUpdates=yes 
安装程序在完成安装后跳过帮助保你你的 PC 页面(SP2 中的功能)  。 
[UserData] 
ProductID=MRX3F­47B9T­2487J­KWKMF­RPWBY 
这个选项告诉了安装程序在安装过程中使用的序列号。 
FullName="Skyfree" 
这个选项用来指定你的名字,这将会显示在系统属性的”注册给“项目下。 
OrgName="Www.FreeSkyCD.Cn" 
这个选项可以用来设置你的组织名称,这个也会显示在系统属性的“注册给”项目下。 
ComputerName=* 
在这个选项中你可以指定计算机的名称,这个名称会用在系统和网络中,而且该名称也
会在系统属性的计算机名选项卡下。 
[Shell] 
CustomDefaultThemeFile="%WinDir%\Resources\Themes\LE4_Blue.theme" 
这个选项用以指定默认情况下 Windows  使用的主题,所指定的可以是系统自带的其他
主题,或者是第三方的主题。通过指定这个选项,Windows XP 在你第一次登陆的时候就可
以使用你喜欢的主题了。 
[Unattended] 
UnattendMode=FullUnattended 
完全自动的无人值守安装,在安装过程中遇到的所有问题都将由在 winnt.sif 文件中预设
的答案来回答,在安装过程中你将不能改变任何预设值。 
FileSystem=* 
文件系统格式,为空为用户选择就可以在开始安装选择分区时让你选择是否格式化以及
格式化后的系统文件格式。 
OemSkipEula=Yes 
在这里设置为 Yes  将会跳过 EULA  屏幕,因为你已经在创建应答文件的时候读过用户
许可协议了。在这里设置为 No 则意味着你需要在安装过程中按 F8 键同意许可协议。 
OemPreinstall=Yes 
安装系统的过程中从$OEM$文件夹下安装额外的程序,而预先把相应的安装文件复制
到系统盘中 
TargetPath=\WINDOWS 
这个选项告诉了安装程序要把 Windows 安装到哪个目录中。 
UnattendSwitch="Yes" 
跳过 Windows 欢迎界面,跳过创建网络连接以及创建用户帐户页面。 
WaitForReboot="No"

74 

安装进行完毕后禁止等待。 
OemPnPDriversPath = "" 
安装文件到哪里搜索比操作系统自带的驱动程序更新的版本。如果安装程序能找到一个
更好的版本,则会自动安装。 
DriverSigningPolicy=Ignore 
强制安装程序安装没有经过  WHQL  认证的驱动程序。该选项要和  OemPnPDriversPath 
选项联合使用。 
NonDriverSigningPolicy=Ignore 
[GuiUnattended] 
AdminPassword=* 
Administrator 帐户没有设置任何密码。 
EncryptedAdminPassword=NO 
这个选项用来告诉安装文件你的密码是否被加密,Yes 表示密码被加密了,而 No 表示
密码为被加密。如果你没有为 Administrator 帐户设置密码,那么这个选项应该被设置为 No。
如果你选择了 Yes,Setup Manager 就会把密码加密保存在 winnt。sif 文件中。 
OEMSkipRegional=1 
跳过区域设置屏 
TimeZone=210 
安装程序时区的设置 
OemSkipWelcome=1 
如果上面的  OemPreinstall  选项你设置为  No,那么这个选项你就要设置为  0  而如果 
OemPreinstall 选项设置为 Yes,则这个选项就要设置为 1。如果设置为 0,安装程序就会知
道你不想在图形界面的安装过程中显示欢迎屏幕。(注意这和 “Windows 欢迎”界面不同,
在那里你可以设置你的用户帐户)。 
[Display] 
Xresolution=1024 
这个选项指定了屏幕的默认横向分辨率。 
Yresolution=768 
这个选项指定了屏幕的默认纵向分辨率。 
BitsPerPel=32 
这个选项用来指定使用多少位色。 
Vrefresh=60 
这个选项用来指定刷新率。 
[TapiLocation] 
CountryCode=86 
这个选项用来设置国家代码。 
Dialing=Tone 
指定你的电话线路类型。 
[RegionalSettings] 
LanguageGroup=9,10

75 

安装的语言组类型,中国简体中文为 10,繁体中文为 9 
[FavoritesEx] 
Title1="自由天空技术论坛.url" 
URL1="Http://Www.FreeSkyCD.Com.Cn/ " 
收藏夹网址,可以 Title2 为好记的名称,URL2 为网址。按顺序 123 这样的继续添加。 
[Branding] 
BrandIEUsingUnattended=Yes 
给浏览器输入特定的[FavoritesEx],[Proxy],and[URL] 
[URL] 
Home_Page="Http://Www.Baidu.Com/" 
主页地址 
[Proxy] 
Proxy_Enable=0 
具体是否使用了代理服务器,0 表示不使用代理服务器。 
Use_Same_Proxy=1 
具体是否使用一个代理服务器的所有服务,不使用代理服务器的所有服务。 
[Identification] 
JoinWorkgroup=WORKGROUP 
这个选项用以指定将要加入的工作组。如果你没有使用网络,就可以把这个选项保持默
认设置。 
[Networking] 
InstallDefaultComponents=No 
这个选项用以告诉安装程序你是否安装默认的网络组件。如果你设置了 Yes 那么默认的
网络组件就会被安装如果你设置了 No 就可以自定义要安装的协议、服务还有客户端。配置
该选项的最佳方法是通过 Setup Manager(setupmgr.exe)。 
[NetAdapters] 
Adapter1=params.Adapter1 
网络组件选择为 params.Adapter1 
[params.Adapter1] 
INFID=* 
IP 分配/建议不使用(可以指定 192.168.101.1,192.168.0.1) 
[NetClients] 
MS_MSClient=params.MS_MSClient 
安装 Microsoft 网络客户端,允许计算机访问 Microsoft 网络上资源

76 

[NetServices] 
MS_SERVER=params.MS_SERVER 
安装 Microsoft 网络文件和打印机共享,允许其它计算机用 Microsoft 网络访问你计算机
上的资源。 
[NetProtocols] 
MS_TCPIP=params.MS_TCPIP 
安装 Internet 协议  TCP/IP 协议,默认的广域网络协议,它提供在不同相互连接的网络
上的通讯。 
[params.MS_TCPIP] 
DNS=No 
UseDomainNameDevolution=No 
EnableLMHosts=Yes 
AdapterSections=params.MS_TCPIP.Adapter1 
TCP/IP 协议使用手动设置 
[params.MS_TCPIP.Adapter1] 
SpecificTo=Adapter1 
DHCP=No 
IPAddress=192.168.0.1 
SubnetMask=255.255.255.0 
WINS=No 
NetBIOSOptions=0 
TCP/IP 协议使用自定义 IP,其它默认设置。主要是 IP 设置及子网掩码设置 
[Components] 
msmsgs=off 
这个选项可以让安装程序不安装 Windows Messenger 4.6。 
msnexplr=Off 
这个选项可以让安装程序不安装 MSN Explorer 7。
其它的一些  Windows  组件如下: 
AccessOpt,辅助功能向导 
Appsrv_console,应用程序控制台 
Aspnet,ASP.NET 软件开发平台 
BitsServerExtensionsISAPI,在客户端计算机上  BITS  的  ISAPI 
BitsServerExtensionsManager,BITS  管理器组件(需要 iis_inetmgr) 
Calc,计算器 
CertSrv,证书服务的证书颁发机构组件 
CertSrv_Client,证书服务的  Web  客户端组件 
CertSrv_Server,证书服的服务器组件 
CharMap,启用在文档中插入符号和文字 
Chat,聊天客户端

77 

Clipbook,剪贴板查看器 
Cluster,群集服务 
Complusnetwork,启用网络  COM+  访问 
DeskPaper,桌面墙纸 
Dialer,电话拨号程序 
DTCnetwork,MS DTC  网络访问 
Fax,传真组件 
fp_extensions,Front Pager  扩展 
fp_vdir_deploy,Visual Interdev RAD  远程部署 
freecell,空当接龙游戏 
Hearts,红心大战游戏 
Hypertrm,超级终端 
IEAccess,为  Internet Explorer  安装可见的入口点(快捷方式) 
IEHardenAdmin,为管理员加强  IE  安全性 
IEHardenUser,为用户加强  IE  安全性 
Iis_asp,IIS ASP 
Iis_Common,Internet Information Server (IIS)  所需文件的通用设置 
Iis_Ftp,FTP  服务 
Iis_Inetmgr,基于  Microsoft  管理控制台的  IIS  管理工具 
iis_internetdataconnector,Internet  数据连结器 
iis_nntp,网络新闻传输协议  (NNTP)  服务器 
iis_serversideincludes,服务器端包含文件 
iis_smtp,SMTP  服务器 
iis_webdav。WebDAV  发布 
iis_www,WWW  服务 
indexsrv_system,索引服务,需要  iis_common、iis_inetmgr、iis_WWW  和  COM 
Inetprint,Internet  打印 
LicenseServer,禁用终端服务授权 
media_clips,声音事例 
Media_Utopia,幻想空间配音方案 
Minesweeper,扫雷游戏 
Mousepoint,鼠标指针 
Msmq_ADIntegrated,将  Microsoft Message Queuing (MSMQ)  集成到  Active Directory 
中 
Msmq_Core,MSMQ  核心组件 
Msmq_HTTPSupport,启用  MSMQ  来使用  HTTP 
Msmq_LocalStorage,允许在本地保存消息 
Msmq_MQDSService,提供  Active Directory  和站点识别功能 
Msmq_RoutingSupport,提供  MSMQ  路由 
Msmq_TriggerService,将消息到达与  COM  对象关联 
Msnexplr,安装  MSN Explorer 
MsWordPad,写字板 
NetCis, 
Microsoft COM internet  服务,需要  iis_common、 
iis_inetmgr、 
iis_www  和  COM 
NetOc,其他可选的网络组件,需要  [NetOptionalComponents]  部分

78 

ObjectPkg,对象包装程序 
OEAccess,Outlook Express  的入口点 
Paint,Microsoft  画图 
Pinball,弹球游戏 
Pop3Admin,Pop3  管理的 Web  用户界面 
Pop3Service,POP3  服务 
Pop3Srv,POP3  根组件 
Rec,录音机 
Reminst,远程安装服务(RIS) 
RootAutoUpdate,OCM  更新根证书 
Rstorage,远程存储服务启用磁带库的使用作为  NTFS  卷的扩展 
sakit_web,远程管理工具(以前的服务管理工具包) 
solitaire,纸牌游戏 
Spider,蜘蛛纸牌游戏 
Templates,文档模板 
TerminalServe,仅在服务器上安装终端服务 
TsWebClient,为终端服务安装  ActiveX  组件,需要  IIS 
Vol,音量控制 
WbemCrrl,Windows Management Instrumentation (WMI)  事件搜集组件 
WbemFwrd,Windows Management Instrumentation (WMI)  事件传送组件 
WbemMSI,Windows Management Instrumentation (WMI) Windows Installer 提供商 
WMAccess,Windows Messenger  的入口点 
WMPOCM,Windows Media Player 的入口点 
Wms,Windows Media  技术组件 
Wms_Admin_asp,Windows Media  技术服务器管理工具  Web  组件 
wms_admin_mmc,Windows Media Microsoft Management Console (MMC)  管理单元 
wms_isapi,Windows Media  服务器多路广播和广告 
Wms_Server,Windows Media  技术服务器,需要  Wms_Admin 
Zonegames,安装  Microsoft Game Zone Internet  游戏 
[GuiRunOnce] 
列出当第一次登录计算机时您想启动的程序 
Winnt.sif 包含关于 XP 安装过程中很多方面的配置,这些配置工作可以不仅仅可以帮我
们实现无人值守,更有一些配置选项可以一定程度上帮我们按照我们的需要来定制系统。
根据这份详解,我写了一份比较常用的 Winnt.sif,以供大家参考: 
[Data] 
AutomaticUpdates="No" 
Autopartition=0 
MsDosInitiated=0 
UnattendedInstall="Yes" 
[Unattended]

79 

UnattendMode=DefaultHide 
UnattendSwitch="No" 
OemPreinstall="Yes" 
OemSkipEula="Yes" 
FileSystem=* 
WaitForReboot="No" 
NoWaitAfterTextMode=1 
NoWaitAfterGUIMode=1 
DriverSigningPolicy=Ignore 
NonDriverSigningPolicy=Ignore 
[Display] 
Xresolution=1024 
Yresolution=768 
BitsPerPel=32 
Vrefresh=60 
[GuiUnattended] 
AdminPassword=* 
TimeZone=210 
[UserData] 
ProductKey="MRX3F­47B9T­2487J­KWKMF­RPWBY" 
ComputerName=* 
FullName="自由天空技术论坛" 
OrgName="FreeSkyCD/BBS" 
[RegionalSettings] 
LanguageGroup = 10 
[Identification] 
JoinWorkgroup="WORKGROUP" 
[GuiRunOnce] 
大家可以仿照我写的这份  Winnt.sif  来写自己的,当然,可以根据上面那份详解来添加
您需要的部分或去除您不需要的部分。
写完后,保存,切记保存的名字一定为“Winnt.sif”
。保存完毕后将这个文件复制到 I386 
文件夹下即可。
就这么简单,XP 的无人值守安装实现了。不过或许大家到这里还不满足,仅 XP 无人
值守安装了还不够,如果 XP 相关的驱动、系统补丁、软件也能自动安装,那不是更称得上
是“无人值守”了?
不要着急,下几节我会一一介绍这些。 

2.3  驱动的自动安装
80 

OemPreinstall=Yes 
OemPnpDriversPath="" 
DriverSigningPolicy=Ignore 
NonDriverSigningPolicy=Ignore 
上一小节中,笔者已经提到了上述四个参数的意义,我这里再作一些详细的解释。 
1> OemPreinstall 
我们先在  XP  安装光盘根目录下建立一个名为“$OEM$”的文件夹,再在$OEM$内在
新建一个$1 文件夹和$$文件夹。 
OemPreinstall 的值只要为 Yes,那么 XP 在安装过程中的第一次复制文件结束后重启前
会将$OEM$\$1  下的所有文件原封不动的复制到%SystemDrive%下,将$OEM$\$$下的内容
原封不动的复制到%WinDir%下。 
OemPreinstall  和$OEM$提供给了我们复制我们需要的文件到系统盘的机会,也让我们
的很多想法成了可能。 
2> OemPnpDriversPath、DriverSigningPolicy、NonDriverSigningPolicy 
OemPnpDriversPath,其值为盛放驱动的文件夹所在路径,默认以当前系统盘为起始路
径。
举个例子。
首先,我们将第一章中所搜集的驱动  Intel_Chipset、ATi_Display、nVIDIA_Display  和 
Realtek_Sound 文件夹放置于$OEM$\$1\Drivers 下,这四个文件夹将会在第一次文件复制结
束后重启前复制到%SystemDrive%\Drivers 下。
然 后 , 我 们 将  OemPnpDriversPath  的 值 设 定 为 "  Drivers\Intel_Chipset;  Drivers\ 
ATi_Display ;Drivers\ nVIDIA_Display; Drivers\Realtek_Sound",即: 
OemPnpDriversPath=" 
Drivers\Intel_Chipset; 
Drivers\ 
ATi_Display 
;Drivers\ 
nVIDIA_Display; Drivers\Realtek_Sound" 
这些值设定好后,XP 会在安装过程中(从剩余 37 分钟开始寻找硬件设备驱动时)会去 
%SystemDrive%\Drivers\Intel_Chipset  、  %SystemDrive%\Drivers\  ATi_Display  ;  、 
%SystemDrive%\Drivers\ nVIDIA_Display 和%SystemDrive%\Drivers\Realtek_Sound 文件夹下
去寻找相应的匹配的驱动程序。如果寻找到匹配的驱动程序,那么 XP 会自动将这些匹配的
驱动安装入系统。
这样,我们就做到了让 XP 自动寻找我们搜集好的第三方驱动并安装的目的。
但是大家也都知道,有些第三方驱动是未通过 WHQL 认证的(但并不代表这样的驱动
有问题)
,这样的驱动 XP 默认是不会进行安装的。我们可以通过设定 DriverSigningPolicy、 
NonDriverSigningPolicy 的值为 Ignore 来让 XP 强行安装这些未通过 WHQL 认证的驱动程序。
本节中,我们通过 OemPnpDriversPath 实现了使用自动复制$OEM$内地文件到系统盘,
又通过  OemPnpDriversPath、DriverSigningPolicy、NonDriverSigningPolicy  三个键的使用实
现了第三方驱动的自动搜寻与安装。
本节只在于介绍这个原理给大家,切勿生搬硬套本节所提及的方法,这些原理需要灵活
使用才能发挥最佳的效果。 

2.4  补丁的集成
81 

第一章中,我们已经讲了系统补丁的获取,如果按照第一章的做法,大概可以获得 100 
多个系统补丁。我们要怎么才能让这些补丁自动安装呢? 
Windows 的系统补丁,通过几个参数设定可以进行全自动的静默安装,这三个参数分别
是/quiet、/passive、/norestart。例如,要完成 KB888111XPSP2.exe 这个补丁的安装,只需要
写入命令“KB888111XPSP2.exe  /quiet、/passive、/norestart”然后回车即可。整个安装过程
是静默的、无需用户任何操作的,而且安装完成后不会重启。
这里就有一个小问题了,难道这一百多个补丁我们要一个个的提取文件名,然后写一百
多个”KBXXXXX.exe  /quiet、/passive、/norestart”吗?要真这样做,可真是要累死了。我们
可以通过使用 AU3 来写一个小程序以实现将某文件夹内的所有补丁依次静默安装,代码如
下: 
#include <File.au3> 
$FileList=_FileListToArray(@ScriptDir & "\Update","*.exe",1) 
For $i=3 To 1 Step ­1 
ToolTip(@CR&"  共" & $FileList[0] & "个系统补丁," & $i & "秒后开始安装...    " 
& @CR, @DesktopWidth­260, @DesktopHeight­100) 
Sleep(1000) 
Next 
For $i=1 To $FileList[0] 
ToolTip(@CR&"  正在安装  " & $FileList[$i] & " (" & $i & "/" & $FileList[0] &")    " 
& @CR, @DesktopWidth­320, @DesktopHeight­100) 
RunWait(@ScriptDir & "\Update\" & $FileList[$i] & " /quiet /passive /norestart") 
Next 
ToolTip(@CR&"  系 统 补 丁 安 装 完 毕 ! 
"  &  @CR,  @DesktopWidth­260, 
@DesktopHeight­100) 
Sleep(3000) 
将这个小程序编译后与 Update 文件夹置于同层目录,Update 文件夹内存放所有的系统
补丁文件。该程序运行后会自动获取 Update 文件夹内所有补丁文件的名字,然后一个一个
的执行静默安装。
这个小程序中用到了一个函数,_FileListToArray。使用这个函数前必须在 AU3 脚本的
开头写上“#include <File.au3>”
。先来简单的介绍一下_FileListToArray 函数: 
_FileListToArray 
作用:获取某文件夹内文件或文件夹名
语法:_FileListToArray ( $sPath [, $sFilter [, $iFlag]] ) 
参数:
$sPath,将要获取其下文件或文件夹名的那个文件夹的路径 
$sFilter,文件名过滤,默认是“*”通配符,即所有的文件。可以通过设置命令该
函数只获取需要类型的文件,例如上述代码中的“*.exe” 
$iFlag, 
0=(默认)获取全部文件和文件夹名 
1=只获取文件名

82 

2=只获取文件夹名
范例: 
$FileList=_FileListToArray(@ScriptDir & "\Picture","*.jpg",1) 
这个命令将获取与本程序同目录下 Picture 文件夹内的所有 jpg 文件。 
$FileList[0]=将要获取的文件夹下的文件总数 
$FileList[1]=第一个文件的文件名,例如 1.jpg 
$FileList[2]=第二个文件的文件名,例如 2.jpg 
$FileList[3]=第二个文件的文件名,例如 3.jpg 

$FileList[n]=第 n 个文件的文件名,例如 n.jpg 
看完这个函数的解析,那么就不难理解上述程序中的 
$FileList=_FileListToArray(@ScriptDir & "\Update","*.exe",1) 
这个语句用于获取与该脚本同层目录下 Update 文件夹下所有 exe 文件的文件名,然后
将文件总数存储于$FileList[0]下,再将获取的  exe  文件的文件名依次存储于$FileList[1]、 
$FileList[1]、$FileList[2]…$FileList[$FileList[0]]下。
第一个 For 循环,做了一个 3 秒后开始安装的简单提示,并告知用户共有多少个补丁。
第二个 For 循环,按照刚刚获取的 Update 下所有补丁文件的文件名来静默安装 Update 
文件夹下的所有补丁。
所有补丁安装完成后再一次给出提示“系统补丁安装完毕!”
这样我们就实现了自动安装存放在某文件夹内所有补丁文件的工作,但是要想让系统能
自动安装补丁这才做了一半。
下面的摆在我们面前的有两个问题:
第一,怎么把这些这个存放补丁的文件夹和我们写的这个自动安装补丁的小程序复制到
硬盘上;
第二,怎么让系统自动调用我们写的这个小程序呢?
解决第一个问题,大概聪明的大家已经想到了,在上一小节里我们讲了通过$OEM$文
件夹和设置 Winnt.sif 里的 OemPreinstall=Yes 实现复制$OEM$里面的文件到系统盘的实现方
法。那么我们复制补丁到硬盘也可以如法炮制。
在$OEM$\$1 下建立 Hotfix 文件夹,再在 Hotfix 文件夹下建立 Update 文件夹,将所有
的补丁文件复制到 Update 文件夹下,然后将我们所写的这个小程序编译并改名为 Update.exe 
并复制到 Hotfix 文件夹下。现在的目录结构如下: 
$OEM$\$1\Hotfix 
$OEM$\$1\Hotfix\Update.exe(程序) 
$OEM$\$1\Hotfix\Update(文件夹)
这样,在系统安装程式第一次复制完文件到重启前,会将  Hotfix  文件夹下的所有内容
复制到系统盘下。我们的第一个问题就解决了。
解决第二个问题,要用到 Winnt.sif 里的另一段参数,[GUIRunOnce]。[GuiRunOnce]的
功能是列出当第一次登录计算机时您想启动的程序,简单说,就是在 “欢迎使用”之后但
还未看到桌面时调用指定的程序。[GUIRunOnce]的使用方法如下: 
[GUIRunOnce] 
Command0=xxxx 
Command1=xxxx 

83 

CommandN=xxxx 
通过这个,我们可以一个“Command”一个“Command”的执行我们需要的程序。例
如,我们要执行%SystemDirve%\Hotfix\Update.exe,就要写成: 
[GUIRunOnce] 
Command0=%SystemDrive%\Hotfix\Update.exe 
这样,我们就实现了第一次登录计算机时自动调用系统补丁自动安装程序。 
OK,现在我们就实现了系统安装完成后自动安装所有系统补丁。 

2.5  软件的自动安装
软件的自动安装与补丁的自动安装类似。
在第一章我们已经学习了两种实现软件自动安装的方法,使用静默参数安装与使用 
AU3 脚本来进行安装。在本节中,我们使用静默安装参数来安装 DirectX 9.0c、Flash Player 
9、MS Java 虚拟机、WinRAR 这些系统必备的增强软件,使用 AU3 脚本来安装诸如暴风影
音、迅雷、QQ 等常用软件。
首先,我们在$OEM$\$1 文件夹下建立 Softwares 文件夹来盛放我们将要安装的软件,
再将各类软件以及软件的 AU3 安装脚本复制到这个文件夹下(AU3 自动化安装脚本的制作
方法已经在 1.7.2 节中作了详细介绍,大家请使用 1.7.2 节中介绍的方法写出所需安装软件的
自动化安装脚本,本节不再赘述)

例如我现在的目录结构为: 
$OEM$\$1\Softwares,Softwares 根目录,存放各类软件 
$OEM$\$1\Softwares\WinRAR,存放 WinRAR 安装文件 
$OEM$\$1\Softwares\DX9,存放 DirectX 9.0c 安装文件 
$OEM$\$1\Softwares\FlashPlayer9,存放 Flash Player 9 安装文件 
$OEM$\$1\Softwares\MSJAVA,存放微软 JAVA 虚拟机的安装文件 
$OEM$\$1\Softwares\Storm,
存放暴风影音的安装文件 Storm.exe 和暴风影音自动安装脚
本 Install_Storm.exe 
$OEM$\$1\Softwares\Thunder,存放迅雷的安装文件  Thunder.exe  和迅雷自动安装脚本 
Install_Thunder.exe 
$OEM$\$1\Softwares\QQ , 存 放  QQ  的 安 装 文 件  QQ.exe  和  QQ  自 动 安 装 脚 本 
Install_QQ.exe 
这样 Softwares 文件夹和其中的所有文件将会在系统安装程式复制完文件并重启前复制
到%SystemDirve%下。
下面我们为了实现系统必备增强软件的静默安装和常用软件的自动化安装我们再写个
调用程序,如下: 
;静默安装部分 
ToolTip(@CR&"  正 在 安 装  DirectX  9.0c    "  &  @CR,  @DesktopWidth­200, 
@DesktopHeight­100) 
RunWait(@ScriptDir & "\DX9\DXSETUP.exe /Silent") 
ToolTip(@CR&"  正 在 安 装  Flash  Player  9    "  &  @CR,  @DesktopWidth­200, 
@DesktopHeight­100) 
RunWait(@ScriptDir & "\FlashPlayer9\FlashPlayer9.exe /S")

84 

ToolTip(@CR&"  正在安装 微软  JAVA  虚拟机  "  &  @CR,  @DesktopWidth­200, 
@DesktopHeight­100) 
RunWait(@ScriptDir & "\MSJAVA\MSJAVX86.EXE /Q:A /R:N") 
ToolTip(@CR&" 
正 在 安 装  WinRAR3.71    "  &  @CR,  @DesktopWidth­200, 
@DesktopHeight­100) 
RunWait(@ScriptDir & "\WinRAR\WinRAR3.71.exe /S") 
;自动化安装部分 
ToolTip(@CR&" 
正 在 安 装 暴 风 影 音 
"  &  @CR,  @DesktopWidth­200, 
@DesktopHeight­100) 
RunWait(@ScriptDir & "\Storm\Install_Storm.exe") 
ToolTip(@CR&" 
正 在 安 装 迅 雷  5    "  &  @CR,  @DesktopWidth­200, 
@DesktopHeight­100) 
RunWait(@ScriptDir & "\Thunder\Install_Thunder.exe") 
ToolTip(@CR&"  正在安装  QQ    " & @CR, @DesktopWidth­200, @DesktopHeight­100) 
RunWait(@ScriptDir & "\QQ\Install_QQ.exe") 
将 如 上 代 码 编 译 并 改 名 为  Install_Softwares.exe , 随 后 将 这 个 小 程 序 也 复 制 到 
$OEM$\$1\Softwares 下,即$OEM$\$1\Softwares\Install_Softwares.exe。
然后,我们更改一下[GUIRunOnce]段的内容 
[GUIRunOnce] 
Command1=%SystemDrive%\Softwares\Install_Softwares.exe 
这样,我们就实现了在第一次登陆系统时自动安装软件。 

2.6  系统优化的导入
通过上面两节的学习与应用,想必您对  GUIRunOnce  的使用已经相当熟练了,那么您
也大概猜出来这节我要讲什么了。
在 1.5 和 1.6 两节中我详细讲了关于注册表和服务的优化,并在 1.5 节中给出了一个常
用的注册表优化列表,在 1.6 节中写了一个自动化优化服务的小程序,那么在这一节中我就
将使用这两个小东西。
将 1.5 节中的注册表优化列表复制下来,命名为 RegOp.reg,然后用 AU3 写个小程序: 
RunWait("regedit /s " & @ScriptDir & "\RegOp.reg","",@SW_HIDE) 
保存,编译,改名为 RegOp.exe。以后只要运行 RegOp.exe,就会实现静默导入与其同
层目录的 RegOp.reg 这个注册表文件。
将 1.6 节中服务自动优化的代码复制下来,编译,命名为 SrvOp.exe。
在$OEM$\$1 下新建 Optimize 文件夹,将 RegOp.reg、RegOp.exe、SrvOp.exe 复制到其
下,即目录结构为: 
$OEM$\$1\Optimize\RegOp.reg 
$OEM$\$1\Optimize\RegOp.exe 
$OEM$\$1\Optimize\SrvOp.exe 
这 样  Optimize  文 件 所 有 文 件 将 会 在 系 统 安 装 程 式 复 制 完 文 件 并 重 启 前 复 制 到 
%SystemDirve%下.

85 

最后我们还是要更改[GUIRunOnce], 
[GUIRunOnce] 
Command2=%SystemDrive%\Optimize\RegOp.exe 
Command3=%SystemDrive%\Optimize\SrvOp.exe 
这样,我们就实现了在第一次登陆系统时自动实现系统优化。 

2.7 Windows Media Player 的集成 
Windows Media Player 是 Windows 自带的音频视频媒体播放器,虽然不如现在一些第三
方影音播放软件强悍,但是某些时候还的确缺不了它。XP 自带的 Windows Media Player 9。
当前 Windows Media Player 的最高版本是 11,由于 11 对流媒体的支持不佳,而且 11 的安装
还需要验证,所以 11 虽然很漂亮,但是使用并不是最广泛的。
综合上述原因,Windows Media Player 10 成立我们最佳的选择。
集成 Windows  Media  Player  10 最简单的方法就是像安装软件一样执行静默安装,其静
默安装参数为/Q:A /R:N。我们可以写如下 AU3 脚本实现 Windows Media Player 10 的静默安
装: 
ToolTip(@CR&"  正在安装  Windows  Media  Player  10  "  &  @CR,  @DesktopWidth­200, 
@DesktopHeight­100) 
RunWait(@ScriptDir & "\WMP10.exe /Q:A /R:N") 
保存,编译,改名为 Install_WMP10.exe,再将 Windows Media Player 10 的安装程序改
名为 WMP10.exe 放置于与 Install_WMP10.exe 同层目录,运行 Install_WMP10.exe 后 Windows 
Media Player 10 就会自动静默安装。
不过笔者并不推荐这种方法,速度慢不说,在系统默认关闭系统还原的情况下如果运行
会出现一个提示,很不爽。
经过长时间的探寻,笔者一个偶然机会在无忧启动论坛(http://bbs.wuyou.com/)发现了
一个可以直接将 Windows Media Player 10 集成进 XP 安装文件的批处理。使用这个方法集成
后,系统内原带的 Windows Media Player 9 就直接被替换为 Windows Media Player 10,十分
方便。
这个批处理如下:
(再次感谢无忧启动论坛的老毛桃) 
@ECHO OFF 
TITLE Windows Media Player 10  集成包制作工具  V1.1 ­ By  老毛桃 
FOR /F %%I IN ('CD') DO SET P=%%I\WMP10TMP 
SET OUT=I386 
SET  C=MAKECAB  /D  CompressionType=LZX  /D  CompressionMemory=21  /D 
MaxDiskSize=CDROM /D Cabinet=ON /D Compress=ON /D FolderSizeThreshold=5000000 /L 
%OUT% %P%\ 
SET TotalSteps=4 
IF EXIST %P% RD %P% 
IF EXIST %OUT% RD %OUT% 
COLOR 0A 
CLS

86 

ECHO. 
ECHO. 
ECHO  程序将要制作  Windows Media Player 10  的集成包. . . 
ECHO. 
ECHO  请确保  Windows Media Player 10  的安装文件  MP10SETUP.EXE  存在于当前路
径中 
ECHO. 
ECHO.请确保本程序所在的路径(包括父路径)中不许有空格 
ECHO. 
ECHO. 
ECHO. 
PAUSE 
IF NOT EXIST MP10Setup.exe GOTO ERR 
CLS 
TITLE 1/%TotalSteps%  正在解压缩  MP10Setup.exe  到  %P%. . . 
ECHO. 
ECHO. 
ECHO. 
ECHO 1/%TotalSteps%  正在解压缩  MP10Setup.exe  到  %P%. . . 
ECHO. 
ECHO. 
START /WAIT MP10Setup.exe /C /Q /T:%P% 
ECHO. 
ECHO  解压缩完成! 
ECHO. 
PAUSE 
CLS 
TITLE 2/%TotalSteps%  正在删除不需要的文件. . . 
ECHO. 
ECHO. 
ECHO. 
ECHO 2/%TotalSteps%  正在删除不需要的文件. . . 
ECHO. 
ECHO. 
DEL  /F  /S  /Q  %P%\audiodev.dll  %P%\syncpl??.wpl  %P%\drmupgds.exe  %P%\wpd*.* 
%P%\wmpe*.*  %P%\wmdrm*.dll  %P%\msoobci.dll  %P%\uWDF.exe  %P%\wdf*.* 
%P%\wmlaunch.exe %P%\wmpsrcwp.dll %P%\wmsetsdk.exe %P%\wmvadv*.dll 
DEL  /F  /S  /Q  %P%\*.acm  %P%\*.cat  %P%\*.chm  %P%\*.inf  %P%\*.png  %P%\*.txt 
%P%\*.wmz    %P%\*.xml 
ECHO. 
ECHO  删除文件完成!

87 

ECHO. 
PAUSE 

CLS 
TITLE 3/%TotalSteps%  正在移动文件并压缩到  %OUT%. . . 
ECHO. 
ECHO. 
ECHO. 
ECHO 3/%TotalSteps%  正在移动文件并压缩到  %OUT%. . . 
ECHO. 
ECHO. 
ECHO  开始. . . 
ECHO 61  个文件已压缩. . . 
ECHO. 
ECHO. 
%C%wmplayer.adm 
%C%asferror.dll 
%C%blackbox.dll 
%C%CEWMDM.dll 
%C%custsat.dll 
%C%DRMClien.dll 
%C%DrmStor.dll 
%C%drmv2clt.dll 
%C%LAPRXY.DLL 
%C%mpvis.DLL 
%C%msnetobj.dll 
CLS 
ECHO. 
ECHO  剩余  50  个待压缩文件. . . 
ECHO. 
ECHO. 
ECHO. 
%C%MsPMSNSv.dll 
%C%MsPMSP.dll 
%C%msscp.dll 
%C%MSWMDM.dll 
%C%qasf.dll 
%C%WMADMOD.DLL 
%C%WMADMOE.DLL 
%C%WMASF.DLL 
%C%WMDMLOG.dll 
%C%WMDMPS.dll 
CLS

88 

ECHO. 
ECHO  剩余  40  个待压缩文件. . . 
ECHO. 
ECHO. 
ECHO. 
%C%wmerror.dll 
%C%wmidx.dll 
%C%WMNetMgr.dll 
%C%wmp.dll 
%C%wmpasf.dll 
%C%wmpband.dll 
%C%wmpcd.dll 
%C%wmpcore.dll 
%C%wmpdxm.dll 
%C%wmploc.DLL 
CLS 
ECHO. 
ECHO  剩余  30  个待压缩文件. . . 
ECHO. 
ECHO. 
ECHO. 
%C%wmpshell.dll 
%C%wmpui.dll 
%C%WMSDMOD.DLL 
%C%WMSDMOE2.DLL 
%C%WMSPDMOD.DLL 
%C%WMSPDMOE.DLL 
%C%WMVCORE.DLL 
%C%WMVDMOD.DLL 
%C%WMVDMOE2.DLL 
%C%logagent.exe 
CLS 
ECHO. 
ECHO  剩余  20  个待压缩文件. . . 
ECHO. 
ECHO. 
ECHO. 
%C%migrate.exe 
%C%setup_wm.exe 
%C%unregmp2.exe 
%C%wmplayer.exe 
%C%wmp.ocx 
%C%Plylst1.wpl 
%C%Plylst10.wpl

89 

%C%Plylst11.wpl 
%C%Plylst12.wpl 
%C%Plylst13.wpl 
CLS 
ECHO. 
ECHO  剩余  10  个待压缩文件. . . 
ECHO. 
ECHO. 
ECHO. 
%C%Plylst14.wpl 
%C%Plylst15.wpl 
%C%Plylst2.wpl 
%C%Plylst3.wpl 
%C%Plylst4.wpl 
%C%Plylst5.wpl 
%C%Plylst6.wpl 
%C%Plylst7.wpl 
%C%Plylst8.wpl 
%C%Plylst9.wpl 
IF EXIST %P% RD /S /Q %P% 
ECHO. 
ECHO. 
ECHO. 
ECHO  压缩完成! 
ECHO. 
PAUSE 
CLS 
TITLE 4/%TotalSteps%  现在需要你手动操作. . . 
ECHO. 
ECHO. 
ECHO. 
ECHO 4/%TotalSteps%  现在需要你手动操作. . . 
ECHO. 
ECHO. 
ECHO  请将  %OUT%  文件夹复制到你的  XP  安装根目录下。当提示覆盖文件时,点
击“是”
。 
ECHO. 
ECHO. 
ECHO. 
ECHO  然后打开原  XP  安装文件夹下的  HIVEDEF.INF,在  [AddReg]  段下,添加如下
字样,即可。 
ECHO (经过验证,其实这一步略过也没关系!) 
ECHO.

90 

ECHO 
HKCU,"SOFTWARE\Microsoft\MediaPlayer\Preferences","AcceptedPrivacyStatement",0x00010 
003,1 
ECHO. 
ECHO. 
ECHO. 
ECHO. 
ECHO Windows Media Player 10  已成功集成! 
ECHO. 
ECHO  请按任意键退出. . . 
PAUSE >NUL 
EXIT 
:ERR 
CLS 
TITLE  错误: WMP10SETUP.EXE  没有找到! 
ECHO. 
ECHO. 
ECHO. 
ECHO  WMP10Setup.exe  没有找到!  请将择个批处理文件与  WMP10Setup.exe  放置到
同一个文件夹下! 
ECHO. 
PAUSE 
EXIT 
使用该批处理时需要将 Windows  Media  Player  10 对安装文件改名为 MP10SETUP.EXE 
并与本批处理放置于同层目录。
如果执行过程无误,将会在与批处理同层目录下生成 I386 文件夹,复制 I386 文件夹下
的所有文件到 XP 的 I386 文件夹,替换相同文件即可完成集成工作。
复制完成后,打开原  XP  安装文件夹下的  HIVEDEF.INF,在  [AddReg]  段下,添加如
下字样: 
HKCU,"SOFTWARE\Microsoft\MediaPlayer\Preferences","AcceptedPrivacyStatement",0x0 
0010003,1 
不过据老毛桃本人说,他测试了多次后发现添加不添加这个没有太大影响。
这样 Windows Media Player 10 就集成完毕,是不是很方便? 

2.8  总结
通过本章的学习,我们首先学会了如何使用  UltraISO  这个利器,随后我们了解了 
Winnt.sif 这个无人值守安装应答文件。
最后我们一一学习了如何向 XP 安装光盘内集成驱动、
补丁、软件、优化和 Windows Media Player。
如果您按照本章所说的执行了操作,那么您现在的$OEM$\$1 文件夹下的目录结构应该
如下:
$OEM$\$1\Drivers

91 

$OEM$\$1\Hotfix 
$OEM$\$1\Softwares 
$OEM$\$1\Optimize 
您的 Winnt.sif 中,Unattended 段应该增加了: 
[Unattended] 
OemPreinstall="Yes" 
DriverSigningPolicy=Ignore 
NonDriverSigningPolicy=Ignore 
OemPnpDriversPath=" 
Drivers\Intel_Chipset; 
Drivers\ 
ATi_Display 
;Drivers\ 
nVIDIA_Display; Drivers\Realtek_Sound" 
您的 GUIRunOnce 段应该如下: 
[GuiRunOnce] 
Command0=%SystemDrive%\Hotfix\Update.exe 
Command1=%SystemDrive%\Softwares\Install_Softwares.exe 
Command2=%SystemDrive%\Optimize\RegOp.exe 
Command3=%SystemDrive%\Optimize\SrvOp.exe 
通过配合使用 Winnt.sif 和$OEM$我们最终实现了驱动、补丁、软件、优化等待自动安
装。
(节选修订:需增加删除遗留文件的 AU3 脚本!

现在我们已经将一张 XP SP2 原版光盘修改成了无人值守安装的 XP 光盘了,而且有着
一定程度的自动化水平和自定义性。还记得我在本章第一节时提到的使用  UltraISO  封装可
启动光盘的步骤吗?将我们修改后的文件导入 UltraISO,并导入我们在最初提取的 XP 引导
文件,制作一张属于我们自己的 XP 吧!
本章所说的方法都是最最原始的方法,但是这些最原始的东西往往是我们走向更高层
次所必要的经历。只有精通基础,才有资格谈论高层。
希望这些最基本的 XP 定制方法可以给您带来一定的启示!

92 

第三章、使用 nLite 定制 XP 
3.1  初识 nLite 
nLite 是一款高度自动化的定制 XP 的软件,大多数人第一次听说 nLite 大概都是听说可
以使用它来精简系统,不过如果认为 nLite 只能精简系统那就错了,nLite 有诸多功能,精简
系统组件只是其最主要的一个功能。
本章将以 nLite 1.4.1  正式版为例讲解,nLite 不同版本间的差别并不大,且本章注重讲
解为什么这样做而不是仅仅讲解怎样做,所以阅读本章时切勿只模仿,一定要读懂再操作。 
nLite 1.4.1  正式版下载地址: 
http://www.crsky.com/soft/3562.html(该地址 2007 年 12 月 17 日测试有效)
需要注意到是,nLite 需要至少.Net  Framework  2.0 版的支持,所以在安装 nLite 前必须
安装至少要有 2.0 版本的.Net 构架才能正常的使用 nLite。 
.NET Framework 3.5 简体中文版下载地址: 
http://www.crsky.com/soft/4818.html(该地址 2007 年 12 月 17 日测试有效)
运行 nLite,进入 nLite 欢迎使用界面: 

nLite 可以定制的系统有: 
Windows 2000  专业版、服务器版、高级服务器版 
Windows XP  专业版、家庭版、64 位版、专业版 
Windows Server 2003  标准版、网络版、企业版、64 位版、R2 版 
nLite 支持多种语言,我们平时基本使用 Simplified Chinese(简体中文)
。 
nLite 的主要功能有:整合、移除、安装、创建四大项功能。
由上图画面单击“前进”
,我们进入如下图界面,在此界面中我们浏览并选择一个盛放

93 

着我们要定制的 XP 文件的文件夹,例如我图中的“E:\XP_VOL_SP2”,注意,此文件夹路
径中不可带有中文。

选中盛放着我们要定制的  XP  文件的文件夹后,nLite  会自动检测将要定制的这个系统
的系统信息,包括系统名称、语言、系统版本等,如上图所示。 
nLite 检测完毕后,单击“前进”进入下一个界面:

这个界面用来保存系统定制配置(如果是第一次使用  nLite,这个界面中关于定制配置

94 

的内容会是空的)
。也就是说,我之前定制系统的方法会被  nLite  记录下来,如果再次定制
系统使用相同或相似的方法可以直接加载这个配置文件以还原我当时的定制配置。
“导入”
按钮用来导入系统定制配置,
“加载”按钮用来还原定制配置中的定制情况。
单击“前进”
,进入下一个界面:

这个界面中为我们展示了 nLite 对全部功能。 
1>整合功能
·Service Pack 整合,这个功能用来向系统中集成 Service Pack 升级包,例如向原版 XP 
中集成 Service Pack 2、向 2000 原版中集成 Service Pack 4 等等。
·系统补丁以及程序整合,这个功能主要用来集成系统补丁程序,并且可以用来集成符
合 nLite 整合标准的软件整合包。如需要各种系统补丁可以按照我在第一章中介绍的方法进
行下载搜集,如需要各种软件整合包可以到http://bbs.ylmf.com/thread­ylmf­fid­271.html(原
啄木鸟工作室)下载。
·驱动程序,nLite  具有将第三方驱动直接集成到系统内部的功能,可以将第三方的驱
动变为系统自身的驱动。 
2>移除功能 
nLite 的最主要功能——精简,此精简功能十分强大,包含诸多系统组件的精简。 
3>安装功能
·无人值守安装,这个功能用于自动生成 Winnt.sif 无人值守应答文件,十分快捷方便。
·选项,这个功能包含了关于系统的一些设置和选项,以及一些破解。
·优化调整,这个功能包含关于系统注册表和服务优化与调整,直观、简便。 
4>创建功能
用于将系统文件转换为可启动 ISO 光盘镜像,很方便,不过笔者不推荐使用 nLite 的这
个功能,因为我们在使用 nLite 完成定制工作后还有一些后期工作要做,所以不要过早的生
成 ISO 光盘镜像。
在上图界面中选择要执行定制的功能块,再单击“前进”按钮,nLite  的大门就向您敞

95 

开了。 

3.2  使用 nLite 集成 Service Pack、系统补丁、整合包 
3.2.1  集成 Service Pack 

这个功能可以方便的向当前要做定制的系统中集成 Service  Pack,只需要集成最高版本
的 Service  Pack 包就可以了,例如您需要 Windows  XP  Service  Pack  2,则只需要向原版 XP 
中集成  Service Pack 2 就可以了,不需要先集成 Service Pack 1。
上图界面中已经提供了 Windows 2000、XP、2003 的 Service Pack 升级包下载地址链接,
方便用户使用。
单击“前进”
,进入系统补丁集成界面。 

3.2.2 集成系统补丁
我们在第二章已经学习了一种在首次登陆系统前安装所有驱动的办法,这种方法最简单
实用,但是会使系统安装时间大大的增长。有没有一种方法可以直接将这些补丁中更新的文
件集成到系统中,而不需要进行后期安装?有的,nLite 就给我们提供了这个方法。

96 

在上图系统补丁以及程序整合页面中,单击“插入”按钮,随后选中所有要执行集成的
补丁,确定即可导入所有系统补丁。如果您有各种软件或功能整合包,也是在这个界面中进
行导入到,插入方法与补丁相同。
要注意到是这里有个“高级”选项,

97 

“直接整合修补程序”是默认选中的,选中这个之后所有可以被直接整合的补丁将会直
接集成进系统,不能被直接整合的补丁将采取在剩余 13 分钟时执行静默安装的方法来整合。
十分推荐使用这个选项。
“显示报告”
,如果选中,则将会在 nLite 执行系统补丁集成时显示整合信息,例如“当
前补丁文件比当前系统文件要旧,是否还要替换”、
“某补丁不能使用整合方式集成入系统,
是否使用静默安装方式整合”等等提示。如不选中将默认执行 nLite 的推荐选择。nLite 所推
荐的选择一般都比较适合,所以这个选项不推荐使用。
“移除.Cat 安全编录文件”,这个功能只有在其后的“选项”界面中禁用了 SFC 才会生
效。移除.Cat 安全编录文件后会一定程度的加快系统安装速度,同样也会加快驱动的安装,
但是会使驱动丢失数字签名。不过这些都是不太关乎紧要的功能,为了系统的安装速度可以
选中这个选项。
“压缩 ASMS”
,用于压缩 ASMS 文件夹中的文件,大约可以节省 4M 空间,但是有可
能会造成安装过程中的错误提示。不建议选中这个选项。 

3.3  使用 nLite 集成驱动 
nLite  提供一个集成第三方驱动到  XP  的功能,这个功能可以简单的将第三方驱动直接
转化为 XP 自身的。
进入 nLite 的驱动集成界面,如下图:

单击“插入”
,可选“单个驱动程序”和“多个驱动程序所在的文件夹”,一般选择“多
个驱动程序所在的文件夹”比较方便。选择包含驱动的文件夹后,nLite  开始检索驱动。检
索完成后弹出如下图界面:

98 

这个界面中包含着你刚才所选的那个文件夹中的所有驱动程序,可以在这里再做一次选
择以选中所需的。如果要全选,请单击“全选”按钮。选择完毕后单击“确定”按钮继续。
如果所选驱动中包含 SATA、RAID、SCSI 驱动,那么会出现如下图的一个提示框:

99 

这个提示框会列举刚发现的 SATA、RAID、SCSI 驱动,并提问是以“常规 PNP 驱动程
序”方式集成还是以“文本模式驱动程序”集成。这里简单的说明一下这两种方式。
以“文本模式驱动程序”集成的 SATA、RAID、SCSI 驱动,这部分驱动用于系统安装
时系统安装程序能够识别出磁盘驱动器以安装操作系统。磁盘驱动器识别完毕,这部分驱动
就不再有作用。
以“常规 PNP 驱动程序”集成的 SATA、RAID、SCSI 驱动,与显卡、声卡驱动一样,
用于让 Windows 更好的操纵硬件以达到更高的性能。
根据实际情况选择以那种情况集成 SATA、RAID、SCSI 驱动。选择完毕后,如下图界
面: 

3.4  系统组件的精简
说组件精简前必须说一下关于精简的一些问题。
一些人认为,只要系统精简了就会影响兼容性和稳定性,会造成一系列的不良的后果。
这些观点的确是对的,但是要看是精简了什么内容,影响力哪些兼容性和稳定性。如果精简
掉的是一些极少用到的部分,损失的是极少的兼容性和稳定性,那么也大可放心。
系统精简和人减肥一样,如果只是适当的减肥,可以保持一个不错的体型,但是如果减
肥过度,那么必将导致疾病。
做系统精简需要一种心态,一定要把握住某组件到底是什么作用时才去做精简操作,如
果一知半解的乱精简,出问题的几率就很大了。但是也不要因此而不敢尝试,万一的确搞不
清某组件的意义,可以大胆的尝试一下。尝试和乱试可不一样,一定要把握住。
说完这些,我们进入 nLite 的组件精简部分,

100 

第一次进入上图这个窗口时会弹出如下图的一个兼容性窗口,

101 

这个窗口中有很多可供选择的提前“保护”起来的组件组,如果您对精简还不了解,怕
精简掉了具有关联性的组件,可以在这个弹出的兼容性窗口中执行选择。凡是选中的要提前
保护起来的组件组,精简列表中是不会出现的。建议新手多多使用这个功能。
下面我将不保护任何组件组来详细讲述关于系统精简操作。 

3.4.1  操作系统选项 
.NET 框架,XP 自带的.Net  Framework。虽然有些程序的运行会依赖.Net  Framework,
但是这些程序运行所依赖.Net Framework 的最低版本一般也得 2.0,而 XP 自带的这个是 1.1 
的,即使在用到.Net  Framework 时一般也要手工安装较高的版本,所以 XP 自带的这个.Net 
Framework 保留的必要不大。建议删除。 
16 位支持,对 16 位程序运行的支持,虽然现在 16 位的程序为少数,但是如果用到的
时候没有这个还真是个麻烦事。建议保留。 
Blaster/Nachi 移除工具,用来清理 Blaster 蠕虫病毒的一个工具,现在已经基本过时了。
建议删除。 
FAT 转 NTFS 分区格式转换器,将 FAT 格式转换为 NTFS 的工具,虽然由 FAT 格式转
换而来的 NTFS 格式不如原生的 NTFS 格式性能高,但是这个是进行格式转换的最简单易用
的工具。建议保留。 
Help and Support 
(帮助和支持),现在真正在电脑出问题的时候阅读帮助的人少之又少,
如果你认为“帮助”是一些放着占用空间,看了又解决不了问题的东西,那么可以精简掉这
个。Help  and  Support 组件被精简后帮助文档以及帮助服务都会不再存在,但是此组件的精
简不会影响 HLP 和 CHM 格式文件的阅读。建议删除。 
IE 核心组件,这个是 Windows 显示 Html 的核心组件,很多程序依赖这个核心。删除这
个不仅仅会影响 IE 浏览器的正常使用,很多程序的运行也会变得不正常。强烈建议保留。 
IExpress 向导,Windows 自带的一种用于打包自解压包的小程序,如果您感觉使用 XP 
好久了基本还没听说过这个小程序,那么完全可以将其删除。建议删除。 
Jet 数据库引擎,这是个很重要的数据库引擎,Visual Studio 6、MS Office 等很多程序都
依赖这个数据库引擎。强烈建议保留。 
MDAC,此组件为一些数据库操作提供基本功能,非常多的应用程序需要这个组件的存
在。强烈建议保留。 
MS XML 2.0,老版本的 XML 文件解析工具,解析 XML 格式文件时使用,虽然是老版
本,不过不推荐删除,偶尔碰到 XML 文件时可以暂时一用。建议保留。 
MS 助手,微软的动画助手,例如梅林这个魔法师。虽然理论上这个没有太实际的用途,
不过根据反馈,某些用户反馈在删除了微软助手的系统中某些其他软件的助手会出现不正常
的情况。建议保留。 
VB 管理脚本,用于管理的 Visual  Basic 脚本可用于某些像页面文件大小或事件队列的
任务,这种组件还是不要删除的好了。建议保留。 
VBS 脚本支持,对 VBS 脚本的支持,有一些应用程序需要这个组件,不过删除了这个
组件能够防止一些恶意的 VBS 脚本的运行。建议保留。 
Visual Basic 5  运行库,使用 Visual Basic 编写的程序运行所必需的组件。建议保留。 
Visual Basic 6  运行库,使用 Visual Basic 编写的程序运行所必需的组件。建议保留。 
Windows 漫游,就是第一次进系统时带您了解一下 XP 新性能的小程序。XP 现在已经
不算是“新”系统,XP 的很多功能已经被我们所了解,所以这个小程序的功能已经不再有
太大的意义了。建议删除。

102 

Zip  文件夹,XP  自带的  ZIP  压缩与解压功能,现在我们有很多压缩解压软件(例如 
WinRAR、7z 等)可以完全替代这个组件。建议删除。
安全中心,这个组件的实际意义笔者感觉不大,基本就是用来提示杀毒没安装、防火墙
没打开、自动更新没打开等一些关于“安全”的建议和信息,并不具有实际的“安全”作用。
删除这个组件不会影响 Windows XP SP2 自带的防火墙。建议删除。
帮助引擎,准确的说,这个引擎是用来提供对 CHM 和 MSITStore 协议的支持。强烈建
议保留。
本地安全设置,这个和组策略里的一些关于安全方面的策略有关,用来设置权限、设定
密码策略等。建议保留。
磁盘配额,NTFS 分区格式时一种特别的磁盘空间分配方式。系统管理员可以在 NTFS 
格式的分区上为不同的使用本计算机的用户分配不同的磁盘空间。这是个挺实用的功能,但
是在很多个人使用的计算机中这个功能几乎没有被使用过。建议保留。
磁盘清理,一个小工具,用来清理磁盘中的临时文件、回收站等等,使用的频率不高,
但是某些时候是个很灵便的清理用的小工具。建议保留。
登录通知,这是一个 API 函数,可以用来处理和接受由 Winlogon.exe 生成的一些像登
录、注销、关机等事件信息。建议保留。
额外字体,一些比较少用的字体,可以删除,但是建议保留 webdings.ttf 这个字体,否
则可能会造成某些网页中的乱码。建议删除。
符号调试器(NTSD)
,调试 NT 内核的 Windows 的一个小工具,对普通用户基本没有
意义。建议删除。
格式化驱动器支持,实现格式化某分区的功能,估计没有谁会删除这个功能吧。建议保
留。
管理模板,用于组策略的管理模板。建议保留。
华生医生,一个驻留在系统中,却基本没在系统里露过面,系统坏了还医不好的医生,
废了它吧(……)
。建议删除。
可扩展存储引擎,这个是微软 Windows NT 服务器数据库存储引擎,对普通用户的意义
不大。建议删除。
命令行工具,这是一个工具集合,包含着  Windows  中自带的一些命令行模式的工具,
例如 SFC.exe、Ping .exe、Xcopy.exe 等,都是一些比较常用的工具,很多批处理的执行也需
要用到这些工具,不建议删除。建议保留。
色彩方案,Windows 提供的一些色彩方案,您感觉它们好看吗?建议删除。
审核资源动态链接库,记录和监控系统事件。建议保留。
手动安装和升级,删除后将不能在 DOS 或 Windows 环境下执行系统的安装或升级。如
果仅用于由光盘引导并安装 XP,那么可以不保留这个组件。建议保留。
输入法编辑器,Office 需要这个小工具,而且删除后会造成语言栏一定程度的不正常。
建议保留。
搜索助手,就是那条在你执行搜索的时候汪汪叫的狗,用途不大,可以删除。不过如果
删除此组件,高级搜索功能也将会被删除。建议保留。
网页视图,像浏览网页一样浏览文件夹,作用不大。建议删除。
文档模板,右键­­>新建中的那些文档的模板,很常用,而且体积不大。建议保留。
文件和设置转移向导,用于将您当前计算机的文件和设置转移到其他计算机的工具,这
个是 XP 自带的工具,不过很少有人用过它,甚至很少有人知道它的存在。建议删除。
文件系统筛选管理器,筛选文件时所用到的组件,一些应用程序和某些杀毒软件需要此
组件。建议保留。

103 

系统媒体管理器,用来管理媒体文件各种属性的一种工具。删除有利于提高浏览媒体文
件时的速度,但是媒体文件的信息将不再显示。建议保留。
应用程序兼容补丁,某些程序在 XP 下运行会出现兼容性不好,这种情况在 XP 还未成
为主流时经常有,但是在 XP 流行的今天这个兼容性补丁似乎没有保留的必要,不过一旦用
到某些老程序则可能会造成不必要的麻烦。建议保留。
用户帐号头像,XP 提供给用户的那些小 LOGO,删除后原本出现小 LOGO 的地方将出
现一个叉号,不要为节省这点空间弄的不舒服了。建议保留。
远程安装服务,用于远程分发 XP 到目标计算机,某些无盘计算机的系统部署需要这个
组件。建议保留。
造字程序,创建自定义字的小程序,作用不太大。不过如果您从事研究工作,会用到一
些自创的符号时这个小程序还是有一定的作用的。建议删除。
证书管理,证书管理控制台。建议保留。
注册激活,免激活的系统不需要这个,可以删除。不过不要企图删除非免激活系统中的
这个组件以达到激活的目的。这个组件用于激活当前系统,与系统本身是否需要激活无关。
免激活系统建议删除。
桌面清理向导,定期清理您桌面的图标,用处不太大,偶尔还会造成些小麻烦。建议删
除。
组策略管理控制台,这个组件依赖上面提到的“本地安全设置”,建议这个组件与“本
地安全设置”一同保留。 

3.4.2  多媒体 
Acm 核心编码器,Windows 的 ACM 核心编解码器、Windows Media Player、Ventrilo 以
及某些游戏需要这个组件。建议保留。 
AOL  、ART 图像格式支持,对 AOL、ART 图形格式的支持。建议保留。 
DirectX,这个很重要,如果移除掉这个今后都无法再安装 DirectX,几乎所有的与多媒
体有关的操作都需要这个组件。除非您的计算机专用来打字,否则不要删除这个组件。强烈
建议保留。 
DirectX 诊断工具,关于 DirectX 对诊工具,也就是我们在“运行”里输入“dxdiag”回
车后弹出的那个小工具,挺实用。建议保留。 
Intel Indeo 编解码器,这是个较为古老的解码器,但是某些游戏的视频或者开场动画可
能需要这个解码器,例如 CS 的开场动画。建议保留。 
Luna  主题,就是  XP  自带的那个蓝天白云,某些程序,例如主题加载程序和一些外观
模拟程序可能需要这个主题。建议保留。 
MIDI 音频支持,对 MIDI 音频的支持,某些声卡驱动可能需要这个组件。搞音乐的朋
友一定不要删除掉这个。建议保留。 
Movie Maker,XP 自带的可以用来简单的修改视频的小程序,挺简单实用的,不过现在
有很多程序可以代替这个。建议删除。 
OpenGL 支持,海量的游戏都需要这个组件。强烈建议保留。 
Windows Media Player,虽然基本不用这个播放器,但某些时候没有这个还真有点不行,
例如播放某些流媒体时。XP 默认自带的版本是 9,如果您使用了更高版本 Windows  Media 
Player 的整合包,请勿删除这个。建议保留。 
Windows  Media  Player  6.4,这个是 Windows  Media  Player 的基础,除非今后不再使用 
Windows Media Player,否则不要删除这个组件。建议保留。

104 

Windows 声音,开机、关机、注销、发现新硬件、打开关闭文件夹、鼠标单击等等的声
音,删除了之后真的是世界都宁静了。除非您喜欢无声世界,否则不要删除这个。建议保留。 
Windows  图片和传真查看器,Windows  提供的用来查看图片和传真的程序,如果您习
惯使用 ACDSee 这类看图软件,可以删除这个组件。建议保留。
老式 CD 播放器以及录音机,用途不太大,不过录音机可以帮我们测试一下麦克风。建
议保留。
媒体中心,XP 有媒体中心版本,可由普通 XP 升级而成,如果您的 XP 不打算升级到
媒体中心,完全可以删除这个组件。建议删除。
平板电脑,用于平板电脑(Tablet PC)的组件,可以让用户更好的操作平板电脑。删除
这个不会去掉对平板电脑的支持。不过根据经验表明,删除此组件切换输入法时会出现问题。
建议将此组件与以上提到的“输入法编辑器”一同保留。
鼠标光标,XP 提供的一些鼠标光标,实话说,都比较丑。建议删除。
图像背景,XP 自带的桌面壁纸。如果您要整合您自己的壁纸,那么建议删除。
音乐范例,我的文档à我的音乐中的两个范例音乐,不怎么好听还占用空间。建议删除。
用于播放(WMP)在线流媒体的控件,由网络接收流媒体时必须的组件。建议保留。
语音支持,某些能够发音的软件,例如金山词霸、某些手写板的语音程序等,需要这个
组件。建议保留。 

3.4.3  服务 
COM+,挺重要的一个服务,强烈建议保留。 
DHCP 客户端,注册和更改 IP 地址以及 DNS 名称来管理网络配置。建议保留。 
DNS 客户端,为计算机解析和缓冲域名系统名称。建议保留。 
HTTP SSL,此服务通过安全套接字层实现 HTTP 服务的超文本传输协议。建议保留。 
IMAPI  光盘烧录服务,微软提供的光盘烧录服务,删除这个服务不会影响第三方刻录
软件的使用。建议删除。 
Internet  身份验证服务,此服务用于将与连接请求相关的验证与授权任务彼此分开。建
议保留。 
IPSec  策略代理,管理 IP 安全策略以及启动 ISAKMP/Oakley (IKE) 和 IP 安全驱动程
序。建议保留。 
Kerberos  密钥发布中心,对整个活动目录范围内的用户登录进行验证。建议保留。 
Messenger,用于在局域网发送信息,作用不大,曾经被用于投放广告。建议删除。 
Network DDE,为在同一台计算机或不同计算机上运行的程序提供动态数据交换(DDE)
的网络传输和安全。普通用户很少用到,建议删除。 
QoS RSVP,传说中的那个保留 20%带宽以提高网络通畅度的服务。这个会影响许多 P2P 
软件的下载速度。建议删除。 
Quality  of  Service  (QoS)
,用以控制网络流量与优先级,Nod32 需要这个组件。建议
保留。
RPC Locator,管理 RPC 名称服务数据库。建议保留。 
TCP/IP NetBIOS  助手,允许对“TCP/IP 上  NetBIOS (NetBT)”服务以及 NetBIOS 名称
解析的支持。建议保留。 
Telnet 服务器,当本地计算机作为 Telnet 服务器时需要这个服务,删除这个服务不会删
除 Telnet 客户端。普通用户的机器不会作为 Telnet 服务器使用,建议删除。 
Windows 防火墙/Internet  连接共享(ICS)
,这个服务与 Windows 防火墙和连接共享有

105 

关系。建议保留。 
Windows 管理规范,WMI,很多程序和组件需要这个服务。强烈建议保留。 
Windows 时间,用于同步本地计算机与网络的时间,如果您习惯于手工调节系统时间,
建议删除这个服务。
不间断电源供应,UPS,普通用户不会用到这种设备,建议删除。
传真服务,建议保留。
存储保护,对敏感数据进行保护,例如用户密码,禁止未授权的服务、程序以及用户访
问。建议保留。
错误报告,在系统出现错误时自动生成一份报告,并提示您是否要将此问题反馈给微软。
这个功能一直没有太大的用途,毕竟能给您快速解决系统问题的还是客服,而不是微软。建
议删除。
二次登录,可以让处于一定权限的用户使用另一种用户的权限执行某些操作,例如在普
通用户模式下使用  Administrator  用户的权限执行某些操作,但是我们大多数人都习惯直接
使用 Administrator 来登录和使用计算机,所以这个服务也没太大的用处。建议删除。
分布式链接跟踪客户端,保持用户计算机内部各 NTFS 分区之间或网络间跟踪已链接文
件。普通用户很少用到的功能,建议删除。
分布式事务协调器,协调各个客户端、服务、资源管理器之间的事务。强烈建议保留。
蜂鸣驱动程序,机器“滴”的一声就是用的这个驱动程序,不过这个驱动程序的确是以
服务的方式存在的。建议保留。
服务公布协议,此服务用于提供一个服务节点通路,例如文件服务器、打印服务器、网
关服务器等等,以注册它们的服务及服务器信息表中的地址,并令这些服务通过 Internet 进
行广告。建议保留。
后台智能传输,在系统后台传输服务器与客户端之间的信息,Windows  Update 需要这
个服务的支持。如果您不需要 Windows 通过 Update 程序自动升级,可以删除这个服务,毕
竟现在有一些软件就提供自动下载补丁并安装的功能。建议保留。
简单 TCP/IP 服务,支持各类 TCP/IP 服务,建议保留。
简单网络管理协议,用以让一台计算机被远程管理,建议保留。
警报,通知所有计算机和用户一些系统管理级的警报,默认禁用,建议删除。
卷影复制,这是个普通用户不会用到的功能,建议删除。
可移动存储,对 ZIP 或者磁带机之类的可移动存储设备的支持,与 U 盘等 USB 可移动
设备无关。建议删除。
路由监听服务,让本机提供路由功能。建议保留。
任务计划,用于让用户配置任务,再有计算机在指定的时间以指定的形式运行某些应用
程序。Windows 预读取功能、一些杀毒软件等需要这个服务。强烈建议保留。
事件日志,记录关于系统的各种日志信息。强烈建议保留。
索引服务,搜索本地或远程计算机文件时形成索引的服务,虽然会一定程度的提高搜索
效率,但是会一定程度的降低计算机运行速度。经常使用大量搜索的朋友建议保留这个服务,
否则删除。建议删除。
通用即插即用,提供即插即用设备支持。强烈建议保留。
外壳服务,这个包含 Fast User Switching Compatibility(快速用户切换服务)和 Themes 
(主题服务)两个服务,删除的话会同时删除这两个服务。建议保留。
网络登录,用于支持网络登录身份验证。建议保留。
网 络 供 应 服 务 , 为 自 动 网 络 提 供 管 理 基 于 域 的  XML  配 置 文 件 , Wireless  Zero 
Configuration  服务需要它来存储与无线网络相关的信息。删除该服务后会造成  Windows  启

106 

动变慢。强烈建议保留。
网络客户端,允许 Win32 程序访问与修改 Internet 中的文档,普通用户很少用的到。建
议删除。
网络位置识别服务,收集并保留网络配置和位置信息,删除后会造成任务栏网络连接图
标不正常,例如接入网络后虽然已经连接却始终显示为搜索 IP 状态。强烈建议保留。
文件服务框架,这个就是 ctfmon 了,用于切换输入法以及 Microsoft Office 语言栏服务。
强烈将以保留。
无线配置,无线网卡需要这个服务,除非您的系统不安装于笔记本等带有无线网卡设备
的计算机,否则不推荐删除。建议保留。
系统还原,如果您管惯用 Ghost 来备份与恢复系统,完全可以删除这个服务。移除这个
服务将彻底从 XP 中移除系统还原功能。建议删除。
系统监视,用以监视系统的各项运行参数,某些监控用的服务和软件依赖这个服务的存
在。强烈建议保留。
系统事件通知,跟踪系统事件,如登录 Windows,网络以及电源事件等。将这些事件通
知给 COM+ 事件系统“订阅者(subscriber)”
。强烈建议保留。
消息队列,接收到的消息按队列与一个 COM 组件或是一个独立可执行程序中的功能相
关联。强烈建议保留。
性能日志和警报,搜集当前系统性能相关的日志、性能数据,写入日志或者处罚警报。
强烈建议保留。
应用程序层网关,为 Inernet 链接共享和 Windows 防火墙提供第三方插件的支持。建议
保留。
远程注册,这个服务允许远程用户修改本地计算机的注册表,经常会被恶意利用,建议
删除。
终端服务,允许多位用户连接并控制一台计算机,并且在远程计算机上显示桌面和应用
程序,这个服务是远程桌面、快速用户切换、远程协助和终端服务器的基础结构。强烈建议
保留。
自动更新,Windows Update 和 IE7 需要这个组件,如果您已经不使用 Update 来获得补
丁并且只适用 IE6,那么可以删除这个服务。建议保留。 

3.4.4  键盘布局
保留如下选项,其他删除。
简体中文: 
Chinese (Simplified) – Microsoft Pinyin IME 3.0  键盘布局 
Chinese (Simplified) – NeiMa  键盘布局
繁体中文: 
Chinese (Traditional) – ChangJie  键盘布局
日文: 
Japanese Input System (MS – IME2002)  键盘布局 
Japanese 键盘布局
韩文: 
Korean Input System (IME2002)  键盘布局 
Korean 键盘布局

107 

3.4.5  驱动程序 
IBM PS/2  指点杆,不建议删除这个,当今 IBM 的本本都带有这个指点杆。 
IBM  ThinkPad,如果要在系统安装完毕后再为系统安装 ThinkPad 驱动或已经整合了更
新版本的驱动,可以删除这个。 
ISDN,现在很少用这个的驱动,建议删除。 
SCSI/RAID,XP 自带的 SCSI 和 RAID 驱动,某些时候很有用,而且体积不大,建议保
留。 
Sony  滚轮键,关于 Sony 鼠标滚轮键的驱动,不建议删除。
便携音频设备,不多见这种设备,可以删除。
串行手写板,串行端口手写板的驱动,现在的手写板多为 USB 的,所以这个可以删除。
磁带驱动器,除非您有可用的磁带机,所以这个驱动的确是过时了,建议删除。
打印机,虽然 XP 自带的打印机驱动并不新也不全,但是有一些打印机驱动依赖 XP 自
带的这部分打印机驱动,如果精简掉了则会造成打印机驱动无法安装。强烈建议保留。不过
如果您不使用打印机,这个则无关紧要。
调制解调器,XP 自带的调制解调器驱动,现在调制解调器还存在于一些笔记本电脑中,
但是 XP 自带的这些驱动也已经识别不出来当今的这些调制解调器了。建议删除。
东芝 DVD 解压卡,基本没见过这种设备,建议删除。
多功能卡,一些多功能卡依赖这个驱动,建议保留。
罗技手柄,建议保留。
扫描仪,这个和打印机驱动一样,不新也不全,但是某些扫描仪的驱动依赖 XP 自带的
扫描仪驱动,如果精简掉了则无法安装这些打印机驱动。建议保留。
声音控制器,XP 自带的声卡驱动,可以删除。
数码摄像设备,XP 自带的数码摄像设备驱动,但不排除某些老式数码摄像设备会依赖
这个驱动,建议保留。
网络适配器,XP 自带的网卡驱动,可以删除。
微软手柄,建议保留。
无线网络,XP 自带的无线网卡驱动,可以删除。
显示适配器,XP 自带的显卡驱动,可以删除。
显示适配器(旧式)
,XP 自带的一些较旧的显卡驱动,可以删除。
异步传输模式,ATM 网络或设备需要的驱动程序,一般计算机用不到,建议删除。 

3.4.6  网络 
FontPage 扩展,这个组件用于通过 Microsoft FrontPage 和 Visual InterDev 来创建和管理
网站。现在 FontPage 的使用还真不多了,用不到就删除吧。 
H323 MSP,允许程序通过 H.323 协议创建和接收视频音频文件。建议保留。 
Internet Explorer,IE 浏览器,这个只是浏览器程序,不是 IE 的核心。如果不使用 IE 浏
览器,完全可以删除这个,世界之窗、傲游等实用 IE 核心的浏览器同样可正常工作。不过
删除这个会造成 Windows  Update 无法正常使用,以及快捷启动栏的“显示桌面”消失。建
议保留。 
Internet  连接向导,这个只是向导,帮助计算机连接 Internet,不具备太实际的功能。在
我们普遍手工配置网络参数的今天,这个向导的意义不大。建议删除。 
Internet  信息服务,IIS,个人感觉 XP 上的 IIS 意义不大,如果真要使用和研究 IIS 建

108 

议在服务器系统中使用。不过如果只是想了解一下  IIS  并使用其部分功能,XP  的这个  IIS 
还是有存在意义的。但是 IIS 也的确是个普通用户很少用到的功能。建议删除。 
IP 会议,意义不大,建议删除。 
MAC 网桥,用于连接不同的网段,建议保留。 
MSN Explorer,MSN 的一个浏览器,实用意义不大。建议删除。 
Netmeeting,XP 自带的网络通讯程序,当今已经不具备太大的使用价值。建议删除。 
NetShell 命令行工具,一个网络命令的集合,如果您喜欢各种网络命令或者您经常使用
这些命令维护网络的话,建议保留。 
Netware  客户端服务,用于  Netware  网络中的客户端协议和程序,普通用户很少接入 
Netware 网络。建议删除。 
NWLink IPX/SPX/NetBIOS 协议,用于局域网,一些游戏例如《星际争霸》等需要这个
协议来实现联机操作。建议保留。 
Outlook Express,Windows 自带的邮件收发程序,虽然不怎么用,不过如果移除这个则
会造成丢失对 MHT 格式文件的支持,而且无法安装 Microsoft Office 中的 Outlook。建议保
留。 
TAPI 程序支持,TAPI 能让  Windows  程序互相共享电话设备,并且可以为大范围的硬
件平台提供一个通用程序媒体的方法。建议保留。 
TCP/IP V6,TCP/IP V6 是新一代的网络协议,很多地区渐渐的开始支持 TCP/IP V6 网络
协议了。建议保留。 
Windows Messenger,Windows 自带的一个通讯工具,类似 QQ,这个并不是 MSN,建
议删除。
拨号和虚拟个人网络支持,如果删除,则不仅会移除 Modem,所有的“用户/密码”模
式的网络登录将都被移除。建议保留。
电子邮件和消息传递 API,Windows Live Messenger 需要这个组件。建议保留。
端口测试终端程序,用于调试端口对端口的通讯,普通用户用不到。建议删除。
对等网络,Peer­to­Peer,这个不是普通的 P2P,有一些软件采用这种方式来传递文件,
例如 RaySource。建议保留。
共享创建向导,用于创建共享的向导,例如创建文件共享、打印机共享等,不具有实际
意义,如果习惯于手工创建共享,那么可以删除这个。建议保留。
活动目录服务,这个是基于网络的对象存储和服务,用于定位和管理资源,能让经过认
证的用户和用户组使用这些资源,将这个组件移除后将会禁用“本地用户和组”管理。建议
保留。
连接管理器,让客户端的计算机使用受管制的远程访问连接。建议保留。
矢量图形呈现,这个与网页中的可缩放向量图型有关。建议保留。
通讯工具,MS  Chat 工具、拨号工具(与“宽带连接”不同)
、超级终端,不用的话可
以删除。建议删除。
同步管理器,用于管理本地计算机文件与远程计算机的文件同步,普通用户用不到。建
议删除。
网络安装向导,调整各项网络配置的向导。建议删除。
网络监视驱动程序及工具,为网络监控程序提供数据。建议保留。
网络文件夹,允许本地用户像访问本地文件夹一样访问远程计算机中的文件夹,普通用
户用不到。建议删除。
映射网络驱动器向导,建议保留。
(Control UserPassword2 命令同样需要这个组件)

109 

3.4.7  应用程序 
Internet 游戏,XP 自带的几个可以连接到 Internet 可多人共同玩棋牌类游戏,但是在中
国联众游戏平台、QQ 游戏平台这么发达的今天,这几个 XP 自带的网络游戏真正的落伍了。
建议删除。 
NT 备份程序,如果习惯使用了 Ghost 来备份与还原,这个没什么意义了。建议删除。
磁盘碎片整理,虽然版本低点,但是还是挺好用的,建议保留。
辅助选项,为残障人士设计的辅助选项,普通用户用不到,建议删除。
公文包,建议删除。
画图,偶尔还是有用的,例如我朋友的小儿子就特别喜欢这个,~~。建议保留
计算器,偶尔算个数,还是挺管用的。建议保留。
剪切簿查看器,查看剪切的文本的工具,普通用户基本用不到,建议删除。
屏幕保护,如果您厌倦了 XP 自带的屏保,或者您已经集成了更漂亮的屏保,可以删除
这个。而且在当今液晶屏幕流行的今天,屏保已经失去了它本来的意义。建议删除。
三维弹球,一个小游戏,需要就留下。建议删除。
写字板,没有 Word 时,这个可以顶一顶,建议保留。
游戏,蜘蛛纸牌、扫雷等经典的 XP 自带的游戏,很多人还挺喜欢玩这些的,建议保留。
字符映射表,用于向文本内插入特殊字符和特殊符号,很多输入法都有类似的功能,建
议删除。 

3.4.8 硬件支持 
AGP 筛选器,建议保留。 
ALI 1535 SMBus 宿主控制器,建议保留。 
ATM 支持,建议删除。 
Brother 设备,建议删除。 
CMD IDE 总线驱动程序,建议保留。 
CPU AMD,建议保留。 
CPU Intel,建议保留。 
CPU Transmeta Crusoe,建议保留。 
Gravis 游戏端口,建议删除。 
IEEE1284.4 设备(Dot4)
,有一些打印机或扫描仪设备需要这个,建议保留。 
Iomega Zip 设备,建议删除。 
Micorsoft 色彩管理器(ICM)
,建议保留 
PCMCIA,建议保留 
Ramdisk,建议保留 
SD 卡设备控制器,建议保留 
Sony 记忆棒,建议保留 
USB 网络,建议保留 
USB 音频设备,建议保留 
USB 视频捕获设备,建议保留 
Windows CE USB 设备,建议保留 
Windows 图像捕获,建议保留
打印机支持,建议保留

110 

电池,建议保留
调制解调器支持,建议保留
东芝 IDE 总线驱动程序,东芝计算机专用的 IDE 总线驱动程序,可以删除。
端口(串口和并口)
,这个是指计算机背后的串口和并口,以前用来接打印机或其它设
备的那种,不是硬盘的串口和并口。现在的新型主板一般都没有这两种端口,但是还是建议
保留对着两种端口的支持。
多处理器支持,建议保留。
多端口串行适配器,建议删除。
红外线,建议保留
火线 1394,建议保留
火线 1394 网络支持,建议保留
蓝牙支持,建议保留
逻辑磁盘管理器,建议保留
软驱支持,可以删除。
视频捕获,建议保留
手柄支持,建议保留
图文解编码,建议保留
威盛 IDE 总线驱动程序,建议保留
扬智 IDE 总线驱动程序,建议保留
英特尔 IDE 总线驱动程序,建议保留
智能卡,建议保留 

3.4.9  语言
保留如下选项,其他删除。
简体中文: 
Simplified Chinese 
繁体中文: 
Traditional Chinese 中的 Chinese(Taiwan) 
日文: 
Japanese 
韩文: 
Korean 

3.5  使用 nLite 自动生成无人值守应答文件
上一章中我们介绍了无人值守安装的实现,当时我们是手工写的 Winnt.sif,大家是不是
感觉很繁琐?nLite 提供了一个功能,能够自动生成 Winnt.sif,并自动执行一些其他的和自
动化安装有关的步骤,图形化,相当简单。 
1>“常规”选项卡

111 

无人值守安装模式,其实无人值守也有很多种模式,nLite 默认为“Hide  pages”,这种
模式是我们最常使用的。如果还想了解其他的几种模式,可以单击“无人值守模式”后的那
个“?”来查看帮助。 
OEM Preinstall,这个在上一章已经介绍过了,这个功能其实就是设定 OemPreinstall 的
值是为“Yes”还是为“No”
。如果为 Yes 则使用$OEM$文件夹,反之则不。 
Program Files 路径,这个用来指定 Program Files 的路径,默认为系统盘下 Program Files 
文件夹,可以通过修改定制为其他路径。
数据执行保护,关于这个的说明比较长,有兴趣的话可以单击“数据执行保护”后的那
个“?”来查阅。一般情况下默认即可。
授权模式,用于 Windows 服务器的版操作系统,XP 下无效。 
CD­Key,一定要输入一个正确的可用的 CD­Key,否则安装过程中还是会提示你输入。
计算机类型,如果选择一定的计算机类型则只能安装在这种类型的计算机中,建议选择
“默认”
,默认情况下会根据计算机实际情况自动选择类型。
杂项,可以用来关闭防火墙、休眠,如果是非免激活系统还可以用来跳过 OOBE 
(激活)

但并不是实现非免激活系统到免激活系统的途径。
系统还原,如果设定“启动”则可设置系统还原相关信息,也可以直接设置为关闭。 
2>“RunOnce”选项卡

112 

有了上一张对  GUIRunOnce 的深刻印象,相信您已经对  GUIRunOnce 的使用相当的了
解。这个选项卡就是用来简化 GUIRunOnce 的配置过程。
在“要添加到命令”中写入命令,然后单击右侧的添加按钮即可,nLite  会自动帮您生
成 Command1、Command2…CommandN。十分简便。 
3>“用户”选项卡

113 

我们一般是直接使用 Administrator 登录的,所以这里设置 Administrator 空密码即可。 
4>“所有者和网络 ID”选项卡

这里用来指定计算机名、工作组等所有者信息,按需设定即可。 
5>“区域”选项卡

114 

语言,这里一般我们都选择 Chinese,如果您需要其他语言可以在此选择。
语言组,一般会使用到的语言为简体中文、繁体中文、日文、韩文,所以选中这四种就
可以了。
使用语言类型,如果不定制的话则会根据您当前操作系统的语言类型来执行设定,如有
需要可以自行定制所需的语言类型。
时区,我们一般选择 GMT+08:00 这个时区。 
6>“网络设置”选项卡

设定计算机网络信息专用的选项卡。 
7>“桌面主题”选项卡

115 

这个选项卡中可以集成您所喜欢的第三方主题,并制定第一次进系统时的默认主题。有
一点要注意到是,如果您在此集成了第三方主题,最好在后面的“调整”功能中选择破解 
UxTheme,否则第三方主题不一定能够正常使用。 
8>“自动更新”选项卡

可以设置自动更新的模式,例如下载并安装(可设定执行时间)、下载并通知是否安装、

116 

有可用下载时通知我、禁用。 
9>“显示”选项卡

这个选项卡中的内容对应着 Winnt.sif 中的: 
Xresolution、 
Yresolution、 
BitsPerPel、 
Vrefresh 
10>“组件”选项卡

117 

这个选项卡用来设定某些特定的组件是否的安装与否。例如 IIS 和安全配置向导(只有 
Windows Server 2003 中有)

到这里,无人值守安装部分就介绍完了,比我们手动写 Winnt.sif 简单快捷的多了。 

3.6  使用 nLite 完成关于系统的调整

118 

“常规”选项卡
我们可以设定与系统安装的有关信息,大多数设定大家可以灵活把握。
有一点要注意的是,杂项中的“Press Any Key…引导信息”这个选项,如果您的 XP 光
盘使用  w2ksect.bin  这类引导文件直接引导启动,请将这个选项设定为启用,如果您的  XP 
光盘使用 Easyboot 这类软件实现引导,请将这个选项设定为禁用。以避免比必要的麻烦。
“补丁”选项卡
最大未完成并发连接数,也就是我们经常说的最大连接数的破解,其实就是破解 
TCP/IP.SYS,XP 默认最大连接数为 10,这让很多 P2P 软件都受不了,破解这个有利于增加
下载速度。建议破解为 1000 以下。但根据使用者反馈,使用 nLite 破解的 TCP/IP.SYS 出现
过不能被某些软件(例如迅雷、BitComet 等)识别的情况。 
USB 端口轮询频率,这个据说有助于提高 USB 鼠标的移动平滑度,但 nLite 也警告说
不要用于无线鼠标和其它 USB 设备。为了兼容性,我们还是把这个保持默认好了。
支持未经认证的主题(UxTheme 补丁)
,如果启用这个功能则会对 UxTheme.dll 进行破
解和修补以让系统可以直接支持第三方主题文件。 
SFC(系统文件保护),微软提供的系统文件保护机能,会在  System32  下生成一个 
DllCache 文件夹以备份某些系统文件,当这些经过备份的系统文件被修改时会自动将备份替
换回去以保证系统的稳定与安全性。这个机能刚出现的时候的确可以保证系统在一定程度上
免受一些恶意攻击和病毒的侵扰,不过当前的病毒都不是傻子,对系统执行破坏时会有意的
绕过 SFC。这个机能现在用处不是太大,建议禁用。 

3.7  使用 nLite 完成常用注册表项与服务的优化调整 
nLite  提供常用注册表项与服务的优化,这些优化是直接修改系统文件得来的,系统安
装完成时这些优化就已经完成。

119 

nLite  的常规注册表优化与服务优化可视化水平很高,而且在本文第一章中已经详细介
绍了注册表和服务优化,所以在此不再累述,大家注意看好说明,灵活把握就可以了。
做完这一布,再“前进”的话 nLite 就会提示即将开始执行系统定制,单击确定后定制
过程就会开始。根据所作定制的数量、集成补丁的数量、集成驱动的数量的不同,自动化定
制过程可能要持续 2~10 分钟,请大家耐心等待自动定制过程的完成。

120 

自动化定制过程完成后,一套由 nLite 协助定制的 XP 安装文件就生成了,但是不要以
为到这里就可以封装为 ISO 光盘镜像并使用了,nLite 执行完定制操作后必须执行一些后期
的操作来使其更完美。 

3.8 nLite 后期制作
( 本 节 中 的 一 些 处 理 方 法 出 自 原 啄 木 鸟 工 作 室 , 现 隶 属 雨 林 木 风 , 网 址 
http://bbs.ylmf.com/thread­ylmf­fid­272.html,由此对啄木鸟、bida 等人为 nLite 的额外精简与
处理工作作出的贡献表示由衷的感谢!
) 
nLite 的后期制作比 nLite 制作要重要而且要复杂的多,nLite 本身是很优秀的软件,但
是无论什么软件都会有 BUG,这是无法避免的。 
nLite 的后期制作水平,决定着一个人使用 nLite 的能力,其实拿 nLite 来定制系统本来
就是很简单的事情,高手和菜鸟的区别,仅仅是后期制作能力。
在将后期制作之前,我先来说一下在 3.3 节讲组件精简时有一个没有提到的地方,如下
图:

这个是由 3.3 节中关于组件精简的窗口中的“高级”选项。这个窗口分为上下两部分。
上半部分为“保留框”
,您可以将需要额外保留的组件或程序写入这个框中。写入后,
无论怎样执行组件精简,都会保留您需要保留的组件或程序。例如上图中保留框中的 
msconfig.exe,这个程序在正常情况下如果删除了帮助与支持就会一同被删除,而如果我们
把它加入了额外保留框,那么即使我们删除了帮助与支持这个程序也会被额外保留下来。
有一点要注意到是,
“保留框”只能保留 system32 文件夹下的文件或者驱动包中的文件。
下半部分为“删除框”
,您可以将需要额外删除的组件或程序写入这个框中。写入后, 
nLite 在执行自动定制时会删除您所添加到需要删除的组件或程序。

121 

好了,了解了“保留或删除额外文件”这个窗口的作用,我们就可以执行一些“高级”
操作了。 

3.8.1  额外保留
为了保证系统的安全性和稳定性,笔者建议额外保留如下内容: 
1>系统稳定性相关内容:
微软即时通讯相关应用程序接口文件:inetcomm.dll 
帮助中心服务:helpctr.exe、winhelp32.exe、win.hlp 
建议保留的字体:webdings.ttf 
留着测试网络用:ping.exe 
避免在一些早期型号的 ibm 笔记本上安装指点杆驱动的时候提示缺少文件:tp4.hlp 
前最常用的环境管理协议:smi.mib 
系统配置实用程序:msconfig.exe 
2>语言相关:
支持简体中文、台湾繁体、中文、韩文、日文:gulim.ttc、msgothic.ttc、mingliu.ttc 
简体关键代码页:prc.nls、prcp.nls 
繁体关键代码页:big5.nls 
繁体关键代码页:bopomofo.nls 
(MAC ­  日文):c_10001.nls 
(MAC ­  繁体中文  Big5):c_10002.nls 
(MAC ­  韩文):c_10003.nls 
(CNS ­  台湾):c_20000.nls 
(日文 JIS X 0208­1990 & 0212­1990):c_20932.nls 
(简体中文  GB2312):c_20936.nls 
(韩文 Korean Wansung):c_20949.nls 
(ISO­2022  简体中文):c_is2022.dll 
(GB18030  简体中文):c_g18030.dll 
(OEM ­  美国):C_437.nls 
(ISO 8859­1  拉丁文):C_28591.nls 
(US­ASCII):C_20127.nls 
Unicode  关键代码页:unicode.nls 
韩文关键代码页:ksc.nls 
日文关键代码页:xjis.nls 

3.8.2  额外删除
有一些文件可以删除,基本不会对系统造成影响,删除这些文件可以有效的减少系统文
件的体积: 
1>移除 XP 删除额外字体: 
ahronbd.ttf、andlso.ttf、angsa.ttf、angsab.ttf、angsai.ttf、angsau.ttf、angsaub.ttf、angsaui.ttf、

122 

angsauz.ttf、angsaz.ttf、artrbdo.ttf、artro.ttf、browa.ttf、browab.ttf、browai.ttf、browau.ttf、 
browaub.ttf、browaui.ttf、browauz.ttf、browaz.ttf、cordia.ttf、cordiab.ttf、cordiai.ttf、cordiau.ttf、 
cordiaub.ttf、cordiaui.ttf、cordiauz.ttf、cordiaz.ttf、david.ttf、davidbd.ttf、davidtr.ttf、estre.ttf、 
frank.ttf、 
gautami.ttf、 
kartika.ttf、 
latha.ttf、 
lvnm.ttf、 
lvnmbd.ttf、 
mangal.ttf、 
mriam.ttf、 
mriamc.ttf、 
mriamfx.ttf、mriamtr.ttf、nrkis.ttf、 
raavi.ttf、 rod.ttf、 rodtr.ttf、 shruti.ttf、 simpbdo.ttf、 
simpfxo.ttf、 
simpo.ttf、sylfaen.ttf、tradbdo.ttf、trado.ttf、tunga.ttf、upcdb.ttf、upcdbi.ttf、upcdi.ttf、upcdl.ttf、 
upceb.ttf、upcebi.ttf、upcei.ttf、upcel.ttf、upcfb.ttf、upcfbi.ttf、upcfi.ttf、upcfl.ttf、upcib.ttf、 
upcibi.ttf、upcii.ttf、upcil.ttf、upcjb.ttf、upcjbi.ttf、upcji.ttf、upcjl.ttf、upckb.ttf、upckbi.ttf、 
upcki.ttf、upckl.ttf、upclb.ttf、upclbi.ttf、upcli.ttf、upcll.ttf、vrinda.ttf。 
2>移除 LANG 目录一些无用的文件: 
VGA950.FON 、 VGA949.FON 、 VGA932.FON 、 S8514SYS.FON 、 S8514OEM.FON 、 
S8514FIX.FON 、MSMINCHO.TTC 、 JVGASYS.FON 、JVGAFIX.FON 、JSMALLF.FON 、 
JSMALLE.FON 、 J8514SYS.FON 、 J8514OEM.FON 、 J8514FIX.FON 、 HVGASYS.FON 、 
HVGAFIX.FON、H8514SYS.FON、H8514OEM.FON、H8514FIX.FON、CVGASYS.FON、 
CVGAFIX.FON 、 C8514SYS.FON 、 C8514OEM.FON 、 C8514FIX.FON 、 BATANG.TTC 、 
APP950.FON、 
APP949.FON、 
APP932.FON、 
msir3jp.lex、 
korwbrkr.lex、 
chsbrkr.dll、 
chtbrkr.dll、 
msir3jp.dll、korwbrkr.dll、ftlx0411.dll、noise.cht、noise.jpn、noise.kor。 
3>删除无用的代码页: 
wbcache.nld、 
noise.nld、 
wbdbase.nld、 
c_10006.nls、 
c_10007.nls、 
c_10010.nls、 
c_10017.nls、 
c_10021.nls、c_10079.nls、c_10081.nls、c_10082.nls、c_1026.nls、c_1047.nls、c_1142.nls、 
c_1143.nls、 
c_1149.nls、 
c_1250.nls、 
c_1251.nls、 
c_1254.nls、 
c_1255.nls、 
c_1256.nls、 
c_1257.nls、 
c_1258.nls、c_20107.nls、c_20108.nls、c_20277.nls、c_20278.nls、c_20420.nls、c_20423.nls、 
c_20424.nls、c_10005.nls、c_20880.nls、c_20905.nls、c_20924.nls、c_21025.nls、c_21866.nls、 
c_28592.nls、c_28593.nls、c_28594.nls、c_28595.nls、c_28596.nls、c_28597.nls、c_28598.nls、 
c_28599.nls、 c_28603.nls、 c_28605.nls、 c_708.nls、 c_720.nls、 c_737.nls、 
c_775.nls、 
c_850.nls、 
c_852.nls、 
c_855.nls、 
c_857.nls、 
c_858.nls、 
c_861.nls、 
c_862.nls、 
c_864.nls、 
c_865.nls、 
c_874.nls、 
c_10004.nls、c_037.nls、c_20871.nls。 
4>日文输入法(仅仅是 XP 自带的日文输入法,与日文语言文件无关): 
imjpcic.dll、imjpcus.dll、imjpdct.dll、imjpdct.exe、imjprw.exe、imjpuex.exe、imjputy.exe、 
imjputyc.dll、imjpinst.exe、imjpinst.ini、imjpmig.exe、imjpdsvr.exe、imjpdadm.exe、imjpch.dic、 
imjpcd.dic、 
imjpln.dic、 
imjpnm.dic、 
imjpsb.dic、 
imjpst.dic、 
imjptk.dic、 
imjpzp.dic、 
imjpgn.grm、 
hwxjpn.dll、 
imskdic.dll、 
imskf.dll、 
multibox.dll、 
softkey.dll、 
voicepad.dll、 
voicesub.dll、 
cplexe.exe、 
imjpcic.dll、imjpcus.dll、imjpdct.dll、imjpdct.exe、imjprw.exe、imjpuex.exe、imjputy.exe、 
imjputyc.dll、imjpinst.exe、imjpinst.ini、imjpmig.exe、imjpdsvr.exe、imjpdadm.exe、imjpch.dic、 
imjpcd.dic、 
imjpln.dic、 
imjpnm.dic、 
imjpsb.dic、 
imjpst.dic、 
imjptk.dic、 
imjpzp.dic、 
imjpgn.grm、 
hwxjpn.dll、 
imskdic.dll、 
imskf.dll、 
multibox.dll、 
softkey.dll、 
voicepad.dll、 
voicesub.dll、 
imj81.ime、 
imjp81k.dll、kbdjpn.dll、kbd101.dll、kbdax2.dll、kbd106.dll、kbd106n.dll、kbdibm02.dll、 
f3ahvoas.dll、 
kbdnec.dll、 
kbdnecNT.dll、 
kbdnec95.dll、 
kbdnecAT.dll、 
kbdlk41a.dll、 
kbdlk41j.dll、 
imlang.dll、imepadsv.exe、imepadsm.dll、padrs411.dll。 
5>韩文输入法(仅仅是 XP 自带的韩文输入法,与韩文语言文件无关):

123 

hanja.lex、hanjadic.dll、hwxkor.dll、imekr.lex、imekr61.ime、imekrcic.dll、imekrmbx.dll、 
imekrmig.exe、 imkrinst.exe、 imkrinst.ini、padrs412.dll、imekrcic.dll、 imkrinst.exe、 imkrinst.ini、 
imekrmig.exe、hanjadic.dll、hanja.lex、imekr.lex、imekrmbx.dll、hwxkor.dll、imekr61.ime、 
kbd101a.dll、kbdkor.dll、kbd101b.dll、kbd101c.dll、kbd103.dll 
6>繁体输入(仅仅是 XP 自带的繁体中文输入法,与繁体中文语言文件无关) 
a15.tbl、a234.tbl、acode.tbl、msdayi.tbl、dayiptr.tbl、dayiphr.tbl、phon.tbl、phoncode.tbl、 
phonptr.tbl、lcptr.tbl、lcphrase.tbl、chajei.ime、phon.ime、dayi.ime、romanime.ime、uniime.dll、 
winime.ime、 
unicdime.ime、 
miniime.tpl、 
quick.ime、 
winar30.ime、 
arphr.tbl、 
arptr.tbl、 
array30.tab、 
arrayhw.tab、TINTLGNT.IME、PHHLP.CHM、PHHLP.CNT、PHHLP.HLP、PHHLPEN.CHM、 
PHHLPEN.CNT 、 PHHLPEN.HLP 、 TINTLGC.IMD 、 TINTLGL.IMD 、 TINTLGS.IMD 、 
TINTLGD_.IMD、TINTLPHR.EXE、TINTSETP.EXE、TMIGRATE.DLL、CHTAPT.CHM、 
CHTAPT.HLP、CHTAPTEN.HLP、CHTPADEN.CHM、CHTMBX.DLL、CHTSKDIC.DIC、 
CHTSKDIC.DLL、 CHTSKF.DLL、 HWXCHT.DLL、 PADRS404.DLL、 CINTLGNT.IME 、 
CINTIME.DLL 、 CINTLGB.IMD 、 CINTLGD.IMD 、 CINTLGL.IMD 、 CINTLGS.IMD 、 
CINTLGU.IMD、CINTLGIE.IMD、CINTLGSI.IMD、CINTLGUC.IMD、CINTLGNT.CNT、 
CJHLPEN.CNT、CINTSETP.EXE。 

3.8.3 最少文件实现 DOS 下或 Windows 下安装系统 
nLite 组件精简中关于系统组件的精简里,有一个选项是“手动安装和升级”
,这个功能
用于在 DOS 或 Windows 环境下升级或全新安装 XP。如果删除,将不能从 DOS 或 Windows 
环境下执行 XP 的安装,在某些情况下特别是硬盘安装时没有这个功能的确会很尴尬。然而,
如果不删除这个足足有 40 多 M 大的组件,的确太占用空间了。有没有一个折中的方法呢?
由于当前安装 XP 绝大多数情况下都是全新安装而不是由 Windows 98 或 Windows 2000 
来升级安装,所以升级安装模式可以删除。这样,经过无数前辈高手的努力,终于研究出了
使用最少的文件来实现 DOS 或 Windows 环境下安装 XP。
方法如下:
第一,在“删除框”中添加如下文件: 
OSC.CAB、SETUPACC.TXT、WINNT32.HLP、WINNT32.MSI、WINNT32A.DLL  、 
WINNTBBA.DLL、WSDU.DLL、dwup.inf、conlib.dll、lnkstub.exe、mdmssys.inf、migisol.exe、 
migpwd.exe、oschoice.exe、reminst.inf、rinorprt.sif、ristndrd.sif、setupldr.exe、startrom.com、 
startrom.n12、w95upgnt.dll、welcome.osc、miglibnt.dll 
这样可以删除掉不少用不到的文件了。
第二,在 nLite 执行完自动定制工作后,将如下批处理复制到与 I386 目录同层。 
cd i386 
md COMPDATA­1 
md WINNTUPG­1 
xcopy COMPDATA\DRVMAIN.INF COMPDATA­1 
xcopy COMPDATA\NTCOMPAT.INF COMPDATA­1 
xcopy WINNTUPG\NETMAP.INF WINNTUPG­1 
xcopy WINNTUPG\NETUPGRD.DLL WINNTUPG­1 
rd /q /s WIN9XMIG 
rd /q /s WIN9XUPG

124 

rd /q /s WINNTUPG 
rd /q /s COMPDATA 
rd /q /s DRW 
ren COMPDATA­1 COMPDATA 
ren WINNTUPG­1 WINNTUPG 
exit 
运行这个批处理,您将会发现您的 I386 目录又小了 30M。
至此,我们用最少的文件实现了 DOS 或 Windows 环境下安装 XP。 

3.8.4 nLite 字体修正 
nLite  处理过度系统,在进行虚拟机安装的时候会出现安装界面缺字的现象,造成这个
的原因虽然不太明朗,但是解决这个现象的方法到是有。额外说一句,这个现象只会出现在
虚拟机安装时,实机安装不会出现。
修正办法:
在  i386  下找到文件  intl.inf,查找其中“simsun.ttc,,,65536”(不包含引号),删除这一行
即可。 

3.8.5  处理输入法
系统自带的输入法似乎也跟不上时代了,这些输入法渐渐的被后来开发的各种其他输入
法替代了,不要的输入法怎么删除?
以下是关于系统自带的输入法对应的文件: 
1>微软拼音: 
pmigrate.dll、pintgnt.ime、pintgnt.dic、pingtlcsk.dic、pintlcsa.dll、pintlcsd.dll、pintlcsd.dic、 
pintlcsk.dic、pintlgc.imd、pintlgd.imd、pintlgdx.imd、pintlgi.imd、pintlgie.imd、pintlgix.imd、 
pintlgl.imd、pintlgne.chm、pintlgnt.chm、pintlgnt.ime、pintlgr.imd、pintlgs.imd、pintlphr.exe、 
padrs804.dll、imscinst.exe、pintllime.dll、pintlgab.imd、pintlgai.imd、pintlgb.imd、pintlgnt.cnt、 
pintlgnt.i96、pintlgrb.imd、pintlgri.imd、pintlgs.imd、pintlgsi.imd、pintlgsx.imd、pintlgu.imd、 
pintlguc.imd 
2>全拼 
winpy.ime、winpy.mb、winpy.hlp、winpy.cnt、winsp.ime、winsp.mb、winsp.hlp、winsp.cnt 
3>郑码 
winzm.ime、winzm.mb、winzm.hlp、winzm.cnt 
4>智能 ABC 
Winabc.cwd、Abcsda.dll、Abcwin.exe、Winabc.ime、Winabc.ovl、tmmr.rem、user.rem、 
Winabc.hlp、Winabc.cnt 
如果想删除哪个输入法,就把他们对应的文件添加到“删除框”中,但是做到这些还是
不行的,在 nLite 执行完自动定制后还需要处理 hivedef.inf、hivesys.inf 这两个个文件。

125 

1>hivedef.inf 
HKCU,"Keyboard Layout\Toggle",Hotkey,0x00000002,"2" 
HKCU,"Keyboard Layout\Preload","1",0x00000002,"00000804" 
HKCU,"Keyboard Layout\Preload","2",0x00000002,"E00E0804" 
HKCU,"Keyboard Layout\Preload","3",0x00000002,"E0010804" 
HKCU,"Keyboard Layout\Preload","4",0x00000002,"E0030804" 
HKCU,"Keyboard Layout\Preload","5",0x00000002,"E0040804" 
找到上面的几行,这个是输入法进行切换的时候调出的顺序,分别对应: 
HKCU,"Keyboard Layout\Preload","1",0x00000002,"00000804"(美式键盘) 
HKCU,"Keyboard Layout\Preload","2",0x00000002,"E00E0804"(微软拼音) 
HKCU,"Keyboard Layout\Preload","3",0x00000002,"E0010804"(全拼) 
HKCU,"Keyboard Layout\Preload","4",0x00000002,"E0030804"(郑码) 
HKCU,"Keyboard Layout\Preload","5",0x00000002,"E0040804"(智能 ABC)
删除某些输入法后,一定要调整输入法切换顺序,例如删除了全拼和郑码以后,这几行
应该变成: 
HKCU,"Keyboard Layout\Toggle",Hotkey,0x00000002,"2" 
HKCU,"Keyboard Layout\Preload","1",0x00000002,"00000804" 
HKCU,"Keyboard Layout\Preload","2",0x00000002,"E00E0804" 
HKCU,"Keyboard Layout\Preload","3",0x00000002,"E0040804" 
如果不进行修改,切换输入法将报错。 
2>hivesys.inf 
主要有如下几行和输入法相关:
微软拼音: 
HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard 
File",0x00000000,"kbdus.dll" 
HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard 
Text",0x00000000,"%KLT_91%" 
HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard 
File",0x00000000,"pintlgnt.ime" 
全拼: 
HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard 
File",0x00000000,"kbdus.dll" 
HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard 
Text",0x00000000,"%KLT_73%" 
HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard 
File",0x00000000,"winpy.ime" 
HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard 
File",0x00000000,"kbdus.dll" 
HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard 

Layouts\E00E0804","Layout 
Layouts\E00E0804","Layout 
Layouts\E00E0804","IME 

Layouts\E0010804","Layout 
Layouts\E0010804","Layout 
Layouts\E0010804","IME 
Layouts\E0020804","Layout 
Layouts\E0020804","Layout

126 

Text",0x00000000,"%KLT_74%" 
HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard 
File",0x00000000,"winsp.ime" 
郑码: 
HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard 
File",0x00000000,"kbdus.dll" 
HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard 
Text",0x00000000,"%KLT_75%" 
HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard 
File",0x00000000,"winzm.ime" 
智能 ABC: 
HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard 
File",0x00000000,"kbdus.dll" 
HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard 
Text",0x00000000,"%KLT_76%" 
HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard 
File",0x00000000,"winabc.ime" 

Layouts\E0020804","IME 

Layouts\E0030804","Layout 
Layouts\E0030804","Layout 
Layouts\E0030804","IME 

Layouts\E0040804","Layout 
Layouts\E0040804","Layout 
Layouts\E0040804","IME 

如果删除了相应输入法,就要删除这里的相关键值才行。 

3.8.6 DOS 和 Windows 下安装造成东亚语言包不能自动安装问题不完全解决 
1>保留所有关于内码输入法的文件
这个很简单,只要是 wingb 相关的,不要进行删除就好了。 
2> intl.inf 
修改 intl.inf 中的“wingb.ime = 7,,,,,,,0,0”为“wingb.ime= 1,,,,,,,0,0” 
3>winnt.sif,添加如下内容: 
[RegionalSettings] 
LanguageGroup = 10 
SystemLocale = "0804" 
UserLocale = "0804" 
UserLocale_DefaultUser = "0804" 
InputLocale = "0804:00000804" 
InputLocale_DefaultUser = "0804:00000804" 
4>内码键盘布局 
nLite 精简键盘布局时留下“NeiMa  键盘布局” 

3.8.7  破解 Winlogon.exe 
为什么要破解这个呢?因为破解了这个可以删除以下 4 个文件 
oembios.bin 
oembios.cat 
oembios.dat

127 

oembios.sig 
这 4 个文件大概有 12M 大,而且 Winlogon.exe 只要破解的完美了,不会对系统造成任
何问题。
现在网络上有高人破解好的 Winlogon.exe,下载就可以。
把上述 4 个文件添加到“额外删除”列表,nLite 处理完毕以后用破解的 Winlogon.exe 
替换 i386 目录下原有的即可。
替换完毕后需要在 Hivedef.inf 中[AddReg]段添加以下键值: 
HKLM,"SOFTWARE\Microsoft\Windows 
NT\CurrentVersion\WPAEvents","OOBETimer",0x1,ff,d5,71,d6,8b,6a,8d,6f,d5,33,93,fd 
不添加会造成用一些软件检测时提示需要 30 天激活,其实这个 30 天一直不会变动,始
终是 30 天,添加以上键值以后,激活提示变成“不需要激活”
非免激活版的 Windows 无法以这种办法达到免激活,请勿尝试。 

3.8.8 luna 主题修正 
nLite  精简过的系统会造成找不到  luna  主题的桌面(就是蓝天白云的那个)
,这个似乎
是 nLite 的一个 BUG,不过好在我们可以修正这个问题。
进入 i386 文件夹,找到“luna.th_”
,用 7z 解压开这个文件得到“luna.the”, 
1>、
找到其中: 
Wallpaper=%WinDir%web\wallpaper\Bliss.bmp 
改为: 
Wallpaper=%WinDir%web\wallpaper\Bliss.jpg 
2>、
找到其中: 
Wallpaper.MUI=@themeui.dll,­2036 
删除这一行。
处理完以后,用 makecab 命令把“luna.the”压缩得到“luna.th_” 

3.8.9 USB 插入新硬件驱动安装问题不完全解决
使用  nLite 精简过的系统有时候会出现插入  USB  设备后不自动搜寻驱动,而是弹出一
个驱动安装界面,需要手工单击“下一步”才能搞定。这个虽然无关紧要,但是也挺烦人的。
很多前辈为解决这个问题也是费劲周折。
笔者根据在网络上搜寻的一些资料,在一次把死马当活马医的过程中,替换未经精简的
原版中的 USBSTOR.IN_、USBSTOR.SY_、LAYOUT.INF 到精简后的系统的 I386 目录,并
覆盖了同名文件。结果竟然实现了使用  nLite 精简的系统自动搜寻  USB  即插即用设备驱动
并安装。
算是歪打正着吧,不过能解决问题就好。 

3.8.10  精简掉搜索助手但保留搜索功能的方法 
1>在额外删除列表里添加 5 个搜索助手的文件(其实搜索用手就 12MB 左右,删除这 5 
个文件,就去掉了 11MB) 
msgr3en.dll 
nls302en.lex 
courtney.acs

128 

earl.acs 
rover.acs 
2> 把  I386  目 录 下 的  srchasst.in_  文 件 解 压 后 得 到  srchasst.inf , 分 别 删 除
“msgr3en.dll,,,32”

“nls302en.lex,,,32”、
“courtney.acs,,,32”、
“earl.acs,,,32”、
“rover.acs,,,32”
这几行,或者用封号屏蔽它们。保存后再压缩回去,替换原文件即可。
以上 10 小节(3.7.1~3.7.10),介绍了 nLite 的一些更深层的精简和后期处理工作。
使用 nLite 方面,区别菜鸟和高手的却恰恰不是使用 nLite,而是使用 nLite 后的后期制
作工作。有一些后期处理工作是很多高手“不能说的秘密”,所以以上 10 小节中后期处理方
法也只是目前笔者由网络所收集的以及个人经验所能实现的后期制作。还有更多的高手们的
秘密需要大家一同去挖掘。 

3.9  简单整合包的制作
整合包可以想系统补丁一样直接集成进系统,但是整合包的制作技术却一直不怎么明
朗,笔者我也不怎么精通整合包的制作。
那我们怎么来制作简单的整合包呢?笔者无意间发现一款用来制作整合包的小工具—
—“nLite Add­On Maker”
,这个小工具把要整合的软件和该软件的静默安装参数集成在一个 
CAB 包中来形成一个整合包。这个整合包整合后,将会在安装系统到剩余 13 分钟时,自动
按照软件的静默安装参数把软件安装好。
如果软件不大,例如 WINRAR、FlashPlayer9 等,只要有相应的静默安装参数,就可以
利用这种方法来整合。
例如我们来整合个 WinRAR3.7,新建一个文件夹,命名随意,将 WinRAR3.7 安装文件
放 置 于 该 目 录 下 。 例 如 笔 者 将  WinrRAR_3.70_SC­PRET.exe  放 置 于 
E:\Install_CD\WinPath\WinRAR 目录下。
设定 nLite Add­On Maker 如下,
很简单,不用多做说明。 
WinRAR 的静默安装参数为
“/s”

所以我们在“静默安装命令”处填写“/s”

129 

填写好后单击“打包”就可完成简单整合包的制作。
我们在第一章中已经介绍了系统常用增强软件的静默安装参数,这里再重复一下: 
DirectX 9.0c,/Silent 
Flash Player 9,/S 
MS Java 虚拟机,/Q:A /R:N 
我们可以把这些都按我刚才说的方法做成整合包。做好后使用 nLite 整合进系统就可以
了。
不过严格意义上说,这种基本不算是整合包,或者说是极为简单的整合包,但是无论怎
么简单,能达到目的就可以了,这才是我们最需要的。
更多强大的整合包下载请到:http://bbs.ylmf.com/thread­ylmf­fid­271.html(原啄木鸟工
作室) 

3.10  总结 
nLite 是一款强大的高度自动化的系统定制工具,nLite 虽然主要用于精简系统组件,但
也不要忽略了 nLite 其他的诸多功能。
使用 nLite 做精简工作时一定要胆大心细,不能乱精简,也不能不敢精简,一定要多多
尝试,没有人可以一遍就做出来完美的精简系统。
相比 nLite 本身的操作,nLite 后期操作可谓是重中之重。使用 nLite 完成一个系统的定
制,nLite 本身的操作只占 30%,而后期操作要占 70%,真正决定使用 nLite 能力高低的,
就是后期操作。
善用 nLite 的多项功能,可以提高系统定制水平一个档次,为此后的多种关于系统定制
的操作可以打下坚实的基础。

130 

第四章、使用 DPS 向 XP 集成驱动 
4.1  初识 DPS 

DPS(DriverPacks  Base),是一款用于向安装版系统中集成驱动的专用工具,支持 
2000/XP/2003。相对于上一章 nLite 提供的驱动整合功能,DPS 的功能更加专业。 
DriverPacks 官方网站不仅提供驱动集成工具 DPS 的下载,而且提供十分完善的驱动包
下载,其驱动包可谓是当今最为全面的。 
DriverPacks 官方网站:http://www.driverpacks.net/ 
DriverPacks 提供的驱动包下载:http://www.driverpacks.net/DriverPacks/ 
DriverPacks  的驱动包共包括主板芯片、CPU、显卡、声卡、网卡、无线网卡、大容量
磁盘控制器驱动共 7 类,需要集成哪一类驱动的朋友可以根据 DriverPacks 官方网站上提供
的详细说明来下载并集成。
在下一节中,笔者将以集成大容量磁盘控制器驱动(也就是我们平时所说的串行磁盘控
制器驱动)为例,和大家一起分享使用 DPS 集成驱动的方法与技巧。 

4.2  使用 DPS 集成驱动的流程
在介绍流程前,请大家先去 DriverPacks 官方网站下载 DPS(DriverPacks Base)程序,

131 

以及所需的驱动包。
下载好的 DPS 驱动集成程序是一个 7z 自解压包,解压到任意目录就可以使用了。
下载好的 DriverPacks 驱动包是以 7z 格式打包的,请勿修改其文件名,并且请勿解压此
驱动包。将下载好的驱动包放置于 DPS 程序所在文件夹下的 DriverPacks 文件夹中。
为配合本章的讲解与实践,请至少下载一个 MassStorage(大容量磁盘控制器)驱动包
下面,笔者介绍一下使用 DPS 集成驱动
我们启动 DPS,进入第一节中的那个界面,由于 DPS 默认是使用英文的,这会给我们
的操作带来一些不便,
所以我们可以在“Select your preferred language”
的选项中选择
“Chinese 
(Simplified)”
,并单击“Apply”应用选择以切换到简体中文界面。 

DPS 程序左侧的一栏,罗列着我们将要执行的一系列任务。
单击上图界面中的“>”按钮,进入有关“设置”的各项任务。 
[设置] 
1>位置
位置设置用于设定将要进行驱动整合的系统的位置,共有“磁盘”

“BartPE”、
“多启动
磁盘”三种选项。
“磁盘”
,用于向单启动(也就是只包含一个安装版系统)的光盘中集成驱动,所选的
目录中必须包含 I386 文件夹。
“BartPE”
,DPS 将在其中导入一个驱动插件,我们平时不多用这个选项。
“多启动磁盘”
,用于向多启动(也就是包含多个安装版系统)的光盘中集成驱动,所
选目录必须为多启动光盘的根目录。这个选项其实也不多用,我们大多时候都是先做好单启
动光盘再执行多合一操作。
一般我们只使用“磁盘”选项以向 I386 文件夹内集成所需的驱动。

132 

选定好模式后,单击浏览选中要执行驱动集成的文件夹,选好后“确定”,然后我们再
单击“>”进入下一个设置界面。 
2>驱动包

133 

到这个界面时,DPS 会自动检测 DriverPacks 文件夹下的驱动包,将已经包含的驱动包
提交到这个界面中来。所有已经存在的驱动包将成为可选的,不存在的驱动包将为灰色并不
可选。
DPS 的驱动包共有: 
DriverPack Chipset,主板芯片驱动包 
DriverPack CPU,CPU 驱动包 
DriverPack Graphics A,显卡驱动包 A 
DriverPack Graphics B,显卡驱动包 B 
DriverPack Graphics C,显卡驱动包 C 
DriverPack LAN,网卡驱动包 
DriverPack MassStorage,大容量磁盘控制器驱动包 
DriverPack Sound A,声卡驱动包 A 
DriverPack Sound B,声卡驱动包 B 
DriverPack WLAN,无线网卡驱动包
因为在本例中我以向系统集成大容量磁盘控制器驱动为例,所以我在 DriverPacks 文件
夹中只放置了 MassStorage 的驱动包。大家可以根据需要放置更多的驱动包。
向系统集成大容量磁盘控制器驱动,也就是平时说的向系统集成串行磁盘控制器驱动,
这个是大家都颇为关心的。
说这个之前先要澄清一点问题,大容量控制器驱动不是针对硬盘的驱动,而是针对控制
器的驱动。磁盘控制器与磁盘是完全的两个概念。磁盘控制器工作于什么状态,影响着磁盘
的工作状态。
磁盘控制器如果工作于串行模式,则无论硬盘是串口的还是并口的都工作于串行模式。
磁盘控制器如果工作于并行模式,则无论硬盘是串口的还是并口的都工作于并行模式。
所以安装的磁盘即使是串口的,但不一定工作于串行状态。也就是说,磁盘工作于何种
状态与磁盘控制器有莫大的关系,而与磁盘本身的关系较小。
说到这里,在上一章中使用 nLite 集成驱动时我已经简单的说到了关于大容量磁盘控制
器的文本模式和 PNP 模式。 
DPS 同样提供关于大容量磁盘控制器驱动的这两种模式的集成。
这里再重申一下这两种模式的作用。
第一,大容量控制器驱动的文本模式集成。文本模式所集成的驱动在系统安装程序启动
时加载,用于让系统安装程序能够识别出磁盘,从而能够正常的安装系统。
第二,大容量控制器驱动的  PNP 模式集成。这种方式集成的驱动,与集成到系统的显
卡、声卡等驱动一样,在  Windows  环境下安装后用于更好的管理和控制硬件、提高硬件的
使用性能。
说到这里,大家应该明白这两种模式的区别了。
在 DPS 的驱动集成界面中,处于上面的“DriverPack  MassStorage(+版本号)”选项,
选中后会执行大容量控制器驱动的 PNP 模式集成;处于下面的“DriverPack MassStorage text 
mode”选项,选中后会执行大容量控制器驱动的 PNP 模式集成。建议同时集成这两个。
只集成文本模式而不集成  PNP  模式的大容量控制器驱动,如果硬盘的确是工作在串行
模式下,而且 Windows 没有其相应磁盘控制器驱动,那么很可能会造成可以正常安装系统,
但无法在系统安装后进入系统的情况。
只集成  PNP  模式而不集成文本模式的大容量控制器驱动,如果硬盘的确是工作在串行
模式下,而且 Windows 没有其相应磁盘控制器驱动,那么很可能会造成 Windows 安装程序
在安装时就会找不到硬盘。
所以,建议两种模式同时集成。不过额外要说一点的是,如果您有其他方法集成  PNP

134 

模式的大容量控制器驱动,也可以只用 DPS 集成其文本模式。
选好要集成的驱动后,单击“>”,进入下一个设置界面。 
3>驱动包整合方式 

DPS 提供两种模式的驱动集成。
说这个之前,我还要说一个概念。关于我们在第二章中就已经学到的  Winnt.sif  中的 
OemPnpDriversPath 键。这个键用于记录第三方驱动的位置信息,以让系统去这个键所记录
的位置寻找第三方驱动并安装。
其实 OemPnpDriversPath 键对应的是注册表中如下键的键值: 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath 
(以下简称 DevicePath 键)
系统安装过程中,会在开始搜寻并安装系统驱动前(大约是系统安装剩余 37 分钟前)
将 Winnt.sif 中的 OemPnpDriversPath 键键值导入上述的 DevicePath 键。
归根结底,系统其实是通过注册表的  DevicePath  键来确认驱动所在位置的。这样也就
告诉了我们一个信息,无论使用什么方法,只要能在系统安装剩余 37 分钟前将驱动位置导
入 DevicePath 键就可以实现驱动的自动搜寻与安装。 
Winnt.sif 中的 OemPnpDriversPath 键只
是微软提供的一个官方方法罢了。
明白了这些,我再来说说 DPS 的这两种驱动整合方式。
方式 1,这种方式很类似我们在第二章中用的那个方法,将驱动放置于$OEM$\$1 文件
夹下,这些文件会在系统安装程式第一次复制完文件并未重启前复制到系统盘根目录,并修
改 Winnt.sif 中 OemPnpDriversPath 键的键值与系统盘下的驱动文件目录对应。方式 1,也就
是我们第二章中使用的方法的自动化实现。
这种方式很直观明白,但是缺点就是驱动必须是非压缩方式“敞开”放置,如果驱动集
成的少,用这种方法还可行,如果驱动集成的多,那么这种方法必然会造成光盘空间的巨大

135 

消耗并且会浪费很多复制驱动到系统盘的时间。
方式 2,这种方式稍微复杂一点。首先,DPS 在光盘上建立一个 OEM 文件夹,注意这
个并不是$OEM$文件夹,这个 OEM 文件夹只是 DPS 为其命名的。然后将驱动包和一些相
关程序复制到 OEM  文件夹中。这种方式中  DPS  使用了一个方法,可以在系统部署开始前
(也就是 39 分钟倒计时之前)隐藏调用一个批处理,这个批处理会搜寻系统安装光盘的盘
符,并解压光盘中的驱动包到系统盘根目录下。解压完毕后,再调用一个程序根据系统盘下
驱动目录的情况实时生成并导入 DevicePath 键。
这样,也就变相的实现了驱动包解压到系统盘并导入第三方驱动目录位置到系统注册
表。随后将会开始那个熟悉的由倒数 39 分钟开始计时的系统部署过程。由于这个时候已经
复制完驱动并告知了系统驱动的位置,所以在剩余 37 分钟时寻找系统设备驱动时也会自动
搜寻第三方驱动并安装。
根据上述分析,多数时候建议使用方式 2 来集成驱动。选择完成后,单击“>”进入下
一个设置界面。 
4>完成方式

所谓完成方式,就是进入系统后以什么方式来删除已经无用驱动包以及相关文件,以不
造成残留。 
GUIRunOnce,这个模式大家很熟悉,就是在第一次登录系统但未见到桌面前 DPS 调用
一个小程序,DPsFnshr.exe。这个是 DPS 中自带的,用于删除已用的驱动包。一般情况下,
我们都是使用 GUIRunOnce 这个模式来删除 DPS 的驱动包。 
RunOnceEx,这种模式不推荐新手使用,某些时候会造成冲突而报错。
自定义,不使用 DPS  提供的模式,而是采用手工的模式来删除。如果您想通过使用批
处理、AU3 脚本或者 XPLOAD 来实现删除的话,可以选择这种模式。只要选中这种模式,
就相当于 DPS 不再参与驱动包的删除工作,这些工作由用户来完成。

136 

选择好“完成方式”后,单击“>”进入下一个设置界面。 
[选项设置] 
1>KTD 选项

所谓  KTD,就是允许在系统安装完成后保留所集成的驱动,这样在以后更换硬件时如
果驱动包中包含这些新硬件的驱动系统则会自动寻找并安装。
禁用 KTD,则会在系统安装结束后删除所集成的驱动包。
启用 KTD 有 4 种模式:
第一、对已经整合的驱动启用  KTD,这种模式很好理解,就是针对所有已整合的驱动
包启用 KTD。
第二,可以对用户所选的驱动包启用  KTD,例如我们集成了显卡、声卡、网卡、大容
量磁盘控制器驱动,而我们可能会更换显卡、声卡、网卡,但不一定会更换大容量磁盘控制
器。所以我们可以只针对显卡、声卡、网卡启用 KTD。
第三,可以对输入路径中规定的驱动包启用  KTD,例如我不想对  DPS  的驱动包执行 
KTD,而想对我以其他方式复制到系统盘的驱动包启用 KTD,就可以使用这个选项来设置。
第四,针对用户输入的驱动模式启用  KTD。这个是比较高级的功能,对驱动有一定程
度研究的高级用户建议使用。普通用户请和笔者一样,不要使用这个功能。
选择好要执行的模式后,单击“>”进入“KTD 设置”界面。 
2> KTD 设置
要注意的是,KTD 选项中的五种模式的选择会影响关于 KTD 设置的选项。不同的选择
会在下一步有不同的配置选项。
如果选择禁用,那么在“KTD 设置”中是无需设置的。如下图

137 

如果选择针对所有已集成驱动包启用 KTD,那么在“KTD 设置”中也是无需设置的。
如下图

138 

如果选择针对所选驱动包启用 KTD,那么在“KTD 设置”中会出现和“驱动包”那一
步设置类似的界面,选择您要启用 KTD 的驱动包就可以了。由于笔者只集成大容量控制器
驱动,所以这里只出现了 MassStroage 这个驱动包的选项。如下图:

如果选择针对用户输入的路径执行 KTD,那么“KTD 设置”中会出现设置驱动路径的
界面,请根据界面中的提示输入正确的驱动包路径。如下图:

139 

如果选择针对用户输入的驱动模式启用 KTD,那么在“KTD 设置”中会出现设置驱动
模式的界面,请根据提示谨慎设置,如下图:

140 

完成“KTD 设置”后,单击“>”进入“快速整合缓存”界面。 
3>快速整合缓存

简单的说,例如我第一次针对系统整合显卡驱动时,DPS  会解压缩显卡驱动包并集成
显卡驱动。如果第二次我再集成显卡驱动,那么  DPS  还会解压缩显卡驱动包再去集成显卡
驱动。一次两次无所谓,如果是多次进行驱动集成测试时,这势必是一个对测试时间的浪费
与对计算机资源的消耗。
快速整合缓存,就是为了节省这个时间而设立的。
回到刚才的例子,如果我开启了快速整合缓存,当  DPS  第一次解压显卡驱动并集成时
会设立一个缓存,这个缓存中包含着已经解压的显卡驱动,下一次我再集成显卡驱动时便不
需要再次解压显卡驱动而是直接从这个缓存中提取已经解压好的显卡驱动并集成。
这个缓存一定程度上节约了时间。
不过如果您的计算机配置足够高,解压速度足够快,有没有这个缓存也无所谓的。
选择好是禁用或者启用整合缓存后进入下一界面,这也是 DPS 设置的最后一个界面了,
“其他”
。 
4>其他

141 

其他选项,当前只是为了 DriverPack 的显卡驱动包 A 中的 ATI 显卡的。笔者由于未集
成显卡驱动包 A,所以这里的选项是灰色的,如果集成,上图中的这个位置将是可选的。 
ATI  显卡拥有“催化剂控制中心”和“催化剂控制面板”两种控制器。“ATI  催化剂控
制中心”的性能十分强大,可调节选项十分多,不过需要系统中有.Net 构架 2.0 或以上版本
的支持。
“ATI 催化剂控制面板”功能比较简单,但是并不需要.Net 构架的支持。
如果您的系统中集成有.Net  构架则推荐使用“ATI  催化剂控制中心”,否则则推荐使用
“ATI 催化剂控制面板”

这一歩设置结束后,DPS 的设定就基本完成了,单击“>”我们可以看到一个关于我们
刚才设置的总览。

142 

如果这些设定都符合您的要求,那么就可以单击整合按钮开始整合了,您还可以导出这
次的配置并保存,以备以后使用相同或相似的配置。
单击“整合”按钮,整合过程开始。请勿打断整合过程,以免出现错误。根据所集成驱
动数量和类别的多少,需要几十秒或几分钟不等。静静等待  DPS  驱动集成完毕后,一个集
成了所需驱动的系统就完成了。 
DPS 的整个操作都是很简单的,但是 DPS 本身是个技术含量绝不亚于 nLite 的软件。大
家在使用 DPS 时一定要多琢磨,多尝试。 

4.3  总结
本章以集成大容量控制器驱动为例,介绍了如何使用 DPS  向系统中集成驱动,并详细
的介绍了各个选项的含义与使用方法。
本章所使用的方法,切勿模仿,请深入阅读并理解了之后再进行操作。 
DPS  是一款强大的工具,虽然界面和操作都比较简单,但是技术含量深厚。DPS  官方
网站提供详尽的驱动包下载,请大家自行选择并下载合适的驱动包以使用。集成驱动前请详
细阅读有关驱动包所包含驱动的说明信息,不要集成过多不常用的驱动。
本章略短,但是也请大家仔细琢磨。本章的很多细节都是经过  N  多次实践后得来的,
分享与大家尽量让大家少走弯路。

143 

第五章、XP 个性化定制
通过前几章的学习,我们已经可以按我们自己的思路定制一张 XP 系统光盘了,各类常
用的定制技术与技巧已经在前几章做了详细的说明。
不过这是一个张扬个性的年代,我们总不至于费心费力的做了一张 XP 系统光盘,连自
己的名字都不写上吧?其实我们可以做到的个性化定制有很多很多,我们不仅要把我们的名
字写上,还要让我们亲手定制的系统成为天下独一份!
个性化定制,就是我们这一章中要学习的。
在讲述这一章前,我要再介绍两个命令行工具给大家,Makecab.exe 和 ModifyPE.exe。 
Makecab 是 XP 自带的一个用于压缩的命令行工具,
可以将 xxx.xxx 文件压缩成 xxx.xx_,
压缩率挺高。XP 安装光盘中 I386 目录下的大部分文件都是以这种方式压缩的。 
Makecab 的使用方法很简单,例如我们有一个文件,Skyfree.exe,我们将其放置在 D 盘
根目录下,以命令提示符方式进入 D 盘下,输入命令“makecab Skyfree.exe”回车即可,很
短的时间后,D 盘下会生成一个 Skyfree.ex_压缩文件。 
ModifyPE.exe  现在网络上很多地方提供下载,用于更改文件的校验,某些文件被我们
更改后不能通过 XP 校验时,可以通过 ModifyPE 来实现更改校验。下载后为方便使用我们
直接将 ModifyPE.exe 直接放置于 System32 文件夹下,这样我们就可以像使用 XP 自带的命
令行工具一样使用 ModifyPE.exe 了。 
ModifyPE.exe  的使用方法也很简单,例如我们有一个文件,Miranda.exe,我们将其放
置在 D 盘根目录下,以命令提示符方式进入 D 盘下,输入命令“ModifyPE Miranda.exe ­c”。
几秒之后,校验更改完毕。
在此后的各小节中,如果提到 Makecab 压缩和 ModifyPE 去除校验,便是使用的上述命
令模式进行操作,不再分别累述。 

5.1  文件复制控制——Txtsetup.sif 与 Dosnet.inf 的简单使用
其实关于 txtsetup.sif 和 dosnet.inf 中有很多深奥的东西,不过我们没必要熟悉它们其中
的每一个字符,我们只用最好用和最简单的。掌握这些最好用和最简单的已经可以让我们关
于安装版系统光盘的制作技术上一个台阶了。 
Txtsetup.sif 是控制安装过程中要从哪个位置读取哪个文件复制到何许位置,简单的说,
就是文件复制控制。 
Dosnet.inf 则是控制在 DOS 或 Windows 环境下安装系统时预先复制到硬盘上的文件。
基本而言,txtsetup.sif 和 dosnet.inf 中的文件应该是一一对应,不过如果不需要 DOS 或 
Windows 环境下安装系统,则无需修改 dosnet.inf 只修改 txtsetup.sif 就可以了。 

5.1.1 Txtsetup 
首先要看的是[SourceDisksNames.x86]段 
[SourceDisksNames.x86] 
1 = %cdname%,%cdtagfilei%,,\i386 
2 = "%cd2name%","%cd2tagfilei%",,\cmpnents\tabletpc\i386

144 

3 = "%cd2name%","%cd2tagfilei%",,\cmpnents\mediactr\i386 
4 = "%cd2name%","%cd2tagfilei%",,\cmpnents\netfx\i386 
……
这里规定了复制文件时的源位置,例如 1 代表光盘根目录下的 i386 文件夹。
其次我们要注意的是“[WinntDirectories]”段 
[WinntDirectories] 
1    = "\" 
2    = system32 
3    = system32\config 
4    = system32\drivers 
5    = system 
7    = system32\ras 
9    = system32\spool 
10 = system32\spool\drivers 
……
这里规定了复制文件时的目标位置,默认根目录是  Windows  文件夹,1  代表  Windows 
文件夹根目录,2 代表 Windows\System32 文件夹。
最后要看的是[SourceDisksFiles]段,这一段控制我们从源位置读取什么文件复制到什么
位置。
例如我们想集成  OEM  信息和图片,这就需要把  oeminfo.ini  和  oemlogo.bmp  复制到 
Windows\System32 文件夹下,我们可以在[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  代表  Windows\System32  文件夹,那么系统在复制文件时就会把这个文件复制到 
Windows\System32 文件夹下。
随后的两个“0”也是参数,不过意义不必了解,但是一定要写。 
0 后其实还可以跟一个参数,就是用来重命名文件的,例如: 
Sky.jpg = 1,,,,,,,1981,0,0,Skyfree.jpg 
1 代表源文件所在地为 I386 文件夹,1981 代表目标为 Windows\Web\Wallpaper。那么这
行的总体含义就代表从 i386 文件夹中复制 Sky.jpg 文件到 Windows\Web\Wallpaper 下,并改
名为 Skyfree.jpg。
这 样我 们就 可以 随心 的控制 文件 的复 制和 改名了, 但是 如果 我们 想复 制到一 个 
[SourceDisksFiles]段下没有的位置怎么办?例如想把 Sky.jpg 复制到 Windows\Skyfree 目录并
改名为 Skyfree.jpg 怎么办?
首先,在[SourceDisksFiles]段下添加: 
5000 = Skyfree 
5000 这个数是可以随意指定的,但是要注意不要和系统原来规定好的相冲突。
然后,在[WinntDirectories]段下添加:

145 

Sky.jpg = 1,,,,,,,5000,0,0,Skyfree.jpg 
这样即可。
文件名是支持压缩后自动解压复制的,例如上例中的 Sky.jpg,如果用 Makecab 压缩成 
Sky.jp_再复制到 i386 文件夹下,系统会先自行解压 Sky.jp_为 Sky.jpg 然后再进行复制的。 

5.1.2 Dosnet 
Dosnet 中相应要修改的东西就简单的多。
先看[Directories]段,这段代表文件复制的源位置 
[Directories] 
d1 = \I386 
d2 = \cmpnents\tabletpc\I386 
……
再看[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 
这样即可。
好了,关于  txtsetup.sif  和  dosnet.inf  的简单使用方法就说这么多,虽然  txtsetup.sif  和 
dosnet.inf  是复杂的,但是其中我们常用的部分是很简单的。掌握以上的运用,已经可以让
我们随心所欲的去控制文件复制了。 

5.2 XP 安装过程背景个性化 
XP 安装过程的背景图片,即使安装速度再快这个界面也得至少显示 15 分钟,这是个张
扬我们个性的好地方。在做这个个性化定制前我们要准备两样东西。
一个是我们将要替换成背景图片的位图,系统对这个位图的要求不是太严格,只要是位
图(*.bmp)文件就可以,不过笔者建议使用 1024x768 或 800x600 的位图文件,不要过大或
过小。我们可以使用 Photoshop(此后简称 PS)在图片中加上字并修改图片的大小和格式。
关于 PS 的使用方法请大家参阅 PS 的相关教程,再次不做累述。
另一个,便是修改所需要的 ResHacker 软件了。ResHacker,用于修改“.dll”
、“.exe”、
“.ocx”等文件内的资源文件,使用简单,性能强大。ResHacker 的整体预览如下图:

146 

好了,介绍完 ResHacker,我们该入正题了。 
XP 安装过程的背景图片包含在 WINNTBBU.DLL 这个 Dll 文件中。在 ResHacker 中单
击工具栏的“文件”à“打开”或者直接使用“Ctrl+O”组合键浏览并打开 WINNTBBU.DLL。

打开 WINNTBBU.DLL 后,如上图,将显示 WINNTBBU.DLL 中的各个资源文件,包
括“位图”

“图标”

“字符串”

“图标组”、
“版本信息”等资源文件,根据所打开的文件不
同,资源文件的数量和类别也不尽相同。
既然我们要修改背景图片,那么基本可以确定我们要修改“位图”资源。展开位图资源,
看到如下展开项目:

147 

从 100 到 192 这些都是位图资源。
展开每一个位图资源,我们可以看到其中包含两个资源,1033 和 2052,1033 资源是针
对英文系统的,所以可以删除。展开每一个位图资源,将所有的 1033 资源删除掉(右键单
击资源,再单击“删除资源”

,这样可以节省一定的空间。
在刚才我们删除英文资源的过程中,大家可能已经注意到了,103 和 153 这两个资源中
的 2052 资源就是我们要找的 XP 安装背景图片。

右键单击 103 的 2052 资源,然后单击“替换资源”
,出现如下图界面:

148 

单击“打开新位图文件”
,在弹出的对话框中选择打开我们预先准备好的  BMP  格式的
图片就,然后单击上图中的“替换”
,资源就替换完成了。 
153 的 2052 资源也使用同上述相同的方法替换。
注意,某些时候可能会出现 PS 所修改的位图不能被 ResHacker 识别和替换,请将这种
图使用 XP 自带的绘图工具或者 ACDSee 重新保存成 BMP 格式即可解决。
我们替换完 103 和 153 中的 2052 资源后,关于背景图片的修改就基本完成了,不过笔
者建议删除资源 100、101、102、150、151、152 这 6 个资源,此 6 个资源为安装时位于左
上角的那个“WindowsXP”徽标,并不好看。
当我们完成这些后,将 WINNTBBU.DLL 复制回 I386 并覆盖其中的同名文件就可以了。 
XP 安装过程背景个性化这样就完成了,此后在 XP 安装过程中,背景图片就是我们自
定义的了。是不是很拉风啊? 

5.3  滚动条的个性化 
XP 启动时有一个滚动条,我们可以针对这个滚动条画面进行个性化修改。修改这个画
面之前有几点笔者必须说明。
第一,滚动条画面对背景图片的要求比较严格,要求分辨率 640x480,16 色。所以这个
图不能过于花俏,否则将可能出现花屏,严重的可能会无法进入系统。
第二,由于修改这个背景图片需要修改  ntkrnlmp.exe、ntkrnlpa.exe、ntkrpamp.exe、

149 

ntoskrnl.exe  这四个文件,所以当有某些系统补丁要进行关于这  4  个文件的更新或替换时,
将会造成所做的个性化处理失效。
了解以上两点后,可以进行关于滚动条的个性化了。笔者个人建议不要修改这个界面,
尽管这个比安装界面的修改还要出风头。
由 I386 文件夹中提取 SP2.CAB(本文以 Windows XP SP2 为例,如果今后出现 XP SP3,
这个位置有可能会是 SP3.CAB)
,解压得到 SP2 文件夹,在 SP2 文件夹中搜寻 ntkrnlmp.exe、 
ntkrnlpa.exe、ntkrpamp.exe、ntoskrnl.exe 这四个文件。
这四个文件中的资源文件是一致的,但是这四个文件本身的用途是不同的,所以不要企
图修改一个文件再复制改名为其他文件以节省操作。
由于针对这四个文件的操作是一致的,所以我以修改 ntoskrnl.exe 为例:

通过对 1~15 这些位图资源的查看,我们发现了 XP 滚动条画面的一些秘密。XP 的滚
动条画面,其实是一张纯黑的背景图片(资源  1  就是这个背景)加一张背景同样为黑色的 
WindowsXP 徽标图片(资源 5 就是这个图片)组成的。背景为黑色的徽标图片放置于纯黑
的背景之上,浑然一体。
这样就给我们提供了两种修改方案。
第一,我们可以删除资源 5,然后把资源 1 中的黑色的背景替换成我们想要的位图。
第二,如果我们同样需要黑色的背景,我们也可以亲手制作一张背景为黑色的徽标图放
置替换资源 5。
不过无论您以哪种方法,请务必将图片设置为 16 色。位图资源替换方法在上一节中已
经讲述,这里不再累述。
修改完 ntoskrnl.exe 后遵循同样的方法修改 ntkrnlmp.exe、ntkrnlpa.exe、ntkrpamp.exe。
当我们把这些文件修改完后,复制修改完成的 ntkrnlmp.exe、 
ntkrnlpa.exe、 
ntkrpamp.exe、 
ntoskrnl.exe 四个文件回到 SP2 文件夹,覆盖以前的。这时,我们就需要将这个 SP2 文件夹
再次打包成 SP2.CAB 了,我们需要软件 WinCAB 的帮忙。 
WinCAB 是一款打包“.cab”文件专用的软件,图形化,使用方便。其实 WinCAB 只是
一个外壳和自动化实现程序,归根结底它是调用我们所熟悉的  Makecab  来实现的。不过 
Windows 下面图形化的工具比命令行的方便多了,我们为什么不使用呢?
单击工具栏的“添加”à“目录”
,或者使用“Ctrl+D”快捷键,选择我们刚才解压并
修改过其中文件的 SP2 文件夹。

150 

单击“压缩保存”按钮(左数第三个按钮)
,选择要保存的位置,SP2  文件夹将会重新
打包成 SP2.CAB。

片刻后,压缩完成,SP2 文件夹重新被封成了 SP2.CAB。将这个 SP2.CAB 复制会 I386 
文件夹,覆盖原有的 SP2.CAB。
不过做到这里,我们的工作还没有彻底完成。我们还需要将刚才修改的四个文件中的 
ntkrnlmp.exe 和  ntoskrnl.exe 两个文件使用 makecab 命令打包成 ntkrnlmp.ex_和 ntoskrnl.ex_ 
然后复制回 I386 文件夹,覆盖原有文件。
这样我们总共修改了 4 个文件,覆盖了原安装文件 6 处,终于完成了针对滚动条画面的
个性化处理。 

5.4  系统属性个性化
“系统属性”的“常规”选项卡,也就是我们常常右键单击“我的电脑”再单击“属性”
然后弹出的那个界面。这个界面是用户经常会调出查看的,因为这个界面中包含了基本的

151 

CPU 和内存信息等。大家先来看一下如下“系统属性”界面:

上图是笔者用于自由天空  GhostXP  v1.4 版的一个系统属性界面,朋友们看后是否也想
做类似的修改呢?下面笔者将讲述修改系统属性界面的方法。
修改系统属性界面要分两部分来修改。
第一部分,包括如上图中“自由天空 技术论坛”黑色 Logo,以及单击“技术支持”按
钮后弹出的一个信息界面。
第二部分,包括如上图中“自由天空  GhostXP  v1.4”、
“系统开发”等“系统属性”面
板中的字符串,以及上面那张黯天使的图片。 

5.4.1 OemLogo.bmp 与 OemInfo.ini 
OemLogo.bmp 与 OemInfo.ini,其实就是上述提到的那张系统属性面板中的“自由天空
技术论坛”黑色 Logo 和单击“技术支持”后弹出的信息面板。 
OemLogo.bmp,系统对这张图片的要求并不严格,只要大小合适,是 BMP 格式就可以。 
OemInfo.ini 其实是一份配置文件,我们可以新建一个记事本然后改名为“OemInfo.ini”

随后修改其中的值为: 
[General] 
Manufacturer= 
Model= 
[Support Information] 
Line1= 
Line2= 
Line3=

152 

Line4= 
…… 
LineN= 
其中[General]段中的 Manufacturer 键和 Model 键的键值会显示于系统属性面板 CPU 与
内存信息之上,而[Support Information]段中的“Line1=”

“Line2=”等等会一行行的显示于
单击“技术支持”后的信息面板。
完成我们所需的 OemLogo.bmp 与 OemInfo.ini 后,我们要将这两个自动复制到系统盘下 
Windows  文件夹下的  System32  文件夹下。那我们怎么才能实现在安装过程中的自动复制
呢?这就要用到我们在本章第一节中所学到的关于 Txtsetup.sif 与 Dosnet.inf 的使用了。
在 Txtsetup.sif 的[SourceDisksFiles]段下添加: 
oeminfo.ini = 1,,,,,,,2,0,0 
oemlogo.bmp = 1,,,,,,,2,0,0 
在 Dosnet.inf 的[Files]段添加 
d1, oeminfo.ini 
d1, oemlogo.bmp 
随后我们将  OemLogo.bmp  和  OemInfo.ini  使用  makecab  压缩成  OemLogo.bm_和 
OemInfo.in_,复制到 I386 文件夹下。
这样,在 XP 自动安装过程中,会自动将 OemLogo.bmp 和 OemInfo.ini 复制到 System32 
文件夹下。 

5.4.2 sysdm.cpl 
sysdm.cpl 是一个系统控制面板文件,包含“系统属性”中所有面板。
由 I386 文件夹中提取 sysdm.cp_,然后使用 7z 解压缩为 sysdm.cpl,使用 ResHacker 打
开 sysdm.cpl:

首先,我们修改位图资源中的 1 和 2。

153 

这两个资源就是我在本节开始处提到的那个“黯天使”图所在位置的位图资源,替换资
源 1 中和 2 资源中的 2052 位图资源为我们所要的。替换方法上几节中已经提及过,不再累
述。注意这个图必须是 BMP 格式且不要太大了,如果出现图像模糊或者图像中有“斑点”

请使用 ACDSee 将要替换的图的颜色调节为“真彩色”。
然后,我们要修改对话框资源中的 101 资源,这个资源就是我们要修改的系统属性面板
中的各个控件。
打开 101 资源下的 2052 资源,我们将看到如下两界面。

154 

第一个界面为系统属性面板控件的一些相关代码,第二个界面为系统属性面板的一些控
件。我们可以在代码界面中修改“系统”

“注册到”等这些空间的文本信息为我们所需的,
例如:

155 

大家可以根据自己的需要来修改,记得修改完之后要单击“编译脚本”这个按钮,所做
修改才能生效。
第二个界面中的这些控件就更具有可自定义性了,大家可以通过拖动的方法修改某个控
件的大小、位置,可以右键单击第二个界面以删除或添加某些控件。如下图:

上图的修改只是很基本的,只针对已有的控件做了大小、位置等的调整,其实大家完全
可以自定义这个界面,包括这整个界面的大小、形状、控件的多少、控件的位置、控件的种
类,一切这些都可以自定义,我已经把方法带到了,具体怎么发挥,要靠大家了。
控制面板中控件的修改也要在修改后单击“编译脚本”按钮以生效。
所有修改完成后,单击工具栏“文件”à“保存”,将修改过的 sysdm.cpl 保存,再使用 
makecab 将 sysdm.cpl 压缩为 sysdm.cp_,最后将其复制回 I386 文件夹覆盖同名文件,所有
的修改工作就完成了。
关于这一节,大家切勿只仿照笔者的操作,自定义性就是发挥大家的想象力,笔者只举
个最简单的例子,将方法带给大家。
想象力有多高,自定义性就能发挥多强。大家一定要根据方法发挥自己的想象力! 

5.5  开始菜单与 IE 浏览器中的 OEM 信息加载 
5.5.1  开始菜单的 OEM 信息
大家可能见过某些系统中开始菜单上有一个关于 OEM 厂商的信息链接,例如联想计算
机中的操作系统,开始菜单处总有一个关于联想的 OEM 图标和链接。单击这个按钮会链接
到联想的官方网站或者打开“系统属性”面板。这个是怎么做到的呢?

156 

做到这个其实很简单,需要一个 ICO 图标文件和更改几处注册表。 
ICO  图标文件请大家自己准备,可以由网络上寻找各种我们所需的  ICO  图标,或者使
用 Photoshop 等工具修改出我们个性化的 ICO 图标。
要修改的注册表键值如下: 
[HKEY_CLASSES_ROOT\CLSID\{2559a1f6­21d7­11d4­bdaf­00c04f60b9f0}] 
@="自由天空技术论坛" 
"InfoTip"="自由天空技术论坛" 
[HKEY_CLASSES_ROOT\CLSID\{2559a1f6­21d7­11d4­bdaf­00c04f60b9f0}\DefaultIcon] 
@="OemLinkIcon.ico" 
[HKEY_CLASSES_ROOT\CLSID\{2559a1f6­21d7­11d4­bdaf­00c04f60b9f0}\Instance\Init 
PropertyBag] 
"Command"="自由天空技术论坛" 
"Param1"="sysdm.cpl" 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\St 
artMenu\StartPanel\ShowOEMLink] 
"NoOEMLinkInstalled"=dword:00000000 
上述所有关于“自由天空技术论坛”的信息可以修改为大家自己所需的。 
OemLinkIcon.ico,将我们准备好的  ICO  图标修改为这个名字,或者将上述注册表中的
这个 ICO 名字修改为和我们准备好的 ICO 图标同名,且必须将这个图标放置于 System32 文
件夹下。放置方法和我们放置 OemLogo 和 OemInfo 的方法一样。
在 Txtsetup.sif 的[SourceDisksFiles]段下添加: 
OemLinkIcon.ico = 1,,,,,,,2,0,0 
在 Dosnet.inf 的[Files]段添加 
d1, OemLinkIcon.ico 
再将 OemLinkIcon.ico 压缩为 OemLinkIcon.ic_或者直接不压缩放置于 I386 文件夹下。 
Param1 , 是 单 击 这 个  OEM  信 息 按 钮 后 执 行 的 可 执 行 程 序 , 例 如 笔 者 这 里 使 
"Param1"="sysdm.cpl",则在单击这个 OEM 信息按钮时打开“系统属性控制面板”,这里亦
可 以 为  exe  类 的 可 执 行 程 序 。 当 然 还 可 以 在 这 里 添 加 网 址 链 接 , 如 "Param1"= 
Http://Www.FreeSkyCD.Com.Cn/,单击这个 OEM 信息按钮后自动打开 IE 浏览器并链接到自
由天空技术论坛。
大家可以将定制好的注册表键值在首行添加 Windows  Registry  Editor  Version  5.00 后保
存为一个例如名为 StartMenuOEM.reg 的注册表文件,通过 GUIRunOnce 或其他系统接口调
用“regedit /s [路径] StartMenuOEM.reg”导入。
对这一小节做个总结。第一,我们要准备一个 ICO 文件,通过 Txtsetup 和 Dosnet 将其
复制到 System32 文件夹下;第二,我们修改一份注册表文件,通过系统调用接口将其导入
系统注册表。这两步,才可以实现我们对开始菜单 OEM 信息的导入。 

5.5.2 IE 浏览器的 OEM 信息
同开始菜单的 OEM 信息一样,我们也需要导入一个注册表和复制一个 ICO 文件。
要修改导入的注册表文件如下: 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet 
Explorer\Extensions\{6096E38F­5AC1­4391­8EC4­75DFA92FB32F}] 
"CLSID"="{1FBA04EE­3024­11D2­8F1F­0000F87ABD16}"

157 

"Default Visible"="Yes" 
"ButtonText"="自由天空技术论坛" 
"Exec"= "Http://Www.FreeSkyCD.Com.Cn/" 
"HotIcon"="%windir%\\system32\\ oemlinkicon.ico " 
"Icon"="%windir%\\system32\\oemlinkicon.ico" 
ButtonText,这个是将鼠标放置于 IE 浏览器上的 OEM 信息按钮后将显示的一段信息提
示。 
Exec,这个键的键值也可以设置为 Exe、Cpl 等 Windows 环境下可执行的程序,同样,
大家也可以像笔者这样设置为网站的链接。 
HotIcon 和 Icon,这两个键一般设置为相同的,键值为 ICO 图标的路径。
同 5.5.1 节中相同,我们通过修改 txtsetup.sif 和 dosnet.inf 将 oemlinkicon.ico 控制复制到 
system32 文件夹下,然后保存如上注册表为注册表文件通过 Windows 外部调用接口导入系
统注册表。IE 浏览器中的 OEM 信息按钮就这样实现了。 

5.6  其他个性化 
1>系统主题 
Windows XP 提供了系统主题,可以根据用户的喜好选择不同样式的系统主题。
系统主题文件存放在 C:\Windows\Resources\Themes(假设 C 盘为系统盘)
,我们可以把
自己喜欢的主题压缩成一个压缩包,然后在系统安装过程中找一个适当的时机解压这个压缩
包到 Themes 目录。关于这个“适当的时机”
,本文下一章将讲述更多的关于 XP 安装过程的
控制,当阅读完下一章时,大家就会明白 XP 安装过程中其实有很多的“时机”可以供我们
使用。
集成系统主题还有一个好方法,我们在第三章学习 nLite 时就已经知道,nLite 具备直接
集成系统主题的功能,大家也可以直接使用 nLite 来执行系统主题的集成工作。 
2>桌面壁纸
桌面壁纸虽然只是几张图,但也是我们系统美化工作的重要组成部分。
桌面壁纸存放在 C:\Windows\Web\Wallpaper(假设 C 盘为系统盘)
,我们可以将自己选
好的桌面壁纸打包,然后在系统安装过程中找一个适当的时机解压这个压缩包到  Wallpaper 
目录。
3>登陆界面
当我们用不同用户登陆时,XP 提供一个“欢迎使用”登陆界面,这个登陆界面简洁大
方,不过现在网络中提供很多修改版的登陆界面,大家可以下载并替换。
我们从网络中可以下载到各种登陆界面,
将登陆界面改名为 logonui.exe 并使用 Makecab 
压缩为  logonui.ex_,然后将  logonui.ex_复制到  I386  中覆盖同名文件即可。如果遇到某些 
logonui.exe 通不过 Windows 的校验,那么最好在 Makecab 压缩前使用 ModifyPE 去除校验。
如果需要各类美化文件,笔者推荐到http://www.letget.com/下载。 

5.7  总结
本章注重介绍方法,并不注重详细介绍实现的步骤,请大家仔细体会本章中的方法再入
手修改。

158 

所谓个性化,就是依照每个人的意愿去修改。如果笔者过于强调个性化修改的步骤,将
会禁锢大家关于个性化修改的思想,所以笔者一再强调方法,而对步骤只是点到为止。请大
家根据自己的想法,再参阅笔者提供的方法,作出真正属于自己的个性化。
说到这里,笔者要说一点,个性化虽然能让我们所定制的系统具有更鲜明的个性,但是,
笔者并不赞成对于个性化的过分追求与研究。毕竟有研究个性化的时间,不如花更多的时间
研究如何将系统定制的更好。
个性化修改只是装饰品,系统定制水平则是内在的基石,没有基石再好的装饰品也是徒
劳,请大家明白这一点。

159 

第六章、XP 安装过程的控制 
6.1 XP 安装过程中可用的外部程序调用接口
通过前几章的学习,特别是在第二章中,我们大量使用  GUIRunOnce  这个程序调用接
口,帮助我们解决了很多问题。大家可能会问,还有别的接口吗?微软官方在 XP 安装过程
中提供的接口不只有 GUIRunOnce 这一个,下面我会一一介绍给大家。
在 XP 安装过程中,会从剩余 39 分钟开始倒计时,一直到剩余 0 分钟。下面我将剩余 
39 分钟时表述为 T39,剩余 37 分钟时表述为 T37,依次类推,以方便表述。 
1>T39~T37,DetachedProgram 接口
要使用这个接口,需要在  Winnt.sif  中的[GuiUnattended]段下添加  DetachedProgram= 
"xxx.exe",例如: 
[GuiUnattended] 
DetachedProgram="%windir%\Temp\Skyfree.exe" 
如果按上例书写,在 T39 到 T37 之间,系统安装程式会调用%windir%\Temp\Skyfree.exe 
并运行。
有一点特别要注意,这个接口调用外部程序运行是“不等待的”,也就是说,无论你所
调用的程序有没有运行结束,系统安装程式是会不停止的继续执行系统安装工作。这也就意
味着如果使用这个接口,就强烈不建议运行那些执行时间长或具有等待用户操作性质的程
序。
也就是说,DetachedProgram 接口所调用的程序,最好是一些执行速度快,不具有等待
用户操作性质的可执行程序。例如复制文件、解压缩不大的压缩文件等等。 
2>T13,CMDLine 接口
这个接口经常被我们利用,但是要使用这个接口,按照官方的方法,需要使用$OEM$ 
文件夹并编写一个  CMDLine.txt  再填写入要执行的程序。这个方法牵扯到了使用$OEM$,
实在是影响雅兴。
那我们要怎么做呢?
大家是否还记得我在本文 3.9 节讲过简单整合包的制作?通过 3.9 节所做的整合包其实
都是软件自动安装包,在  T13  自动调用启动时调用软件安装程序并加载静默安装参数,从
而实现了 T13 时可执行软件的静默安装。
记得这个就好,我们可以用 AU3 写一个调用外部程序的小程序,做成整合包,使用 nLite 
集成到系统中。那么系统将会在  T13  时执行这个调用外部程序的小程序,通过设置这个小
程序来调用不同的外部程序,这样我们也就相当于实现了不用$OEM$和  CMDLine.txt  来使
用 CMDLine 接口。
依次调用外部程序的小程序 AU3 代码如下: 
Dim $IniPath,$ExePath[6],$Hide[6],$Delete[6],$i 
$IniPath=@WindowsDir & "\Temp\CMDLine.ini" 
For $i=1 To 5 
$ExePath[$i]=IniRead($IniPath,$i,"ExePath","")

160 

$Hide[$i]=IniRead($IniPath,$i,"Hide","") 
$Delete[$i]=IniRead($IniPath,$i,"Delete","") 
Next 
For $i=1 To 5 
If $ExePath[$i]<>"" Then 
MsgBox(0,"",$ExePath[$i]) 
$ExePath[$i]=StringReplace($ExePath[$i],"%WinDir%",@WindowsDir) 
$ExePath[$i]=StringReplace($ExePath[$i],"%SystemDrive%",@HomeDrive) 
MsgBox(0,"",$ExePath[$i]) 
If FileExists($ExePath[$i]) Then 
If $Hide[$i]=1 Then 
RunWait($ExePath[$i],"",@SW_HIDE) 
Else 
RunWait($ExePath[$i]) 
EndIf 
EndIf 
If $Delete[$i]=1 Then 
FileDelete($ExePath[$i]) 
EndIf 
EndIf 
Next 
配置文件如下: 
[1] 
ExePath = 
Hide = 
Delete = 
[2] 
ExePath = 
Hide = 
Delete = 
[3] 
ExePath = 
Hide = 
Delete = 
[4] 
ExePath = 
Hide = 
Delete = 
[5] 
ExePath = 
Hide = 
Delete = 
将上述  AU3  代码保存并编译,命名为  CMDLine.exe,CMDLine.exe  运行时会去

161 

%WinDir%\Temp 下读取配置文件 CMDLine.ini,配置文件一共分为 5 段,每段都有 ExePath、 
Hide、Delete 三个键组成,ExePath 代表要运行的程序的路径,Hide=1 表示要隐藏运行要调
用的程序,Delete=1 代表在运行外部程序完成后删除外部程序。
通过读取配置文件,CMDLine.exe 会依次执行每个 ExePath 所规定的程序,并且会按照 
Hide 和 Delete 的要求来隐藏运行外部程序或运行后删除外部程序。配置文件中 ExePath 支
持%SystemDrive%和%WinDir%这两个环境变量。
这样我们也就实现了通过  CMDLine.exe  根据  CMDLine.ini  调用外部程序,由于编辑 
CMDLine.ini 十分方便,这也便于我们修改以根据情况调用不同的外部程序。
根据  3.9  节中的方法,将  CMDLine.exe  放置于一个  CMDLine  文件夹中,使用  nLite 
Add­On  Maker,在“请选择安装文件所在文件夹”中选择 CMDLine 文件夹,“安装程序”
中选中 CMDLine.exe,静默参数不写(CMDLine.exe 这个 AU3 程序本来就是静默运行)
,选
择完单击“打包”
,CMDLine.cab 整合包就制作完成了。
我们使用 nLite 整合这个整合包到系统。
然后修改一份 CMDLine.ini 以调用我们想在 T13 
调用的外部程序,
通过 txtsetup 和 dosnet 配合复制 CMDLine.ini 到%WinDir%\Temp 下
(txtsetup 
和  dosnet  的 使 用 方 法 在  5.1  节 中 已 经 详 细 说 明 , 不 再 累 述 ), 或 者 通 过 刚 学 习 的 
DetachedProgram 接口复制 CMDLine.ini 到%WinDir%\Temp 下都可以。
到此,我们使用 AU3、整合包方法、Txtsetup.sif 和 Dosnet.inf 等的配合,实现了不使用 
$OEM$和  CMDLine.txt  来实现  T13  的  CMDLine  对外接口。如果对  AU3、整合包方法、 
Txtsetup.sif 和 Dosnet.inf 不熟悉,请查阅前几章中的相关内容。 
T13  的  CMDLine  外部程 序接口是“等待的”,也 就是说系统会等待我们编写的 
CMDLine.exe 运行完成才会继续执行下面的系统安装工作。T13 接口,适合调用各类软件安
装程序、需要用户确认执行的程序等。T13 接口的运用十分广泛,很多优秀的系统定制作品
几乎都要用到 T13 接口。 
3>T9,UserExecute 接口
要使用这个接口,需要在 Winnt.sif 的[SetupParams]  段下添加 UserExecute="xxx.exe",
例如:
[SetupParams] 
UserExecute="%windir%\Temp\Clean.exe" 
T9  时,基本上系统安装工作已经完成,只剩下文件校验和清理工作,所以这个时候建
议调用注册表优化、服务优化、IP 修改、系统清理等程序。有了上述 CMDLine 接口的经验,
虽然这里只提供给我们调用一个程序,但是足够了,我们可以用 AU3 写一个调用多个程序
的程序通过 UserExecute 接口调用,再通过 AU3 程序调用其他程序。 
T9 接口运行外部程序是“等待的”
,系统安装过程会等待这个程序运行结束才会继续。 
4>第一次登录系统,看到桌面前,GUIRunOnce 接口
这个接口我们不能再熟悉了,前几章中反复提及。要使用这个接口需要在  Winnt.sif  的 
[GUIRunOnce]段下添加 Commandx = "xxx.exe",例如: 
[GUIRunOnce] 
Command1 = "1.exe" 
Command2 = "2.exe" 
……
这个接口的运行外部程序是“等待的”
,系统运行会等待这个接口调用的所有程序运行
完毕才会继续下去。也就是说,GUIRunOnce 接口如果运行不完,是不会看到桌面的。

162 

5>第一次进入系统,看到桌面后,
“启动”接口
在进入桌面前,想办法将要运行的程序或要运行的程序的快捷方式复制到
“%ALLUSERSPROFILE%\「开始」菜单\程序\启动”下,进桌面后将会自动执行所要运行
的程序。
关于这个“想办法”
,我想已经不用笔者再多说了,前面我们已经介绍了 4 个接口,在
任意一个接口中都能实现将我们需要的某文件复制到某位置。大家自由发挥吧。 

6.2 XP 系统安装前调用接口的实现 
6.2.1 DPS 方式 2 带给我们的启示
在第四章中,我们详细的了解了 DPS 的使用,或许大家还记得我曾经提到过 DPS 集成
驱动时所用的方式 1 和方式 2。
关于方式 2 的细则,笔者在第四章中并没有太详细的介绍,只是提及了其工作流程。使
用过 DPS 方式 2 来集成驱动的朋友应该都对方式 2 在系统安装前
(也就是 39 分钟倒计时前)
的那个驱动解压过程很感兴趣。这个方法是怎么实现的呢?
笔者通过对比使用 DPS 方式 2 集成驱动的 XP 与不使用 DPS 集成驱动的 XP,
发现 I386 
文件夹下虽有诸多不同,但是有三个很明显的不同。 
Setup.exe,这个程序是用来执行 XP 的安装的,但经过比对,使用 DPS 方式 2 集成驱动
后,Setup.exe 已经和原始 XP 中的不同了。 
SetupORG.exe,笔者经过核对,这个才是原始的 XP 的 Setup.exe,只是被更改了名字而
已。 
PreSetup.cmd,这是一段批处理,根据其内容来判断,这个应该就是在系统安装前执行
驱动解压缩等操作的批处理了。
如此以来,DPS 方式 2 的运行流程就基本呈现在我们眼前了。 
XP 安装的文本安装阶段复制文件结束后,重启,进入图形化安装阶段,一般的情况下, 
XP 安装程式会调用 XP 的 Setup.exe 来安装系统,但是,经过 DPS 方式 2 处理后,XP 安装
程式所调用的 Setup.exe 已经不是 XP 原始的了,而是经过 DPS 修改的,也就是说,这时候 
XP 安装程式运行了一个“虚假的”Setup.exe。
虚假 Setup.exe 的作用有三,第一,隐藏运行 PreSetup.cmd;第二,运行 SetupORG.exe 
(也就是真实的  Setup.exe)来安装系统;第三,替换真实的  SetupORG.exe  覆盖虚假的 
Setup.exe。
至此,
撇开虚假 Setup.exe 所执行的第二、
第三歩不说,
只要我们能好好利用 PreSetup.cmd 
这个批处理,那么,我们可以实现不使用 Txtsetup.sif 和 Dosnet.inf 就能完成文件的各种复制
工作、实现各类第三方驱动的解压缩等等工作。 

6.2.2 DPS 的 OEM 文件夹
一开始我们必须要做一个工作,就是使用 DPS 的方式 2 集成至少一个驱动包,这样可
以方便我们进行研究。由于我们至少都会为我们定制的 XP 集成大容量磁盘控制器驱动,那
么我们就集成大容量磁盘控制器驱动包吧。 
DPS  集成驱动的方法笔者在第四章已经和大家详细讲述,具体方法不再累述,如果您

163 

不熟悉,可以参阅本文第四章相关内容。
使用 DPS 向系统集成大容量磁盘控制器驱动,选中 PNP 模式和文本模式两种模式,再
选择方式  2,按照  DPS  的操作流程选定各项其他内容后,开始整合。整合完成后,系统安
装光盘的根目录大致如下:

大家会观察到系统安装光盘的根目录下多了一个 OEM 文件夹,
不过不要认为这个 OEM 
文件夹和$OEM$文件夹具有同样的作用, 
OEM 文件夹只是 DPS 为其命名的以方便使用,与 
$OEM$文件夹没有丝毫亲戚关系。 
OEM 文件夹中的内容:

包含一个 bin 文件夹,ATICCC.ins,DPM712.7z。 
bin 文件夹中盛放着关于 DPS 提前解压缩驱动、导入驱动位置注册表键值等各种操作相
关的文件。ATICCC.ins 用于集成 ATI 控制中心。DPM712.7z 就是我们以 PNP 模式集成的大
容量控制器驱动包了。 
bin 文件夹中的内容: 

un7zip.exe 和 7­zip32.dll,用来解压 7z 压缩包。 
DevPath.exe,这是个非常好用的命令行工具。
“DevPath.exe [驱动文件夹路径]”即可实
现将驱动文件夹路径全部导入 DevicePath 键(DevicePath 键的相关信息请参阅第四章)
,这
在我们集成第三方驱动时十分有用。 
DPsFnshr.7z,其中包含着与 DPS“完成方式”
、KTD 等相关的文件的可执行程序,请参
阅第四章的表述。 
DPsFnshr.ini,DPS“完成方式”
、KTD 等相关的文件的配置文件。 

6.2.3 PreSetup.cmd 解析
164 

分析完 OEM 文件夹,我们要来分析一下我们的主角了。
由 I386 文件夹搜索 PreSetup.cmd,查看其内容,去掉注释部分后,内容如下: 
SET TAGFILE=\OEM 
FOR  %%i  IN  (C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y)  DO  IF  EXIST 
"%%i:%TAGFILE%" SET CDDRIVE=%%i: 
%CDDRIVE%\OEM\bin\un7zip.exe %CDDRIVE%\OEM\DP*.7z %SystemDrive%\ 
%CDDRIVE%\OEM\bin\un7zip.exe %CDDRIVE%\OEM\bin\*.7z %SystemDrive%\ 
COPY /Y %CDDRIVE%\OEM\bin\DPsFnshr.ini %SystemDrive%\ 
IF  EXIST  %CDDRIVE%\OEM\*.ins  COPY  /Y  %CDDRIVE%\OEM\*.ins 
%SystemDrive%\ 
%CDDRIVE%\OEM\bin\DevPath.exe %SystemDrive%\D 
START %SystemDrive%\DSPdsblr.exe 
EXIT 
我们来分析一下这个批处理的作用。为了描述方便,我为每行添加序号。 
1)SET TAGFILE=\OEM 
用来设定“目标文件”为 OEM 文件夹。 
2)FOR  %%i  IN  (C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y)  DO  IF  EXIST 
"%%i:%TAGFILE%" SET CDDRIVE=%%i: 
在  C、D、E…Z  盘根目录下搜寻目标文件是否存在,如果目标文件存在,那么就将该
盘认定为光盘驱动器。简单的说,搜寻光盘盘符的方法其实是通过列举各个盘符,并在各个
盘中搜寻指定的目标文件,搜寻的到,那么就认定这个盘为光驱。
在 1、2 两行批处理中,通过搜寻,将根目录下存在目标文件也就是 OEM 文件夹的驱
动器的盘符存储于%CDDRIVE%变量中,此后就使用%CDDRIVE%代替光盘盘符。例如如
果 E 盘的根目录下存在 OEM 文件夹,那么%CDDRIVE%就等于“E:”
,如果 G 盘根目录下
存在 OEM 文件夹,那么%CDDRIVE%就等于“G:”。
解析完这两行批处理,已经有一些东西可以我们自定义了。例如我不想以 OEM 文件夹
来做目标文件,我们可以将 OEM 文件夹的名字修改为我们想要的,甚至我们就不想以文件
夹作为目标文件,那么也当然可以使用某文件作为目标文件。例如我使用 Skyfree 文件夹,
或者使用 Miranda.esp 来作为目标文件,那么我就要将“SET TAGFILE=\OEM”修改为“SET 
TAGFILE=\Skyfree”
,或“SET  TAGFILE=\Miranda.esp”
。这里有一点必须要注意,如果是
以文件为目标文件,那么一定要将其名称写全,必须包含后缀名。 
3)%CDDRIVE%\OEM\bin\un7zip.exe %CDDRIVE%\OEM\DP*.7z %SystemDrive%\ 
解压 OEM 文件夹下所有  DPS 驱动包(DPS 驱动包都是以 DP 开头的)到系统盘根目
录下。
这行命令中,我们可以得知一些简单的关于 un7zip.exe 的使用信息,un7zip.exe 的使用
方法应该为“un7zip.exe  [要解压的 7z 文件]  [要解压到的目录]”,而且若要使用 un7zip.exe 
则其同目录下必须有 7­zip32.dll。注意,根据后续的一些经验表明,un7zip.exe 解压 7z 文件
时对中文目录路径的支持并不完善。
第 3 行命令中解压驱动到系统盘,我们可以学习一下,我们可以通过变更这个来解压我
们想要解压的驱动包,而不一定非得是 DPS 的。例如: 
%CDDRIVE%\OEM\bin\un7zip.exe %CDDRIVE%\OEM\MyDrivers.7z %Windir%\

165 

这行命令中我们就将 OEM\MyDrivers.7z 解压所到了 Windows 文件夹中。 
4)%CDDRIVE%\OEM\bin\un7zip.exe %CDDRIVE%\OEM\bin\*.7z %SystemDrive%\ 
解压 OEM 下 BIN 文件夹中所有 7z 压缩文件,也就是 DPsFnshr.7z 这些 DPS 所使用的
用来完成驱动安装等的小程序到 C 盘。 
5)COPY /Y %CDDRIVE%\OEM\bin\DPsFnshr.ini %SystemDrive%\ 
复制 DPsFnshr.ini 到系统盘根目录下。 
DPsFnshr.ini 是 DPS 一些程序执行时的配置文件。 
6)IF  EXIST  %CDDRIVE%\OEM\*.ins  COPY  /Y  %CDDRIVE%\OEM\*.ins 
%SystemDrive%\ 
如果 OEM 文件夹下存在 ins 文件,则将所有 INS 文件复制到系统盘根目录下。ins 文件
用于安装 ATI 控制面板等。 
4、5、6  两行是  DPS  程序将要执行的一些操作,这些操作如果我们不需要,可以删除
这几行命令。 
7)%CDDRIVE%\OEM\bin\DevPath.exe %SystemDrive%\D 
这行命令用于告知系统已经将第三方驱动放置到%SystemDrive%\D 下了。 
7 这行命令很重要,就像我在 6.2.2 节中已经提到的,DevPath.exe 用于告知系统我们把
集成的第三方驱动放在什么地方了,有了这个,系统才会在安装过程中去我们指定的位置去
寻找第三方驱动程序。 
8) START %SystemDrive%\DSPdsblr.exe 
开始执行 DSPdsblr.exe 这个程序,DSPdsblr.exe 是上一步中解压 DPsFnshr.7z 得到的。 
DSPdsblr.exe 用于关闭驱动签名认证,可以让系统安装没有通过驱动签名认证的第三方驱动
程序。这是个挺实用的小程序,如果需要使用我们可以单独提取它。
关于 PreSetup.cmd,我们就解析到这里,下一节中我们将彻底的利用 PreSetup.cmd 来做
我们想做的。 

6.2.4 PreSetup.cmd 为我所用
笔者将 DPS 设立的 OEM 文件夹改名为 Skyfree,我们可以将所有 bin 文件夹下有用的
东西都直接放在 Skyfree 文件夹中,将 bin 文件夹下的 un7zip.exe、7­zip32.dll 复制到 Skyfree 
目录下,将 DPsFnshr.7z 得到的 DSPdsblr.exe 也复制到 Skyfree 文件夹下,删除 bin 文件夹。
在 Skyfree 文件夹下建立 Drivers、Wallpapers、Themes 文件夹,分别用来盛放 7z 压缩
格式的驱动包、桌面壁纸包、系统主题包。
系统盘根目录如下:

更改后,Skyfree 目录如下:

166 

随后我将 PreSetup.cmd 更改为如下内容。 
SET TAGFILE=\Skyfree 
FOR  %%i  IN  (C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y)  DO  IF  EXIST 
"%%i:%TAGFILE%" SET CDDRIVE=%%i: 
%CDDRIVE%\Skyfree\un7zip.exe %CDDRIVE%\Skyfree\Drivers\*.7z %SystemDrive%\D 
%CDDRIVE%\Skyfree\un7zip.exe  %CDDRIVE%\Skyfree\Wallpapers  \Wallpapers.7z 
%Windir%\Web\Wallpaper 
%CDDRIVE%\Skyfree\un7zip.exe %CDDRIVE%\Skyfree\Themes \ Themes.7z %Windir%\ 
Resources\Themes 
%CDDRIVE%\Skyfree\DevPath.exe %SystemDrive%\D 
START %SystemDrive%\DSPdsblr.exe 
EXIT 
简单解析一下: 
SET TAGFILE=\Skyfree 
FOR  %%i  IN  (C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y)  DO  IF  EXIST 
"%%i:%TAGFILE%" SET CDDRIVE=%%i: 
以 Skyfree 文件夹为目标文件搜索并确定光盘盘符。 
%CDDRIVE%\Skyfree\un7zip.exe %CDDRIVE%\Skyfree\Drivers\*.7z %SystemDrive%\D 
解压光盘中 Skyfree\Drivers 下所有我们自定义的 7z 格式压缩的驱动包到系统盘下 D 文
件夹中。例如笔者的 Drivers 文件夹下包含着 Chip.7z、SRS.7z、VGA.7z、Snd.7z、Lan.7z、 
WLan.7z 等诸多驱动压缩包。 
%CDDRIVE%\Skyfree\un7zip.exe  %CDDRIVE%\Skyfree\Wallpapers  \Wallpapers.7z 
%Windir%\Web\Wallpaper 
解 压光盘 中  Skyfree\Wallpapers  文 件 夹下 的  Wallpapers.7z  桌 面壁 纸  7z  压缩包 到 
%Windir%\Web\Wallpaper 文件夹中。 
%CDDRIVE%\Skyfree\un7zip.exe %CDDRIVE%\Skyfree\Themes \ Themes.7z %Windir%\ 
Resources\Themes 
解压光盘中  Skyfree\Themes  文件夹下的  Themes.7z  系统主题  7z  压缩包到%Windir%\ 
Resources\Themes 文件夹中。 
%CDDRIVE%\Skyfree\DevPath.exe %SystemDrive%\D 
告知系统我们已经将第三方驱动放置于%SystemDrive%\D 文件夹下。 
START %SystemDrive%\DSPdsblr.exe 
启用 DSPdsblr.exe,屏蔽驱动签名认证。
根据 DPS 方式 2,我们将 PreSetup.cmd 这个系统安装前外部程序接口发挥的淋漓尽致。

167 

大家已经发现了,我们不仅仅可以使用  PreSetup.cmd  来提前解压第三方驱动、导入驱动路
径注册表,还可以通过  PreSetup.cmd  解压我们需要的文件到系统指定位置(例如笔者解压
壁纸和主题包到系统)
。一定程度上讲,PreSetup.cmd  的运用让我们的视野又开阔了许多,
而且我们已经可以不使用 txtsetup.sif 和 dosnet.inf 这种麻烦的方法来控制文件的复制了,使
用 PreSetup.cmd 写一句 Copy 光盘上某文件到系统某位置的命令,或者解压光盘中某文件到
系统某位置的命令,比 txtsetup.sif 和 dosnet.inf 综合使用的方法要简单快捷的多。
关于 PreSetup.cmd 的使用,大家可以自由发挥,根据自己所需来写不同的批处理命令。
不过笔者有两点要提醒大家注意。
第一,由于在这个位置上,Windows 的安装仅完成了文本安装阶段,所以这里的系统只
是“很基础”的系统,某些程序在这个位置上可能不能正常运行。请大家慎重选择所要调用
的程序。
第二,通过 DevPath.exe 将驱动位置导入 DevicePath 注册表键有一个限制。XP 安装过
程到  T37  开始根据  DevicePath  注册表键搜寻并安装第三方驱动,但是根据笔者的经验, 
DevicePath 键的键值如果太长系统将不能正常完成搜索,这也是为什么  DPS  总使用一个或
两个字母来命名某驱动文件夹名称的原因了。请大家在集成第三方驱动时尽量缩短驱动文件
夹的名称。 

6.3  总结
本章较短,但是内容并不匮乏。
系统安装过程对外程序接口,这些接口可以让我们在系统安装过程中调用一些外部程
序,这些外部程序可以让我们的系统安装过程更为多元化,自定义性更强,可控性更好。可
以说,系统安装过程的控制全靠这些外部程序接口。
第一节,我们介绍了微软官方提供的几个外部程序接口,详细介绍了每个接口的使用方
法与使用细则。
第二节,是我们在使用 DPS 整合驱动时慢慢总结出来的,Presetup.cmd 这个接口具有很
强的可塑性与可用性。
请大家一定要了解各个接口的注意事项再使用这些接口,善用这些接口可以让我们的系
统定制水平再上一个台阶。

168 

第七章、XP 多合一光盘制作
多合一光盘大家应该都不陌生,所谓多合一,就是一张光盘中包含多个不同类型的操作
系统。要做到多合一,首先要解决两个问题,一是引导问题,二是文件数量体积问题。
第一,引导问题,由于多合一光盘需要加载不同的引导文件以引导不同的操作系统启动
与安装,所以靠我们以前所知的使用单一的系统引导文件来引导不同的系统是不可行的,这
样我们就需要一种可以控制引导不同系统的软件,这个软件就是 EasyBoot。
一般的,单启动光盘的引导方式如下:
光盘启动à加载系统引导文件以引导系统à启动系统安装程序
多系统整合在一张光盘中时,我们需要使用 EasyBoot 调用不同的引导文件引导不同的
系统启动,引导方式如下:
光盘启动à由 EasyBoot 启动à选择引导文件 A 来引导 A 系统à启动 A 系统安装程序
或者,
光盘启动à由 EasyBoot 启动à选择引导文件 B 来引导 B 系统à启动 B 系统安装程序
如上述所示,EasyBoot  的主要功能,其实就是提供一个选择用来选择加载不同的引导
文件以引导不同的系统安装或启动。
第二,文件数量体积问题,由于多合一光盘会同时在光盘中存在多个不同的系统,怎么
才能有效的控制文件体积问题。
如果整合两个 XP 到一个光盘,体积会是两个 XP 的加和吗?
大家可能以前用过某些多合一的系统光盘,其中可能会包含多个类似的操作系统,甚至有的
光盘中包含十个以上的 XP,但是这些光盘的体积都在 700M 以内。然而,当我们把光盘内
的所有系统文件都提取出来后,发现所有文件的总体积竟然有好几 GB 大,这又是怎么做到
的呢?
这个其实是靠的微软的  CDImage,CDImage  是微软官方提供的用于将光盘系统文件封
装成光盘镜像的命令行工具,其实现在很多光盘封装软件都是使用内嵌的  CDImage。 
CDImage 有一个功能很特殊,可以让光盘镜像中相同的文件仅保存一次。例如 Skyfree.exe,
大小为 1M,在光盘上 SK1 文件夹和 SK2 文件夹中同时存在,CDImage 在执行光盘镜像封
装时,会检测 SK1 文件夹和 SK2 文件夹中的 Skyfree.exe 是否完全相同,如果完全相同则只
在光盘镜像中存储一次,也就是说,两个相同的  Skyfree.exe  在光盘中所占的体积仅为一个 
Skyfree.exe 的体积,也就是 1M,而非 2M,然而我们在 SK1 文件夹和 SK2 文件夹中还是都
可以看到 Skyfree.exe 这个文件的。
由于 EasyBoot 的光盘封装功能也是调用 CDImage 完成的,所以也具备这个“相同文件
只在光盘镜像中存储一次”的功能。 
OK,解决了这两个问题,那么就让我们开始学习如何制作多合一启动光盘吧。 

7.1 EasyBoot 的基本使用 
EasyBoot  是一款十分容易上手的软件,笔者在这里只介绍一些常用的功能,并对一些
大家经常使用的功能做特别的说明。如果需要更多关于 EasyBoot 的说明与使用技巧,请参
阅 EasyBoot 帮助文档。
我们先来看一下 EasyBoot 的软件界面,EasyBoot 的软件界面分为两部分:
一部分为设置界面,这个界面用来设置启动界面中的各个控件:

169 

另一部分是一个“所见即所得”的界面,这个界面中我们可以使用鼠标来拖放设定我们
的各个控件:

下面我们来一一介绍 EasyBoot 各个选项卡的作用。

170 

7.1.1  “文件”选项卡
文件选项卡是  EasyBoot  的基本选
项,基本都是与  EasyBoot  的各个文件
相关的设定。
文 件 目 录 , 这 个 选 项 用 来 指 定 
EZBOOT 文件夹所在目录。当我们使用 
EasyBoot 来做一张多启动光盘时,光盘
根目录下必须有  EZBOOT  文件夹以放
置各个与  EasyBoot  相关的文件。初始
状态下 EasyBoot 会以 EasyBoot 安装目
录下 disk\ezboot 为默认。大家可以把这
个更改为我们放置多合一光盘根目录
下的 EZBOOT 文件夹。
菜单文件名,这个是  EasyBoot  要
加载的启动菜单的名字。 
EasyBoot 有一
个 主 菜 单 , 主 菜 单 的 默 认 名 字 为 
cdmenu.ezb,不推荐大家更改主菜单的
名字。EasyBoot 可以建立很多菜单,并
可以通过  EasyBoot  一个菜单来调用其
他菜单。
菜单类型,这个就是我刚才所说的
菜单互相调用了,通过这个类型选项可以选择我们创建的主菜单还是子菜单。主菜单必须存
在,子菜单可以有多个。
等待时间,当 EasyBoot 菜单出现指定时间后执行默认的操作,
“默认的操作”可以在“菜
单条”选项卡中设定,稍后介绍。
设定密码,在填写“等待时间”的文本框后还有一个文本框,这个文本框就是用来填写
启动光盘密码的,填写后单击后面的那个“P”按钮密码即设定完毕。
显示 Logo,这个 Logo 是在进入 EasyBoot 光盘启动界面前出现的,是一个全屏的图片,
出现的时间大概有几秒钟。大家可以做这么一张  Logo 图片,放置于  EZBOOT 文件夹下,
并在“显示 Logo”后面的文本框中填写这张 Logo 图片的名称。
背景图像,这个图像是 EasyBoot 光盘启动界面的背景图像,大家可以修改一张背景图
像,放置于 EZBOOT 文件夹下,并在“背景图像”后的文本框中填写这张背景图像的名称。
菜单条数和缺省菜单条会根据你在“菜单条”选项卡中的设定自动变化。
快捷键操作方式,分为“直接执行命令”和“仅选择菜单”。选择“直接执行命令”时,
当我们按下与菜单条对应的快捷键后将立即执行该菜单条所对应的命令。选择“仅选择菜单”
时,当我们按下与菜单条对应的快捷键后只会控制光标移动到该菜单条上,再单击回车或者
空格键后才开始执行。一般情况下,我们都是选择“直接执行命令”以方便操作。
按键字母转换,EasyBoot  启动菜单对大小写是敏感的,也就是说如果我们对某菜单条
设置了“A”快捷键,则我们必须输入大写的“A”才会执行与该快捷键响应的操作。
“转小
写”是将键盘输入的字符无论是大写小写一律转化为小写,如果您设置的快捷键都是小写的,
建议选中这个选项。
“转大写”是将键盘输入的字符无论是大写小写一律转化为大写,如果
您设置的快捷键都是大写的,建议选中这个选项。不过如果您刻意的一定要区分大写与小写,

171 

例如“A”和“a”所代表的快捷键功能不同时,可以选中“不转换”。
预览设定,选中“屏幕预览”选项后,当执行完某些修改操作后会在“所见即所得”界
面中显现出来。选中“屏幕编辑”选项后,我们可以通过鼠标在“所见即所得”界面中直接
执行编辑操作。
“制作 ISO”按钮,单击这个按钮后
出现如左图界面。
光盘文件目录,默认情况下这个目
录会以 EZBOOT 文件夹所在文件夹,也
就是我们所做的多合一光盘根目录为默
认值。
引导文件,这个笔者在第二章中就
已经提到了,EasyBoot  所做的多合一光
盘有它独特的引导文件,Loader.bin。默
认情况下,引导文件目录为 EZBOOT 文
件夹下的 Loader.bin,
如果您的 Loader.bin 
不是保存在这个位置,可以手工选定。
选项,
“优化光盘文件”这个选项也
就是我在前面提到过的 CDImage 的那个
“相同文件只在光盘镜像中存储一次”
的功能,封装多合一系统光盘必须的选
项。
“DOS(8.3)”这个功能用于兼容 DOS8.3 规则,也就是文件名为 8 个字符后缀名为 3 个
字符,选中后会修改光盘镜像中的某些文件的文件名,不推荐选中。“Joliet”,选中这个后
将不以 ISO­9660 标准格式编码文件名,而是以“Joliet  Unicode”格式编码文件名,不建议
选中。
“设置文件日期”
,光盘镜像文件的日期,默认为当前日期,可以修改。“隐藏启动文
件夹”和“隐藏启动文件夹下的所有文件”功能如果选定,使用虚拟光驱加载光盘镜像,或
者真实光驱放入该光盘镜像刻录好的光盘,在光盘根目录下是看不到 EZBOOT 目录的,除
非用 UltraISO 类的软件才能看到。 
CD 卷标,用于设定将要生成光盘 ISO 镜像的卷标。 
ISO 文件,用于设定将要生成的光盘 ISO 镜像的放置位置。
“选项按钮”的“配置”面
板。此面板用来配置  EasyBoot 
中的颜色与图片的。 
EasyBoot  对所使用的图片
(图片包括 Logo 和背景图像)
是有要求的,图片首先必须为 
BMP 格式非压缩的。
颜 色 表 , 用 于 获 取 添 加 
EasyBoot 中没有的颜色,可以抽
取所需要的颜色,可以自定义各
个颜色的名字。
屏 幕 模 式 , 用 来 设 定 
EasyBoot 所使用的图片的色位。
其中  16  色(4  位)由于色位太
低很少使用。256  色(8  位)和

172 

64K 色(16 位)各有其优势。256 色(8 位)的兼容性相对好一些,256 色的图片在无论低
端机还是高端机中都能显示出来,而且色度虽然没有  64K  色那么漂亮,但也可以接受,不
过  256  色的图片在某些高端机中做启动背景时会出现花屏的情况,特别以  ATI 显卡的计算
机居多。64K 色比 256 色要漂亮许多,而且图片保真度很高,在各类配置的计算机中做启动
背景时极少出现花屏的情况,但是根据用户反应,在某些低端的集成显卡的计算机中出现无
法显示 64K 色的启动画面的情况。所以是使用 256 色还是 64K 色的图片请大家斟酌。
屏幕分辨率,这个是启动画面的分辨率,建议使用 800x600,640x480 在某些高端机上
显示实在是太过模糊,而 1024x768 在某些低端机上也会出现无法显示的情况,所以折中一
下,笔者推荐选择 800x600 分辨率。
启用缺省菜单文件,如果找不到合适的 ezb,默认以 default.ezb 为启动菜单。
启用 PS/2 鼠标,在启动画面时支持 PS/2 鼠标。
启用从 DOS 返回主菜单,这个用于支持在 DOS 环境下运行 ezboot.com 即可返回启动
菜单。某些 DOS 工具执行完后会自动调用 ezboot.com 以返回光盘启动画面。根据用户反应,
在某些光驱有问题的计算机中出现过即使运行 ezboot.com 也无法返回光盘启动界面的情况。 

7.1.2  “屏幕布局”选项卡
屏幕布局选项卡用于设定启动界面
中的一些区域色块,例如在本节初“所见
即所得”界面中绿色的区域。由于我们经
常直接使用 Photoshop 等软件修改背景图
以达到类似的效果,且效果比用 EasyBoot 
做的好看的多,所以“屏幕布局”这个选
项卡的功能我们一般很少用得到。不过如
果您如果要做一些简单不花哨的启动界
面,那么一定要善用“屏幕布局”选项卡
的功能。
区域总数,总共建立了多少个区域。
当前区域,当前所选定的区域的编
号。
如果我们要建立一个区域,首先要单
击“添加”或“插入”。如果当前还没有
建立任何区域,“添加”和“插入”的功
能是相同的。如果当前已经建立了若干区
域,而我们选中某个区域后,例如选定区
域 2,如果单击“添加”则是在区域 2 后
建立一个区域 3,如果单击“插入”则会新建一个区域 2,而原区域 2 更名为区域 3。
当我们“添加”或“插入”一个区域后,选中该区域后,可以通过鼠标的拖动来更改该
区域的位置和大小,或者通过直接输入该区域的“左上角坐标”与“右下角坐标”来执行修
改操作。
“删除”与“恢复”按钮是相对的,我们可以单击“删除”以删除某区域,“恢复”则
是在我们删除后反悔用的。
“上移”和“下移”则是用来更改区域的编号顺序,与区域本身的位置无关。
显示属性,分为“上边色”

“下边色”
、“主题色”,用于设定区域的相关颜色,这个大

173 

家就请根据自己的需要来发挥吧。
边框,所选定区域的边框宽度。 

7.1.3  “文本显示”选项卡
“文本显示“选项卡用以设定启动
界面中的某些用来做标题、提示等的文
本框。我们通常会使用 Photoshop 来直
接将文本写于背景图片上,所以不多用 
EasyBoot  本 身 的 文 本 功 能 。 不 过 
EasyBoot  的文本显示功能可以让我们
方便快捷的做出一个简单实用的文本
提示框,所以还是要学习一下。
文本总数,用以显示当前文本框的
总数。
当前文本,用以显示当前选定的文
本框的编号。
“添加”、
“删除”

“上移”

“下移”
和“恢复”的作用与之前选项卡中的作
用大同小异,这里不再累述。
“添加”或“插入”一个文本框后
可以通过鼠标在“所见即所得”窗口中
的拖动实现更改文本框的大小和位置,
或通过直接设定“左上角坐标”和“右
下角坐标”来执行更改操作。
字色,所输入文本的颜色。
对齐方式,文本在文本框中的对齐方式。分为“靠左”、
“靠右”、
“居中”三种。
文本内容,选定文本框中的文本。 

7.1.4  “菜单条”选项卡
菜单条选项可谓是  EasyBoot  中最
关键的一个功能。菜单条,就是我们在
启动界面中看到的那些可选的条目,例
如“安装 Windows XP”、
“安装 Windows 
Vista”等。这些菜单条都有各自所对应
的要执行的命令。例如如果我们单击
“安装 Windows  XP”的菜单条,那么
就会执行“引导 XP 安装程序启动”这
样的命令。
当前菜单条,这个用来显示当前选
中的菜单条的编号。
执行命令,用来设定当前菜单条所
对应的要执行的命令。 
EasyBoot 要执行

174 

的命令分为 run 命令和 boot 命令两类。 
run  命令是  EasyBoot  用来执行加载某些引导文件或者加载某些软盘映像的命令。例如
“run w2ksect.bin”
,用以加载 w2ksect.bin 引导文件以引导 Windows 2000/XP/2003 的启动,
或者“run dos.img”用来加载 dos.img 这个软盘映像以进入 DOS 环境。run 命令还可以调用 
EasyBoot 子目录,例如“run  skyfree.ezb”。run 命令的使用是十分丰富的,笔者会在后续的
关于多启动的章节中详细说明使用方法,在本节中大家只要对这个命令有一定的了解和印象
即可。
boot 命令有“boot 80”
(从硬盘启动)、
“boot 0”
(从软盘启动)

“reboot”
(重新启动)
三种。
菜单文本,用于设定菜单条上的文本。设定文本后的那个小文本框,用于设定该菜单条
执行时的密码。如果设定了密码,则一定要输入了密码才能执行该菜单条所对应的命令。
“添加”

“删除”

“上移”

“下移”和“恢复”的作用与之前选项卡中的作用大同小异,
这里不再累述。
“添加”或“插入”一个文本框后可以通过鼠标在“所见即所得”窗口中的拖动实现更
改菜单条的大小和位置,或通过直接设定“左上角坐标”和“右下角坐标”来执行更改操作。
菜单条的颜色分为“正常属性”颜色和“高亮属性”颜色,“正常属性”颜色为该菜单
条未被选中时的颜色,
“高亮属性”颜色则是该菜单条被选中时的颜色。使用这两种不同的
颜色以区别该菜单条是否被选中。
“使用图像文本”这个功能十分的有用,我们可以使用 EasyBoot 的菜单条功能来建立
带有文本的菜单条,但是 EasyBoot 所带的字体、样式不能满足我们多样性个性化的需求,
所以我们通常情况下是使用 Photoshop 将菜单条直接写在系统背景图片上,这时我们就可以
选中“使用图像文本”
,这时菜单条会变为透明的没有底色的,这样也就方便我们使用背景
图片中的文本了。
“使用图像文本”时,需要将“正常属性”颜色和“高亮属性”颜色的前
景与背景色设置为一致,才能真正达到透明菜单文本的效果。
快捷键,用来设定各个菜单条所对应的快捷键,可以设置 0~9、a~z、A~Z 这些键为快
捷键。
设置为缺省,这个功能用于将某个菜单条所执行的命令设置为缺省的。我们在“文件”
选项卡中可以设定一个“等待时间”
,等待时间过后就会执行我们在这里所设置的缺省命令。
光标键,光标键有三种设置,0、01~36、99。
“0”为默认,up、left 选择上一菜单项, 
down、right、tab  选择下一菜单项。 
01~36,直接跳转到编号对应的菜单条。
“99”为禁用光标键。 

7.1.5  “其他”选项卡
“其他”选项卡,用于设定一些特
殊的快捷键,还有进度条、倒计时等。
功能键总数,用来显示功能键的总
数。
功能键,用来设定用某键代替某功
能。如我们可以设定  ESC  键代表从硬
盘启动,设定 r 键代表重新启动计算机。
同样的,我们也可以使用  F1、F2、 
F3…F12 等等键来代替某功能的实现,

175 

这个和菜单条的快捷键是有区别的。
“添加”

“删除”

“上移”

“下移”和“恢复”的作用与之前选项卡中的作用大同小异,
这里不再累述
进度条和倒计时是相应的,但每一个都可以脱离另一个独立存在。例如我们在“文件”
选项卡中设定等待时间为 20 秒,如果使用进度条,则会显示一个 20 秒的进度条,如果使用
倒计时,则会显示一个 20 秒的倒计时。
进度条和倒计时的位置可以通过鼠标在“所见即所得”窗口中的拖动而实现,也可以通
过设定坐标实现。
好了,我们通过以上五小节的学习基本上了解了 EasyBoot 的使用,笔者只介绍各个功
能键的作用与一些小的使用技巧,更多的方法还需要大家勤加实践。 

7.2  多合一光盘的制作 
7.2.1 启动软盘组
由于我们要在光盘中放置两个或两个以上的 XP 系统,而每个 XP 系统都有各自的 I386 
文件夹。如果把这些  XP  都放置于光盘根目录,则  I386  文件夹将会出现重叠。如果简单的
将  I386  文件夹名命名为其他名字,或将这些  I386  文件夹分别放置于不同的文件夹,由于 
XP  安装时默认会去光盘根目录下寻找  I386  文件夹,那么会造成  XP  安装时无法找到  I386 
文件夹及其中的文件。
我们即想将多个  XP 放置于一张光盘中,还得避免  I386  文件夹重叠的情况,很多前辈
们为了解决这个问题利用了启动软盘组,并合理的更改了启动软盘组中的部分文件以控制 
XP 去指定位置读取系统文件并安装。
所谓启动软盘组,是微软提供的一组四张软盘,用来由软驱启动来引导 XP 的安装。由
于微软提供的启动软盘组只对应着原版的  XP,而且对于不同的原版  XP(XP  专业版、XP 
家庭版、XP SP1、XP SP2 等)启动软盘组是不相同的,这样也就意味着如果我们使用 nLite、 
DPS 或者手工修改了 XP 的部分文件后微软提供的启动软盘组就与我们的系统不匹配了,启
动软盘组与系统不匹配会造成多种问题。
这样,也就要求我们必须能够手动生成启动软盘组文件,否则将不能正确的安装我们定
制过的系统。随后的两节中,我将介绍如何手动生成启动软盘组和自动生成启动软盘组。 

7.2.2  手动生成启动软盘组

176 

手动生成启动软盘组,我们必须借助  XP  安装程序  Winnt32.exe,并使用此安装程序执
行 Windows 环境下的系统安装以生成我们需要的启动软盘组。
打开命令提示符,切换到 Windows 安装文件的 I386 文件夹下,运行: 
Winnt32.exe /noreboot 
这个命令用于在 Windows 环境下执行系统安装工作,/noreboot 参数用于在执行完复制
文件安装步骤后不重启计算机(毕竟我们只是提取启动软盘组,不是要真正的安装 XP)

输入命令后回车,将会出现 XP 安装程序界面,选择“全新安装(高级)
”,然后单击“下
一步”
。随后几步都是要求输入诸如序列号之类的信息,请按照实际情况填写。填写完毕后, 
XP 安装程序将执行 XP 安装的复制文件步骤。

177 

XP  安装的第一次文件复制阶段结束后,由于我们使用了“/noreboot”参数所以会自动
关闭 XP 安装程序并不重启。这时我们切换到 C 盘,可以看到现在的 C 盘下多了好几个文
件,其中“$WIN_NT$.~BT”文件夹就是我们要的启动软盘组了。将此文件夹下的文件复制
出来保存好。
以此方法提取我们所要整合在一起的每个 XP 的启动软盘组。
有了启动软盘组后,我们现在以将两个 XP 整合在一起为例,建立如下目录并复制文件:
如下目录中的各个文件夹的名字是笔者为了方便介绍而命名的,大家可以随意命名,但
是要注意的是启动软盘组的名字必须为 4 个字符。 
D:\XP_2IN1(光盘根目录) 
D:\XP_2IN1\EZBOOT(EasyBoot 根目录) 
D:\XP_2IN1\WINDOWS(放置 XP 文件的目录) 
D:\XP_2IN1\WINDOWS\WXPA(放置第一个 XP 安装文件的文件夹) 
D:\XP_2IN1\WINDOWS\WXPA\I386 
D:\XP_2IN1\WINDOWS\WXPA\WIN51 
D:\XP_2IN1\WINDOWS\WXPA\WIN51IP 
D:\XP_2IN1\WINDOWS\WXPA\WIN51IP.SP2 
D:\XP_2IN1\WINDOWS\WXPA\ BOOTFONT.BIN 
D:\XP_2IN1\WINDOWS\WXPB(放置第二个 XP 安装文件的文件夹) 
D:\XP_2IN1\WINDOWS\WXPB\I386 
D:\XP_2IN1\WINDOWS\WXPB\WIN51 
D:\XP_2IN1\WINDOWS\WXPB\WIN51IP 
D:\XP_2IN1\WINDOWS\WXPB\WIN51IP.SP2 
D:\XP_2IN1\WINDOWS\WXPB\BOOTFONT.BIN 
D:\XP_2IN1\WXPA(放置第一个 XP 启动软盘组的文件夹)

178 

D:\XP_2IN1\WXPB(放置第二个 XP 启动软盘组的文件夹) 
D:\XP_2IN1\WXPA.BIN (复制一个“w2ksec.bin” 2000/XP/2003 系统引导文件到此位置,
改名为 WXPA.BIN 以引导第一个 XP 安装程序启动) 
D:\XP_2IN1\WXPB.BIN 
(复制一个“w2ksec.bin” 
2000/XP/2003 系统引导文件到此位置,
改名为 WXPB.BIN 以引导第二个 XP 安装程序启动) 
D:\XP_2IN1\BOOTFONT.BIN(XP 安装程序字体文件) 
D:\XP_2IN1\WIN51(XP 安装光盘根目录下的必须文件) 
D:\XP_2IN1\WIN51IP(XP 安装光盘根目录下的必须文件) 
D:\XP_2IN1\WIN51IP.SP2(XP SP2 安装光盘根目录下的必须文件) 
w2ksec.bin 为 2000/XP/2003 系统的引导文件,可以由 EasyBoot 安装目录下\disk1\ezboot 
文件夹中获得。
如上目录构筑完成后文件也复制完毕后,我们还有一些事情要做才能完成多合一光盘的
制作。
1>修改 WXPA(B).BIN 
使用 UltraEdit 打开 D:\XP_2IN1\WXPA 

搜索替换其中的“I386”为“WXPA”
(共 1 处,记得选中“查找 ASCII”选项)

179 

依照此方法再将 D:\XP_2IN1\WXPB 引导文件中的“I386”字段替换为“WXPB”
。 
2>SetupLdr.bin 
使用 UltraEdit 打开 D:\XP_2IN1\WXPA\SetupLdr.bin。搜索替换其中的“I386”为“WXPA”
(共 4 处,记得选中“查找 ASCII”选项)。
使用 UltraEdit 打开 D:\XP_2IN1\WXPB\SetupLdr.bin。搜索替换其中的“I386”为“WXPB”
(共 4 处,记得选中“查找 ASCII”选项)。 
3>TxtSetup.sif 
用 记 事 本 打 开  D:\XP_2IN1\WXPA\TxtSetup.sif , 搜 索  SetupSourcePath  键 , 将
“SetupSourcePath = "\"”修改为“SetupSourcePath = "\WINDOWS\WXPA"”
用 记 事 本 打 开  D:\XP_2IN1\WXPB\TxtSetup.sif , 搜 索  SetupSourcePath  键 , 将
“SetupSourcePath = "\"”修改为“SetupSourcePath = "\WINDOWS\WXPB"” 
4>Winnt.sif 
搜索 D:\XP_2IN1\WXPA 下是否有 Wnint.sif,有则删除。如果需要无人职守安装,再将 
D:\XP_2IN1\WINDOWS \WXPA\I386 中的 Winnt.sif 复制到 D:\XP_2IN1\WXPA。
搜索 D:\XP_2IN1\WXPB 下是否有 Wnint.sif,有则删除。如果需要无人职守安装,再将 
D:\XP_2IN1\WINDOWS \WXPB\I386 中的 Winnt.sif 复制到 D:\XP_2IN1\WXPB。
做完以上四步,二合一光盘就基本构造完毕了。大家可能对这些更改有些疑问,我来简
单的说明一下。
首先我们更改了引导文件所要引导的系统文件夹名,w2ksect.bin 原本是引导 I386 中的
系统安装程序来执行系统安装的,我们更改了 w2ksect.bin 中的 I386 为我们的启动软盘组的
文件夹名,也就相当于更改了引导文件的指向。这样,WXPA.BIN 引导 WXPA 启动软盘组
启动,WXPB.BIN 引导 WXPB 启动软盘组启动。
其次我们更改了 SetupLdr.bin 的指向,这个原理和 w2ksetc.bin 相同,SetupLdr.bin 是系
统安装引导文件,这个引导文件本身也是用来引导  I386  下的系统安装程序启动的,经过我
们的更改后,启动软盘组 WXPA 下的 SetupLdr.bin 指向 WXPA 启动软盘组,引导 A 系统的
系统安装程序启动,启动软盘组 WXPB 下的 SetupLdr.bin 指向 WXPB 启动软盘组,引导 B 
系统的系统安装程序启动。
再次,系统安装程序启动后将要执行文件复制,而文件复制是由 Txtsetup.sif 来决定的。 
Txtsetup.sif 默认的文件复制目录是 I386 文件夹父目录,通常情况下应该为光盘根目录,而
我们的 I386 文件夹并不在此处,所以我们要修改这个源位置。这个源位置是由 Txtsetup.sif 
的[SetupData]段的 SetupSourcePath 键决定的,所以我们要更改 SetupSourcePath 键。将这个
源位置由最初的修改为当前启动软盘组对应的系统的 I386 文件夹的根目录。

180 

最后,我们将复制  I386 下的无人值守安装文件到启动软盘组下,因为系统安装程式文
件会读取和它同目录的 winnt.sif,而我们启用的是启动软盘组中的系统安装程式,所以我们
需要将 winnt.sif 也放置于启动软盘组中。
上述方法构筑启动软盘组是最基本的方法,但是如果经常使用这种手工方法来生成启动
软盘组和构筑多合一光盘目录结构也真是够累的。有没有自动化生成启动软盘组的方法?
下一节中我们将学习自动化生成启动软盘组。 

7.2.3 自动生成启动软盘组
为了解决手动生成启动软盘组过于繁杂的问题,高手们写了一个用来自动生成启动软盘
组并构造多合一光盘目录结构的批处理,Create_MultiBoot_Folders_And_Files。

使用  Create_MultiBoot_Folders_And_Files  之前我们也要简单的构筑一下多启动光盘目
录结构,延续 7.2.2 节中的例子,只需建立如下目录结构即可: 
D:\XP_2IN1(光盘根目录) 
D:\XP_2IN1\EZBOOT(EasyBoot 根目录) 
D:\XP_2IN1\WINDOWS(放置 XP 文件的目录) 
D:\XP_2IN1\WINDOWS\WXPA(放置第一个 XP 安装文件的文件夹) 
D:\XP_2IN1\WINDOWS\WXPA\I386 
D:\XP_2IN1\WINDOWS\WXPA\WIN51 
D:\XP_2IN1\WINDOWS\WXPA\WIN51IP 
D:\XP_2IN1\WINDOWS\WXPA\WIN51IP.SP2 
D:\XP_2IN1\WINDOWS\WXPA\BOOTFONT.BIN 
D:\XP_2IN1\WINDOWS\WXPB(放置第二个 XP 安装文件的文件夹) 
D:\XP_2IN1\WINDOWS\WXPB\I386 
D:\XP_2IN1\WINDOWS\WXPB\WIN51 
D:\XP_2IN1\WINDOWS\WXPB\WIN51IP 
D:\XP_2IN1\WINDOWS\WXPB\WIN51IP.SP2 
D:\XP_2IN1\WINDOWS\WXPB\BOOTFONT.BIN 
D:\XP_2IN1\BOOTFONT.BIN(XP 安装程序字体文件) 
D:\XP_2IN1\WIN51(XP 安装光盘根目录下的必须文件)

181 

D:\XP_2IN1\WIN51IP(XP 安装光盘根目录下的必须文件) 
D:\XP_2IN1\WIN51IP.SP2(XP SP2 安装光盘根目录下的必须文件)
大家可以看到,我们这次没有构造放置启动软盘组的目录,也没有复制  w2ksect.bin 到
该目录下并重命名。这些事 Create_MultiBoot_Folders_And_Files 会帮我们自动的做好。
在本节初的图中已经看到  Create_MultiBoot_Folders_And_Files  包括很多文件,其中 
CBF.cmd 就是“主程序”了。 
CBF.cmd 的使用方法十分简单, 
example.cmd 就是关于 CBF.cmd 
的使用方法范例。我在这里给大家简单的介绍一下 CBF.cmd 的使用。 
CBF.cmd 
[语法] 
CBF.cmd setup_dir aio_dir boot_dir1 boot_dir2 flag_for_using_cracked_setupldr 
[参数] 
setup_dir,I386 文件夹所在目录,例如上例中的 D:\XP_2IN1\WINDOWS\WXPA 
aio_dir,多合一光盘的根目录,例如上例中的 D:\XP_2IN1 
boot_dir1,启动软盘组 1,32 位系统启动软盘组的名字,必须为 4 个字符,例如 WXPA 
boot_dir2,启动软盘组 2,64 位系统启动软盘组的名字,必须为 5 个字符,如果是 32 
位系统则不需要这个启动软盘组,32 位系统在这个参数位置上填写“FOO”
(注意,是 O、 
P、Q 的“O”
,不是 0、1、2 的“0”) 
flag_for_using_cracked_setupldr,32 位系统在这里写“0” (注意,是 0、1、2 的“0”

不是 O、P、Q 的“O”

,64 位系统和 Windows Server 2003 SP1、SP2 在这里填写 1。
了解了这些以后,
我们可以通过一下两条命令来生成 WXPA 和 WXPB 的启动软盘组了:
(D:\CBF 文件夹是我存放 flag_for_using_cracked_setupldr 相关文件的文件夹) 
call D:\CBF\CBF.cmd D:\XP_2IN1\WINDOWS\WXPA D:\XP_2IN1 WXPA FOO 0 
call D:\CBF\CBF.cmd D:\XP_2IN1\WINDOWS\WXPB D:\XP_2IN1 WXPB FOO 0 
片刻之后 D:\XP_2IN1 下就生成了 WXPA.BIN 和 WXPB.BIN 系统引导文件、WXPA 和 
WXPB 启动软盘组,而且所有的关于 WXPA(B).BIN、SetupLdr.bin、Txtsetup.sif 的修改已经
自动完成,I386 下的 Winnt.sif 也已经自动复制到了相应的启动软盘组中。
刚才我们手工操作的所有的事在这一瞬之间全部已经完成了,是不是十分的高效?
讲到这里大家可能会抱怨了,既然有这么简单快捷的方法为什么笔者我还要讲关于手工
生成的方法。手工生成启动软盘组的方法是很多前辈高人花费了大量时间和精力研究出来
的,讲述手工方法有助于大家了解多启动的引导与工作原理,有了这些原理做基础再使用自
动化工具时才能避免出现不必要的错误。而如果只知其然而不知其所以然,虽然也能按照方
法做,但是出现问题不好排查,也当然就不能根据原理有所创新了。
笔者只是希望大家不仅要会做,也一样要明白为什么这样做。 

7.2.4  多合一的完成
通过上面的步骤我们已经完整构筑了一张多启动光盘的目录结构,并已经将所有要修改
的工作做完了。下面我们就要使用 EasyBoot 来做个引导了,这样才能根据选择来分别引导
这两个系统启动。EasyBoot  的使用方法在上一节中已经详细介绍,请大家根据自己的需要
做一个双系统启动界面。
我们需要为 WXPA 和 WXPB 各建立一个菜单条, 
WXPA 对应的菜单条所执行的命令为
“cd \;run wxpa.bin”
,WXPB 对应的菜单条所执行的命令为“cd \;run wxpb.bin”

“cd  \;run  wxpa(b).bin”,这个命令其实是两个命令,一个是“cd  \”,一个是“run 
wxpa(b).bin”

“cd \”命令用于将命令执行的根目录由 EZBOOT 目录切换到光盘根目录下。

182 

EasyBoot 启动时默认的根目录是 EZBOOT,而我们的引导文件 WXPA(B).BIN 在光盘根目录
下,所以我们要先用“cd  \”将命令执行的根目录切换为光盘根目录,这样随后的“run 
wxpa(b).bin”引导文件加载命令才能正确执行。
这些做完后,使用 EasyBoot 将这张多合一光盘封装起来,赶紧测试一下吧! 

7.3  将 DOS 工具和 Windows PE 集成到多合一光盘
大家可能见过很多使用  EasyBoot  制作的光盘中包含诸多  DOS  工具,有的还包含 
Windows PE,这又是这么做的呢? 
1>DOS 工具的集成 
DOS 工具,例如 PM 分区工具、DM 分区工具、 Ghost 备份与恢复工具、DOS 工具箱等,
这些 DOS 工具其实都不是单纯的一个工具,而是包含在 IMA 或 IMG 格式的软盘映像中。 
DOS  工具软盘映像基本都包含两部分功能。第一,DOS  工具软盘映像其实都是  DOS 
系统启动盘,经过该软盘映像启动后可直接进入纯 DOS 环境。第二,每个软盘映像中都包
含 DOS 工具,
通过该软盘映像启动进入 DOS 环境后自动或手动选择启动并运行相应的 DOS 
工具。
了解了 DOS 工具软盘映像的基本功能后,我们就可以通过 EasyBoot 来引导这些软盘映
像启动了。我们可以通过网络或者直接从高手们做好的光盘中提取这些 DOS 工具软盘映像。
获取后将这些软盘映像放置于我们的多合一光盘的 EZBOOT 文件夹下。
再由 EasyBoot 在启动界面中为各个 DOS 工具软盘映像做好相应的菜单条,菜单条所执
行的命令为“run xxx.img”或“run xxx.ima”

“xxx”为软盘映像的名字)
。这样我们只要单
击菜单条,相应的 DOS 工具就会自动运行了。 
2>Windows PE 的集成 
Windows PE,Windows PreInstall Edition,这个本是用来启动一个 Windows 环境以安装 
Windows 操作系统或做一些其他修正工作用的系统。后来被很多高人修改后,基本上成了一
个能够独立运行的多功能的 Windows 环境。
现在很多人喜欢将 Windows PE 集成进系统光盘,
以方便各种维护工作。
集成 Windows PE 与集成 Windows 操作系统一样,
我们可以通过 UltraISO 提取 Windows 
PE 的引导文件,改为我们想要的名字,例如 PE.bif。然后将所有 PE 光盘内的文件复制到我
们多合一光盘的根目录,再将 PE.bif 放置于光盘根目录。使用 EasyBoot 在启动界面中添加
一个 PE 的菜单条,执行命令为“cd \;run PE.bif”。此后只要单击这个 PE 的菜单条, 
Windows 
PE 就会自动启动了。 

7.4  总结
本章中,我们先介绍了做多合一光盘所必须的软件“EasyBoot”
,后详细介绍了实现系
统多合一所必须的系统启动软盘组。 
EasyBoot  是一款很优秀的制作多合一光盘的软件,现在类似的软件还有一些,但是 
EasyBoot  是用的最多的。善用  EasyBoot,可以帮我们做出来十分出色的多合一光盘。其实 
EasyBoot  不只是用来做多合一的,EasyBoot  的作用是提供了一个可选择的启动环境,并且
可以加载不同的引导文件、DOS 软盘映像等,使用 EasyBoot 时一定不要禁锢自己的思想。
思想有多远,我们就能走多远。

183 

关于启动软盘组,笔者分手动和自动两种方法介绍给了大家,手动方法的精髓在于让大
家领悟不同启动软盘组引导不同的系统启动的原理,自动方法的精髓在于简便快捷的生成启
动软盘组和相关文件。大家一定要懂得原理再去使用方法,使用方法时回顾原理,这样才能
达到事半功倍的效果。不仅要知其然,还要知其所以然。 
DOS 工具和 WinPE 的整合只是一个题外话了,但是笔者琢磨了一下还是说一下为好,
笔者这里只提供了整合的方法,大家要根据实际情况灵活变通。

其他
关于 EasyBoot 启动界面背景图片色位的调节
很多朋友可能像笔者一样,对于 Photoshop(PS)和 ACDSee 的使用很少(笔者就是彻
底的 PS 盲……)
,所以对于如何将图片更改为 256 色或者 64K 色的确有些问题,下面笔者
将自己的笨法子拿出来,见笑了,如果大家有更好的方法,请及时通知笔者。
第一,256 色位图的生成
使用 ACDSee,笔者用的是 ACDSee3.1 全插件版,这个版本用的虽然还是 3.1 的老内核,
但是该内核启动和运行速度快,
该版本插件大多来自 ACDSee8.0 甚至有些来自于 ACDSee9.0 
版,所以 ACDSee3.1 全插件版是笔者个人认为挺好用的一个版本。
虽然使用 Windows 自带的画图工具也可以将图片更改为 256 色,但是对比 ACDSee 的
修改,ACDSee 修改的 256 色图片的保真程度要比 Windows 画图工具高不少。
使用  ACDSee  打开某图片后,单击“编辑”按钮,进入图片编辑界面,再单击菜单栏
的“颜色”à“256 色”
,256 色图片就生成了,保存时记得保存成 BMP 格式。 
ACDSee 还可以方便的帮助我们修改图片的大小,单击工具栏的“调整大小”就可以了。
第二,64K 色位图的生成
这个 64K 色位图的做法着实让笔者为难了一番,最后经过多方尝试还是做成了。
首先使用 PS 打开某图片,然后单击菜单栏“图像”à“模式”,选中“RGB 颜色”和
“16 位/通道”
。保存该图片,注意,此时的图片已经不能保存为 BMP 格式了,我们先选择 
PNG 格式来保存。
使用 ACDSee 来打开这个经过 PS 修改过的 PNG 格式的图片,另存为 BMP 格式。
经过这么一折腾,64K 色的图片才算做完了。
笔者的方法虽然笨,但是也达到了目的,请大家自己再摸索一下吧。

184 

第八章、XP 的封装与部署 
8.1 基础的系统封装与部署
部署工具 Deploy.cab,位于 XP 原版光盘 Support\Tools 文件夹下。Deploy.cab 中包含几
个可供管理员和 IT 专业人士用来将 XP 部署到组织中多台计算机上的工具。 
Deploy.cab 共包括如下工具:
安装管理器(Setupmgr.exe)
,用于自动生成应答文件,这些应答文件用于在系统部署过
程中自动的根据应答文件的内容来修改相应的系统信息,如系统序列号、时区、工作组等。
安装管理器可以用于生成 Sysprep.inf 中的自动应答部分。
系统准备工具,包含下列组件:Sysprep.exe、Setupcl.exe、Factory.exe、Sysprep.inf  和 
Winbom.ini。应用程序文件(Sysprep.exe、Setupcl.exe  和  Factory.exe)是必需的,而且它们
互相依存。 
Cvtarea.exe,一个用于在  FAT32  或  FAT  文件系统上创建文件并分析那些文件放置情
况的灵活工具。使用  Cvtarea  工具,您可以创建连续的文件并将其放在磁盘上的特定位置。 
Oformat.com,创建  FAT32  卷,该卷中的簇以某种优化方法取整,以便在以后将其转
换为  NTFS  文件系统格式。
部署工具可以将当前计算机(源计算机)中  Windows  操作系统重新封装,经过系统封
装的  Windows  操作系统由磁盘映像工具备份为系统映像,通过介质(例如光盘、网络)将
此系统映像传递到要进行系统部署的计算机(目标计算机),最后通过磁盘映像工具将此系
统盘映像恢复到目标计算机中。
获得了封装过的系统的计算机,在首次启动时会启用一段简单的图形化系统部署过程,
此过程仅需要 5~15 分钟左右,而不是通常系统安装所需要的 30~40 分钟。系统部署过程中
会执行重新搜寻并安装即插即用设备驱动、更改网络  ID、更改计算机名、重新注册组件等
工作,如果在系统准备时选中了“重新生成安全标示符(SID)
”,那么还会在目标计算机中
重新生成独一无二的 SID。系统部署过程结束后,Windows 操作系统也就在目标计算机中完
成了安装。基本流程如下:
源计算机  Windows  操作系统à系统封装à磁盘映像软件备份系统为系统映像à通过介
质转移系统映像à目标计算机à系统磁盘映像通过磁盘映像软件恢复到目标计算机à系统
部署à目标计算机系统安装完毕。
这种系统安装方法比传统的系统安装方法要简单快捷的多,而且系统在“转移”时会将
我们对系统的各个修改一并转移,例如我们在源计算机系统中安装了系统补丁、软件,在封
装并转移后,目标计算机的系统中也同时获得了我们源计算机中安装的系统补丁和软件。这
种方法极大的节约了我们在给大量计算机安装  Windows  操作系统时所需的时间,减少了各
类重复性的设置与软件安装工作。
在做系统封装之前,我们需要先安装好一个 XP 操作系统到源计算机,并且对这个 XP 
系统做我们所需的各种操作,例如安装系统补丁、安装常用软件、优化系统、更改设置等。
做完这些后我们即将开始系统封装工作了。
我们要进行系统封装之前,首先必须在 C 盘建立 Sysprep 文件夹,再将 Deploy.cab 解压
后得到的所有文件复制到 C:\Sysprep 下(其实也并非需要所有文件,一般情况下,我们只需
要 Sysprep.exe、Setupcl.exe  和  Factory.exe 就足够了,但如果您是第一次接触这项技术,建
议您还是将 Deploy.cab 解压后全部复制到 C:\Sysprep 下)

185 

为了让系统部署过程更加自动化,我们可以通过运行 Setupmgr.exe(安装管理器)来生
成一份自动应答文件。 
Setupmgr.exe 的功能其实很广泛,可以创建“无人值守安装”

“Sysprep 
安装”

“远程安装服务”的自动应答文件。Setupmgr.exe 是一个向导模式的软件,使用十分
方便。在 Setupmgr.exe 中我们选择“Sysprep 安装”,并在随后的各个关于系统设定的窗口中
根据您个人的需要一步步的操作就可以了。最后 Setupmgr.exe 会为我们生成一份符合我们个
人需求的 Sysprep.inf,系统部署过程中系统会根据 Sysprep.inf 中的各项设置来自动完成各种
原本需要用户手工操作完成的项目。
其 实 我 们 在 第 二 章 中 提 到 的 系 统 无 人 值 守 安 装 所 用 到 的  Winnt.sif  也 可 以 使 用 
Setupmgr.exe 来生成,只是为了让大家能更丰富的了解 Winnt.sif 的各个段和键的功能,笔者
才在第二章时对 Setupmgr.exe 只字未提。 
Winnt.sif 和 Sysprep.inf 中关于无人值守安装的部分
大多数还是相通的,大家可以根据在我们在第二章学到的  Winnt.sif  的写法来手工写一份 
Sysprep.inf。
无论您是以什么方法生成  Sysprep.inf  的,生成后请将  Sysprep.inf  也放置于  C:\Sysprep 
文件夹中。
下面我们该请上来我们的主角了,Sysprep.exe。运行 Sysprep.exe,如下图所示:

系统准备工具有三种准备模式,工厂模式、审核模式、重新封装模式。
工厂模式微软官方文档中的解释是“在不显示欢迎使用  Windows  或最小化安装的条件
下重新启动至启用网络状态。该选项可用于更新驱动程序、运行即插即用枚举、安装应用程
序、测试、使用客户数据配置计算机、或者在工厂环境中做其他配置更改。”这种模式一般
不被我们普通用户所使用。审核模式则是在工厂模式下测试安装时使用的。重新封装模式是
我们普通用户最常使用的系统封装模式。
下面还有几个可供选择的选项:
“不重置激活的宽限期”
,如果系统已经激活或系统本身是免激活的,建议选中这个选
项。如果系统是需要激活的,也就是说有 30 天的激活宽限期,系统封装时不选中这个选项,
激活宽限期的时钟不会被重置,而如果被选中该系统的激活宽限期会恢复到 30 天。但不要

186 

试图使用这种方法无限期的延长激活期限,因为一个系统只能重置激活的宽限期三次。
“使用最小化安装”
,也即使平时所说的 Mini 安装。有些 Windows 操作系统具有两种
部署模式,一种是  Windows  2000  安装时的最小化安装模式,另一种就是  Windows  XP  或 
Server 2003 安装时的“欢迎使用”安装模式。选中“使用最小化安装”
,如果操作系统允许,
则系统在部署时将采用最小化安装模式;若不选中“使用最小化安装”
,如果操作系统允许,
则系统在部署时将采用“欢迎使用”安装模式。Windows  2000  只具备最小化安装模式, 
Windows XP  家庭版只具备“欢迎使用”安装模式, 
Windows XP 专业版、 
Windows Server 2003 
同时具备最小化安装模式和“欢迎使用”安装模式。
“不重新产生安全标示符”,安全标示符(SID)是一台计算机独一无二的标示,系统
部署时会为正在部署的计算机生成一个特有的  SID。如果选中“不重新产生安全标示符”,
则全部进行系统部署的计算机的 SID 将与源计算机相同。 
SID 在计算机域等应用方面中很重
要,如果您将要部署的计算机要加入计算机域请一定不要选中这个选项。当然,如果您要部
署多台计算机并将这些计算机发放给个人用户,SID 就不显得那么重要了。生成安全标示符
会占用一定的系统部署时间。
“检测非即插即用硬件”
,选中这个选项计算机会在系统部署时检测非即插即用硬件,
一般情况下计算机会默认只检测即插即用硬件。选中这个选项会一定程度的增加系统部署的
时间。
“关机模式”
,这个会设定在完成系统部署后要执行的操作,有“关机”

“重新启动”、
“退出”三个选项。
所有这些选项根据您的需要设置好以后,单击“重新封装”按钮,片刻后系统就封装完
毕了。这时您可以使用 Ghost 等磁盘映像软件备份此时已经被封装好的系统,并分发到您所
要部署的计算机中。 

8.2  突破限制的系统封装与部署 
8.2.1  三个限制 
1>HAL 限制
上一节我们学习了微软提供的系统封装与部署方法。但是微软提供的这种系统封装与部
署方式是有条件限制的,那就是封装系统所用的源计算机的硬件抽象层(HAL)和目标计
算机的 HAL 必须相同。 
HAL,由硬件制造商提供的一种薄层软件,为操作系统高层隐藏或抽象硬件差异。通
过  HAL  提供的筛选器,不同类型的硬件看起来与操作系统其余的硬件很相似。这样允许操
作系统从一个硬件平台移植到另一个硬件平台。HAL  还提供了允许单个设备驱动器在所有
的平台上支持同样设备的例程。 
HAL  的不同可以将计算机分为很多类,例如  Standard、ACPI  Uniprocessor、ACPI 
Multiprocessor、MPS Uniprocessor、MPS Multiprocessor、ACPI 等等,如果 HAL 类型与计算
机实际类型不匹配,轻则出现不稳定,重则出现蓝屏当机的情况。
那么我们有什么方法可以突破源计算机与目标计算机在 HAL 方面必须相同的限制呢? 
2>SRS 限制
所谓 SRS,也就是 SATA & RAID & SCSI。当前计算机技术迅猛发展,磁盘已经从 IDE 
时代彻底过度到了 SATA 时代,各种 RAID 磁盘阵列设备也渐渐的出现在了普通用户的计算

187 

机中,也有很多用户开始拥有了 SCSI 磁盘。随着普通用户磁盘种类的多种多样,普通用户
的磁盘控制器类型也是花样繁多。
这里有一点笔者要重申一下(虽然在第四章就提到过)
,SRS 驱动并不是针对磁盘的,
而是针对磁盘控制器的。我们平时口中所说的“串口驱动”并不是“串口磁盘驱动”而是串
行磁盘控制器驱动,由于 SATA 磁盘、RAID 磁盘阵列、SCSI 磁盘都属于串行硬盘,所以串
行磁盘控制器驱动就是针对控制这些磁盘控制器的驱动,而并不是针对这些磁盘本身的驱
动。微软统称这些磁盘控制器为大容量磁盘控制器,下文中笔者将以微软的命名为准。
当今磁盘控制器的发展情况很明显的告诉我们,如果源计算机和目标计算机的磁盘控制
器类型不相同,那么很有可能造成系统部署的失败。
那我们究竟要这么做才能突破 SRS 的限制呢? 
3>驱动程序的限制
如果我们要在源计算机与目标计算机的硬件有区别的情况下实现系统部署,这也就意味
着我们必须要面对硬件几乎完全不相同的源计算机和目标计算机。那么,源计算机中所安装
的硬件设备驱动程序在目标计算机中很有可能是无用的,也很有可能会在目标计算机中造成
冲突和不稳定。
有些朋友可能会说了,那么我安装完系统不安装任何驱动程序就开始封装不就可以了?
其实不然,就拿 XP 来说,XP 系统本身也携带很多驱动,系统安装结束时已经有很多系统
自带的驱动被安装进了系统。所以,即使我们在安装完系统后不安装任何第三方驱动,也已
经有很多驱动已经被安装到系统中了。
那么,我们要这么样做才能干掉这些在目标计算机中可能已经没有用的驱动呢? 

8.2.2  突破 HAL 限制
微软在系统封装与部署中增加了  HAL 的限制,而最终突破  HAL 限制的方法也来自于
微软本身。突破 HAL 的方法最初被发现于 Windows Vista 的测试版:Windows Longhorn。
关于 HAL,Windows Longhorn 相对于 Windows XP 有几点很特别的不同: 
1>NTLDR  有一定区别,提供 DetectHAL 接口; 
2>BOOT.INI 中系统启动参数中支持“/DetectHAL”参数,以实现与 NTLDR 的结合; 
3>INF 文件夹中有了“DetectHAL.inf”
,其中包含各种计算机类型。
“DetectHAL”中文译为“探获硬件抽象层”,Windows  Longhorn  通过对  NTLDR、 
BOOT.INI  和  DetectHAL.inf  等的综合使用,实现了在系统启动时自动探测并更改硬件抽象
层的功能。
那么,我们该如何将 Windows Longhorn 的这个功能移植到 Windows XP 下呢? 
1>由准备封装的系统中提取 HAL 判断所需的文件(Windows XP SP2 在 SP2.CAB 中,
如果今后出现 XP SP3,这几个文件很有可能存在于 SP3.CAB 中)
: 
halacpi.dll、halapic.dll、halmps.dll、halaacpi.dll、halmacpi.dll、hal.dll、ntkrnlmp.exe、 
ntkrnlpa.exe、ntkrpamp.exe、ntoskrnl.exe 
提取完毕后将 hal.dll 更名为 halstnd.dll、ntoskrnl.exe 更名为 ntkrnlup.exe,并将这些文件
复制到准备封装的系统的%Windir%\System32\中; 
2>将 Longhorn 的“dtecthal.inf”复制到准备封装的系统的%Windir%\INF 中; 
3>去掉  C:\BOOT.INI  的只读属性,打开并在系统的启动参数中加上  /DETECTHAL  参
数,如: 
[boot loader]

188 

timeout=0 
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS 
[operating systems] 
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft  Windows  XP  Professional" 
/fastdetect /detecthal 
4>去掉当前 C:\  NTLDR 的只读属性,将 Longhorn 的 NTLDR 拷贝到 C:\,覆盖原有的 
NTLDR; 
5>删除准备封装的系统的 HAL 信息。删除注册表中以下键值,如果提示权限不足不能
删除,则可用 setacl.exe 这个命令行工具修改权限后再删除。 
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\ACPI_HAL 
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL 
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Enum\ACPI_HAL 
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Enum\Root\ACPI_HAL 
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Enum\ACPI_HAL 
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Enum\Root\ACPI_HAL 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI_HAL 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\ACPI_HAL 
完成上述  5  步,Windows  Longhorn  的硬件抽象层自动探测与更改功能就被移植到  XP 
中了。这样,我们要部署的系统就不再受微软的“源计算机与目标计算机必须相同  HAL”
的限制。由于提供 HAL 自动探测与更改功能的正是微软自己,所以这个  HAL 判断与更改
的成功率几乎 100%。
使用微软的方法突破了微软的限制,这是无数高手前辈努力探索与实践的结果! 

8.2.3  突破 SRS 限制
微软提供一种方法,可以在系统封装时将大容量磁盘控制器驱动集成进系统。注意,这
里集成进系统的大容量磁盘控制器驱动与我们在前几章中以文本模式集成进安装版系统中
的大容量磁盘控制器驱动功能类似,只用于让系统在启动时可以识别并发现硬盘,并不是 
Windows  环境下所使用的  PNP  模式的驱动(关于文本模式驱动和  PNP  模式驱动详见第四
章)

微软提供的大容量磁盘控制器集成方法是在 Sysrprep.inf 中添加[SysprepMassStorage]段
来完成的。[SysprepMassStorage]中键的语法是: 
hardware_id = path_to_device_inf 
hardware_id:代表硬件设备的  ID,用来唯一标示该硬件设备,此处用来标示大容量磁
盘控制器。 
path_to_device_inf:包含该硬件 ID 的驱动 inf 文件所在位置。
有了微软提供的这个方法,我们可以大胆的集成我们需要的大容量磁盘控制器驱动了。
在做集成之前,我们首先在我们的 Sysprep.inf 中添加“[SysprepMassStorage]”字段。 
1>  对于 XP 自带的大容量磁盘控制器驱动的处理 
XP 自带一部分大容量磁盘控制器驱动,别小瞧这些驱动,很多时候 XP 自带的这些驱
动还是有着很大作用的。要集成 XP 自带的驱动到系统,我们也必须得写[SysprepMassStorage] 
段的各个 hardware_id = path_to_device_inf。
将  XP  自 带 的 大 容 量 磁 盘 控 制 器 的  hardware_id  =  path_to_device_inf  列 表 写 进

189 

[SysprepMassStorage] 段 十 分 简 单 , 微 软 提 供 一 个 自 动 写 入 的 功 能 。 只 要 我 们 已 经 在 
Sysprep.inf  中添加了“[SysprepMassStorage]”字段,只要切换到命令提示符状态再切换到 
C:\Sysprep  目录下,运行“sysprep.exe  ­bmsd”,微软自带的所有大容量磁盘控制器驱动的 
hardware_id  =  path_to_device_inf  列 表 就 自 动 被 写 入 了  C:\Sysprep\Sysprep.inf  中 的 
[SysprepMassStorage]段下。大致如下(笔者只取一部分列表以举例,全部列表很长)
: 
[SysprepMassStorage] 
*pnp0a00=c:\windows\inf\machine.inf 
*pnp0a01=c:\windows\inf\machine.inf 
*pnp0a04=c:\windows\inf\machine.inf 
*pnp0a03=c:\windows\inf\machine.inf 
pci\cc_0604=c:\windows\inf\machine.inf 
pci\cc_0601=c:\windows\inf\machine.inf 
pci\cc_0602=c:\windows\inf\machine.inf 
pci\cc_0600=c:\windows\inf\machine.inf 
pci\cc_0500=c:\windows\inf\machine.inf 
root\ftdisk=c:\windows\inf\machine.inf 
root\swenum=c:\windows\inf\machine.inf 
root\update=c:\windows\inf\machine.inf 
root\mssmbios=c:\windows\inf\machine.inf 
root\dmio=c:\windows\inf\machine.inf 
lptenum\microsoftrawport958a=c:\windows\inf\machine.inf 
…… 
pcmcia\sony­memorystick(__4m)­e637=c:\windows\inf\mshdc.inf 
pcmcia\sony­memorystick(__8m)­9eb3=c:\windows\inf\mshdc.inf 
pcmcia\sony­memorystick(_16m)­d04d=c:\windows\inf\mshdc.inf 
pcmcia\sony­memorystick(_32m)­1766=c:\windows\inf\mshdc.inf 
pcmcia\sony­memorystick(_64m)­8c2c=c:\windows\inf\mshdc.inf 
pci\ven_1055&dev_9130=c:\windows\inf\mshdc.inf 
pcmcia\micron­mtcf____­392d=c:\windows\inf\mshdc.inf 
pci\ven_1179&dev_0105=c:\windows\inf\mshdc.inf 
看完这个列表后,大家是否对 hardware_id  =  path_to_device_inf 的概念有了更深入的理
解呢?例如“pci\cc_0604=c:\windows\inf\machine.inf”,其中 pci\cc_0604 就是一个大容量磁
盘控制器的硬件 ID,而“c:\windows\inf\machine.inf”就是包含这个硬件驱动的 inf 文件所在
位置。
要注意的是,
“sysprep.exe  –bmsd”命令只是用来自动生成[SysprepMassStorage]段下的
关于微软大容量磁盘控制器的 hardware_id  =  path_to_device_inf 列表,并不是执行将大容量
磁盘控制器驱动集成进系统。 
2>  对于第三方的大容量磁盘控制器驱动的处理
第三方的大容量磁盘控制器驱动的处理方法与 XP 自带的没什么区别,只是这次我们必
须得自己写[SysprepMassStorage]段下的 hardware_id = path_to_device_inf 列表了。
前面我们提到了  DPS,DPS  收集了大量的第三方大容量磁盘控制器驱动,这些驱动正
好在这里为我们所用。下载一个 DPS 的 MassStoreage 驱动包,解压,提取其中所需的部分,
更改文件夹名,放置于任意位置,例如笔者放置于 E:\M 下。

190 

由于第三方大容量磁盘控制器驱动有很多, 
hardware_id = path_to_device_inf 列表也十分
的长,如果将所有 DPS 的 MassStoreage 驱动包中的大容量磁盘控制器驱动都以 hardware_id 
=  path_to_device_inf 列表形式写出来,大概有微软自带的大容量磁盘控制器 hardware_id  = 
path_to_device_inf 列表的 5~6 倍长,笔者仅提供其中的一小部分作为例子供大家参考: 
PCI\VEN_1022&DEV_7409=E:\M\AM\AMDEIDE.INF 
PCI\VEN_1022&DEV_7411=E:\M\AM\AMDEIDE.INF 
PCI\VEN_1022&DEV_7441=E:\M\AM\AMDEIDE.INF 
PCI\VEN_1022&DEV_7469=E:\M\AM\AMDEIDE.INF 
AMD_Primary_IDE_Channel=E:\M\AM\AMDEIDE.INF 
AMD_Secondary_IDE_Channel=E:\M\AM\AMDEIDE.INF 
PCI\VEN_1002&DEV_4349=E:\M\AT\ATIIDE.INF 
PCI\VEN_10DE&DEV_0065=E:\M\N\TM\NVATABUS.INF 
PCI\VEN_10DE&DEV_008E&REV_A2=E:\M\N\TM\NVATABUS.INF 
PCI\VEN_10DE&DEV_008E&REV_A3=E:\M\N\TM\NVATABUS.INF 
PCI\VEN_10DE&DEV_0085=E:\M\N\TM\NVATABUS.INF 
PCI\VEN_10DE&DEV_00D5&REV_A2=E:\M\N\TM\NVATABUS.INF 
PCI\VEN_10DE&DEV_00D5&REV_F2=E:\M\N\TM\NVATABUS.INF 
PCI\VEN_10DE&DEV_00D5&REV_A4=E:\M\N\TM\NVATABUS.INF 
PCI\VEN_10DE&DEV_00D5&REV_F4=E:\M\N\TM\NVATABUS.INF 
PCI\VEN_10DE&DEV_00D5&REV_A5=E:\M\N\TM\NVATABUS.INF 
PCI\VEN_10DE&DEV_00D5&REV_F5=E:\M\N\TM\NVATABUS.INF 
PCI\VEN_10DE&DEV_00D5&REV_A6=E:\M\N\TM\NVATABUS.INF 
PCI\VEN_10DE&DEV_00D5&REV_F6=E:\M\N\TM\NVATABUS.INF 
PCI\VEN_10DE&DEV_00E5=E:\M\N\TM\NVATABUS.INF 
PCI\VEN_10DE&DEV_00EE=E:\M\N\TM\NVATABUS.INF 
PCI\VEN_10DE&DEV_00E3=E:\M\N\TM\NVATABUS.INF 
…… 
PCI\VEN_1039&DEV_0181=E:\M\SI\1\SISRaid1.INF 
PCI\VEN_1039&DEV_0180=E:\M\SI\2\SISRAID.INF 
PCI\VEN_1039&DEV_0182=E:\M\SI\3\SISRaid2.INF 
PCI\VEN_1039&DEV_1184=E:\M\SI\4\SISRAID4.INF 
PCI\VEN_1039&DEV_1185=E:\M\SI\4\SISRAID4.INF 
PCI\VEN_1106&DEV_3349&CC_0104=E:\M\V\1\VIAMRAID.INF 
PCI\VEN_1106&DEV_6287&CC_0106=E:\M\V\1\VIAMRAID.INF 
PCI\VEN_1106&DEV_0591&CC_0104=E:\M\V\1\VIAMRAID.INF 
PCI\VEN_1106&DEV_3349&CC_0101=E:\M\V\3\VMINIIDE.INF 
PCI\VEN_1106&DEV_5287&CC_0101=E:\M\V\3\VMINIIDE.INF 
PCI\VEN_1106&DEV_3164&CC_0101=E:\M\V\3\VMINIIDE.INF 
PCI\VEN_1106&DEV_0581&CC_0101=E:\M\V\3\VMINIIDE.INF 
PCI\VEN_1106&DEV_5324&CC_0101=E:\M\V\3\VMINIIDE.INF 
PCI\VEN_104B&DEV_1040=E:\M\VM\VMSCSI.INF 
通过笔者提供的列表大家可以看到,第三方大容量磁盘控制器驱动的  hardware_id  = 
path_to_device_inf 列表写法其实和微软自带的一样,同样的语法,都是“硬件 ID=驱动 INF”

不过读到这里大家可能会有两个疑问。

191 

第一,不是封装好后只备份 C 盘吗,将大容量磁盘控制器驱动放在其他盘里可以吗?
很多读者看到笔者将要集成的驱动放在  E  盘里就开始担心这个问题,其实不必担心,
这所有的驱动会在系统封装时自动复制到  C  盘中,系统封装结束这些驱动中系统所需的部
分就都复制到 C 盘里去了,E 盘的这些驱动就不再有什么用了。
第二,笔者是怎么得到这些第三方大容量磁盘控制器的硬件 ID 的?
这个其实没什么好方法,笔者是一个驱动 INF 一个驱动 INF 看的。寻找出一个 INF 文
件中所包含的所有硬件 ID,写出一个 hardware_id 列表,再在每个 hardware_id 后面写上这
个  INF  的位置。这是一个十分艰巨的工程,需要操作者有十足的毅力与耐心。笔者曾经尝
试把所有 DPS 的大容量磁盘控制器驱动 hardware_id = path_to_device_inf 列表写出来,整整
花费了将近 2 小时。
说到这里可能有读者要来索要笔者我总结出来的 hardware_id  =  path_to_device_inf 列表
了,其实这个列表意义不大,DPS  驱动会时长更新,每次都要根据新的驱动写出新列表,
从而才能集成最新的大容量磁盘控制器驱动到系统。所以,读者们还是学会方法自己来写吧。
如果大家也是使用的 DPS 的驱动的话,有一个稍微简单一点的方法来写这个列表。 
DPS 
在 大 容 量 磁 盘 控 制 器 驱 动 包 中 包 含 了 一 个  INI  文 件 , 名 为 
DriverPack_MassStorage_wnt5_x86­32.ini,打开这个 INI 文件。我提取一段给大家看一下: 
[3] 
ms_count=1 
ms_1_deviceName="AMCC 3ware 9000/9500 Series SATA RAID Controller" 
ms_1_tag="3WAREDRV" 
ms_1_sysFile="3WAREDRV.SYS" 
ms_1_hwids="PCI\VEN_13C1&DEV_1002&SUBSYS_100213C1,PCI\VEN_13C1&DEV_ 
1003&SUBSYS_100313C1,PCI\VEN_13C1&DEV_1004&SUBSYS_100413C1,PCI\VEN_13C1 
&DEV_1004&SUBSYS_100513C1" 
ms_1_isBusExtender=false 
其中“[3]”对应着驱动包中的“3”文件夹,根据说明“3”文件夹中是关于  3ware  的
大容量磁盘控制器驱动。
随后我们可以看到有一行: 
ms_1_hwids="PCI\VEN_13C1&DEV_1002&SUBSYS_100213C1,PCI\VEN_13C1&DEV_ 
1003&SUBSYS_100313C1,PCI\VEN_13C1&DEV_1004&SUBSYS_100413C1,PCI\VEN_13C1 
&DEV_1004&SUBSYS_100513C1" 
大家可以很敏感的看到一个词“hwids”,对了,这个键的键值就是“3”文件夹中所包
含驱动对应的所有硬件 ID 了。随后我们去“3”文件夹中去查看 INF 文件,可见如上硬件 
ID 都包含在“3WAREDRV.inf”中,那么我们就可以写下如下 hardware_id = path_to_device_inf 
列表:
PCI\VEN_13C1&DEV_1002&SUBSYS_100213C1=E:\M\3\3WAREDRV.inf 
PCI\VEN_13C1&DEV_1003&SUBSYS_100313C1=E:\M\3\3WAREDRV.inf 
PCI\VEN_13C1&DEV_1004&SUBSYS_100413C1=E:\M\3\3WAREDRV.inf 
PCI\VEN_13C1&DEV_1004&SUBSYS_100513C1=E:\M\3\3WAREDRV.inf 
总结一下,我们先由 DPS 的 DriverPack_MassStorage_wnt5_x86­32.ini 文件读到某文件
夹下包含某些硬件 ID,再根据这些硬件 ID 去段名所代表的文件夹中查找 INF 文件,查找到
包含这些硬件 ID 的 INF 后,写出 hardware_id = path_to_device_inf 列表。
根据这个方法,只要时间和精力足够,我们可以写出整个  DPS  大容量磁盘控制器驱动
的 hardware_id = path_to_device_inf 列表。

192 

OK , 现 在 我 们  XP  自 带 的 和 第 三 方 的 大 容 量 磁 盘 控 制 器 驱 动 的  hardware_id  = 
path_to_device_inf 列表都写完了,这样的话在执行系统封装时 Sysprep.exe 会把我们指定的
这所有大容量磁盘控制器驱动复制到  C  盘,并自动更改注册表中相应键值,自动增加大容
量磁盘控制器驱动服务等。
有一点要提出的是,第三方的大容量磁盘控制器驱动某些时候会出现硬件 ID 冲突的情
况,出现冲突时会提示“试图更改注册表时出错”等信息;某些时候由于第三方的大容量磁
盘控制器驱动本身的不完全还可能会提示缺少某某驱动文件的情况。这些情况在集成第三方
大容量磁盘控制器驱动时时常出现,请大家要注意排查。
由于我们集成了大量的大容量磁盘控制器驱动,封装时会进行大量驱动复制、注册表修
改、服务增添等工作,封装时间会相当的长。笔者曾经尝试过集成所有的 XP 自带的和第三
方的大容量磁盘控制器驱动到系统,系统封装时间在 40~50 分钟左右。还好这是系统封装时
间,不是系统部署时间。
不过如果经常做这种四五十分钟的封装也足够让人崩溃的,还好,笔者论坛的  realhyg 
在经过  N  多次尝试后,使用注册表与文件监控软件提取了这四五十分钟内所修改的所有注
册表与文件,经过多次修正与测试后做成了一个  SRS  驱动包和一个  SRS.reg 驱动注册表。
使用时只需要在封装结束后将 SRS 驱动包复制到 C:\Windows\System32 下并导入 SRS.reg 就
完全替代了这四五十分钟的工作。他的这种方法其实就是微软官方封装方法的快速实现。 
realhyg  的研究让四五十分钟的封装变成了四五秒的事,方便了太多人的封装,而且他
又对这份驱动与注册表文件做了合理的修正与添加,他整理的  SRS  驱动兼容性极高,下载
地址:http://www.freeskycd.com.cn/bbs/Show.asp?id=903&BoardID=15&TB=1。特此对他表示
由衷的感谢!
额外说一点。
在 Sysrprep.inf 中写好了[SysprepMassStorage]段,当我们在使用 Sysprep.exe 执行完封装
后,会在 Sysrprep.inf 中自动生成[SysprepCleanup]段,这段的内容大概如下: 
[SysprepCleanup] 
Service=3wareDrv 
Service=3waregsm 
Service=aec6210 
Service=aec6260 
Service=aec6280 
Service=aec6290 
Service=AEC671X 
…… 
Service=cda1000 
Service=dontgo 
Service=SiFilter 
Service=SiRemFil 
Service=xfilt 
Service=HPTPRO 
Service=HPTPROr 
这个段又是做什么的呢?
由于我们在封装时向系统内集成了大量的大容量磁盘控制器驱动,而我们要部署的目标

193 

计算机可能只会使用其中的某几个,那么剩余的这些无用的大容量磁盘控制器驱动会有可能
造成驱动混乱问题。既然集成驱动的方法来自微软,那么解决这个问题的方法也肯定来自微
软。Sysprep.exe  还有一个“­clean”参数,在系统部署结束前运行“Sysprep.exe  ­clean”就
可以禁用所有本机用不到的大容量控制器驱动了。
关于如何在部署结束前调用“Sysprep.exe ­clean”
,大家可以先开动自己的脑筋,笔者将
在下一章中为大家详细解答。 

8.2.4  对系统驱动程序的处理
我们的目标是实现系统的万能部署,这也就意味着我们很可能遇到目标计算机与源计算
机完全不一样的情况。这种情况下源计算机中的大多驱动程序将变得无效,某些还有可能会
造成驱动冲突,这是我们所不愿意看到的。某些时候,还会由于我们源计算机中某些驱动的
未卸载,造成部署到目标计算机后出现本不存在的“幽灵硬件”。
对于驱动程序,我们要卸载绝大部分,并且更改其中某些硬件的驱动程序。
右键单击“我的电脑”à“属性”à“硬件”选项卡à“设备管理器”,打开设备管理
器界面。 
1>更改计算机类型
展开“计算机”选项à右键单击当前的计算机类型à属性à“驱动程序”选项卡à单击
“更新驱动程序”按钮à硬件更新向导界面à选中“从列表或指定位置安装(高级)
”选项,
单击“下一步”按钮à选中“不要搜索。我要自己选择要安装的驱动程序”选项,单击“下
一步”按钮à在驱动类型中选中“Standard PC”,单击“下一步”按钮à稍后,新驱动安装
完毕。
如果系统提醒需要重新启动,请单击“否”,不要重新启动计算机。
这时计算机类型已经被成功的更改为“Standard PC”

“Standard PC”是一种标准的计算
机类型,无论什么类型的计算机都可以使用“Standard PC”计算机类型,且可以启动和运行,
但是运行效率就不如和计算机真实情况匹配的计算机类型了,而且使用 Standard PC 计算机
类型很有可能造成计算机不能正常关机。
那为什么这样我们还要将计算机类型更改成这个呢?Standard  PC 的精髓所在是无论什
么计算机用这个都能启动,
而我们已经在前面将系统改进为可以自动搜索并更改 HAL 的了,
也就是说计算机只要能将计算机启动一次,HAL  自动判断就会自动将计算机类型更改为与
当前计算机实际情况相匹配的了。 
2>更改 IDE ATA/ATAPI 控制器
展开“IDE ATA/ATAPI 控制器”选项à右键单击当前磁盘控制器à属性à“驱动程序”
选项卡à单击“更新驱动程序”按钮à硬件更新向导界面à选中“从列表或指定位置安装(高
级)
”选项,单击“下一步”按钮à选中“不要搜索,我要自己选择要安装的驱动程序”选
项,单击“下一步”按钮à在驱动类型中选中“标准双通道  PCI IDE  控制器”,单击“下一
步”按钮à稍后,新驱动安装完毕。
如果系统提醒需要重新启动,请单击“否”,不要重新启动计算机。
这时计算机类型已经被成功的更改为“标准双通道  PCI IDE  控制器”

“标准双通道  PCI 
IDE  控制器”也是一种普适型磁盘控制器,任何 IDE ATA/ATAPI 控制器都可以工作在这种
模式下。也就是说,即使出现暂时不匹配的 IDE  ATA/ATAPI 控制器也不会造成蓝屏当机事
故。而由于系统部署过程中会自动重新搜寻硬件并安装驱动,所以和“Standard PC”一样,
只要能完成部署过程,IDE ATA/ATAPI 控制器就会被自动更改为与当前计算机相匹配的。
有些朋友可能会问,现在普遍都是 SATA 硬盘了,IDE 的这个更改的意义大吗?就像我

194 

在第四章中说过的,磁盘控制器与磁盘是两种概念,磁盘工作于何种模式很大程度上取决于
磁盘控制器工作于何种模式,现在很多计算机虽然都在使用串行磁盘(如 SATA 硬盘)
,但
是主板上的磁盘控制器为了取得更大的兼容性,依然工作于并行模式下。这也就是说,虽然
磁盘是串行磁盘,但是仍旧工作于并行模式下。所以,更改 IDE  ATA/ATAPI 控制器为“标
准双通道  PCI IDE  控制器”仍旧是必要的。 
3>卸载设备驱动
卸载设备驱动很简单,右键单击一下设备,随后单击“卸载”就可以了。不过卸载还是
有些小讲究的,根据前辈们的经验,卸载驱动大致要如下操作:
第一,避开系统设备,根据前辈们的经验,又根据很多朋友们的实践表明,系统设备不
需要卸载,不会影响系统兼容性与稳定性。
第二,避开鼠标键盘设备,这个不必卸载了,卸载了会影响此后的操作,而且也从来没
出现过换个鼠标键盘而造成系统当机蓝屏的。
第三,避开刚才修改的 IDE 控制器和计算机类型,做了 1>、2>的修改后无需再将其卸
载。
第四,卸载剩下的全部驱动,一个不剩的全部卸载,包括硬盘、CPU  这种设备。当遇
到提示卸载某设备时需要重启,不要理会,单击“否”按钮不要重启。 
OK,做完以上三步后,源计算机的驱动就已经都被处理了,在系统被部署到目标计算
机时最大程度的减少了由于驱动问题而造成蓝屏当机,并很大程度的减少了“幽灵硬件”的
产生。
做完了 8.2.2~8.2.4 这三小节的工作后,我们就可以开始封装系统了。这时我们所封装
的系统已经具备了万能部署的特性了,也就是说无论源计算机与目标计算机的硬件有多大差
别,理论上都可以完成成功的部署。
单击 Sysprep.exe 上的“重新封装”按钮,开始封装吧! 

8.3  总结
本章讲述了系统封装的基本流程。
第一节中我们了解了最基本的封装方法,知道了什么是封装、为什么要封装、什么是部
署、部署有什么限制。了解了这些后,让我们对系统的封装与部署有了最基本的概念,也知
道了系统封装与部署的优势与所受的限制。
第二节中,我们围绕着如何实现不同硬件的计算机如何完成封装与部署来做各种操作。
先后,我们突破了  HAL、SRS、硬件驱动三大限制,真正的实现了不受任何限制的万能部
署。这三大限制的突破,让系统封装与部署技术彻底解脱了枷锁,成为了一种新型的系统安
装技术。
本章虽短,但注重讲求原理,注重告诉大家为什么要做这些,理解原理,才能更好的把
握一项技术,才能有所创新和提高!
大家在阅读本章时切勿硬性的模仿,所谓原理,都是一些需要在读透彻之后才能开始实
践的东西,请大家仔细阅读本章中所讲述的原理,所有的这些原理看似简单,但是这些原理
都是经过了无数高人前辈的摸索、无数爱好者的测试和使用才总结出来的。
认真看待这些基础和原理,才能理解系统封装与部署技术!

195 

第九章、XP 封装与部署的自动化实现 
9.1  封装过程自动化控制
经过上一章的学习,我们已经对封装一个万能部署的系统有了足够的认识。实现万能部
署的方法并不复杂,但是比较繁琐,如果我们经常要封装系统,难免因为一时不慎疏漏掉什
么。而且在当今这个做什么事情都讲究自动化、高效化的时代,经常手工的做这么多封装准
备工作的确是不太有效率的。
那我们怎么样才能实现封装的完全自动化呢?笔者稍稍总结了一下,我们在封装一个万
能部署系统时至少要做如下几件事: 
1、自动更改计算机模式 
2、自动更改 IDE 控制器 
3、自动卸载驱动 
4、自动将系统进化为能够自动判断 HAL 的 
5、自动运行 Sysprep.exe 封装系统 
6、自动导入 SRS 驱动和注册表
以上六条其实后三条比较好实现,第三条笔者在网络中也找到了相应的方法,但是第一
第二两条笔者苦苦探寻了许久也不得方法。笔者为得到前两条自动修改的方法,询问过某些
高人,但是高人们敷衍的回答彻底激怒了笔者(当时也的确是年轻气盛),笔者经过几小时
的努力与尝试,最终也写出了自动实现前两条操作的方法。
下面,我将自动实现这六件事的方法分享给大家。不过在此之前笔者有几句话要说:
我并不能保证这些方法是最好的,但是可以保证这些方法是可行并可用的。我知道很多
高人有比我这些方法更先进、更高明的方法,或者说我使用的这些方法可能是被某些高人所
嘲笑的,但是我依然要使用这些方法。
很大程度上来说,这些方法已经不只是方法,而是一种精神,一种敢于探索敢于尝试的
精神。笔者我用这种精神捍卫了和笔者同属于菜鸟级的所有朋友们的尊严。某些高人宁愿让
更高等的方法烂在自己手里也不愿意公布,于其求助于他们,为什么不自己试一试?
或许我们不是高人,或许我们的方法也比不上高人们的强大,但是低三下四求来的“高
级方法”与自己通过探索探知以及不懈的努力换来的“一般方法”
,哪个更有意义呢?
笔者系统通过本章的学习,能让所有的朋友不仅能学到方法,更能学到这种敢于尝试敢
于挑战权威的精神,这是所有和笔者一样属于菜鸟级的朋友们所必须的精神! 

9.1.1 DevCon.exe 
DevCon.exe,是一款由微软提供的用于管理当前计算机硬件设备的命令行工具,功能十
分多十分强大。 
DevCon.exe 的帮助文档: 
devcon.exe [­r] [­m:\\<machine>] <command> [<arg>...] 
­r  如果指定它,在命令完成后若需要则重新启动计算机。 
<machine>  是目标计算机的名称。 
<command>  是将要执行的命令(如下所示)
。 
<arg>...  是命令需要的一个或多个参数。

196 

要获取关于某一特定命令的帮助,请键入:devcon.exe help <command> 
Classfilter,允许修改类别筛选程序。 
Classes,列出所有设备安装类别。 
Disable,禁用与指定的硬件或实例  ID  匹配的设备。 
Driverfiles,列出针对设备安装的驱动程序文件。 
Drivernodes,列出设备的所有驱动程序节点。 
Enable,启用与指定的硬件或实例  ID  匹配的设备。 
Find,查找与指定的硬件或实例  ID  匹配的设备。 
Findall,查找设备,包括那些未显示的设备。 
Help,显示此信息。 
Hwids,列出设备的硬件  ID。 
Install,手动安装设备。 
Listclass,列出某一安装类别的所有设备。 
Reboot,重新启动本地计算机。 
Remove,删除与特定的硬件或实例  ID  匹配的设备。 
Rescan,扫描以发现新的硬件。 
Resources,列出设备的硬件资源。 
Restart,重新启动与特定的硬件或实例  ID  匹配的设备。 
Stack,列出预期的设备驱动程序堆栈。 
Status,列出设备的运行状态。 
Update,手动更新设备。 
UpdateNI,手动更新设备,无用户提示 
SetHwID,添加、删除和更改根枚举设备的硬件  ID  的顺序。
更多关于 DevCon.exe 的信息请参阅微软官方帮助与支持信息: 
http://support.microsoft.com/kb/311272/zh­cn 
DevCon.exe 可以在命令行模式下完全替代“设备管理器”,而且其很多功能比设备管理
器更强大。不过不要被这么多的命令参数看花眼了,如果我们只做简单的工作,并不需要使
用这其中的全部参数。
有了 DevCon.exe,我们就能做很多事了 

9.1.2  自动更改计算机模式
计算机模式有很多,例如: 
ACPI Multiprocessor PC 
ACPI Uniprocessor PC 
Advance Configuartion and Power Interface (ACPI) PC 
MPS Multiprocessor PC 
MPS Uniprocessor PC 
Standard PC 
在上一章我和大家分享过,封装前需要将计算机模式调整为 Standard  PC,从而让系统
在部署时具有最大的兼容性、由于我们已经将系统修正为可以自动判定并修改 HAL 的,只
要封装过的系统在目标计算机中能够启动,那么系统的计算机模式马上会更改为与目标计算
机实际模式相匹配的。
其实各种计算机模式也是驱动程序,那么我们就有了一个想法,如果可以让计算机强行

197 

安装 Standard PC 的驱动就可以了,但这个过程怎么来自动实现呢?
一下是实现自动更改计算机模式的 AU3 脚本,运行该脚本前需要将 DevCon.exe 放置于 
Windows 文件夹或者 Windows\System32 文件夹内。 
#NoTrayIcon 
;提升 Standard PC 电源管理的搜寻优先级,降低其他的 
Runwait("devcon 
sethwid 
@ROOT\ACPI_HAL\0000 
:= 
+E_ISA_UP !ACPIPIC_UP !ACPIAPIC_UP !ACPIAPIC_MP !MPS_UP !MPS_MP","",@SW_H 
IDE) 
;搜寻电源管理并更新,由于 Standard PC 的优先级已被提升,所以这个会首先被搜寻到 
Runwait("devcon update "&@windowsdir&"\inf\hal.inf E_ISA_UP","",@SW_HIDE) 
笔者已经在脚本中相应的命令行中添加了注释,请大家参阅注释对照源码。
总体来说,这个脚本的思路是先提升 Standard PC 在所有计算机模式中的优先级,这样
才能在自动安装计算机模式驱动时首先搜索到 Standard PC 并安装。
将此脚本保存为 StandardPC.au3,编译为 StandardPC.exe 保存起来。 

9.1.3  自动更改 IDE 控制器
在驱动 INF 文件中,硬件 ID 与硬件驱动处于对应关系。例如 A 设备对应 A 驱动,B 
设备对应 B 驱动,C 设备对应 C 驱动,那么在驱动 INF 文件中有如下对应关系: 
A 设备=A 驱动 
B 设备=B 驱动 
C 设备=C 驱动
这也就规定了,如果我们要搜寻 A 设备的驱动并安装,那么系统会自动搜寻到 A 驱动
安装给 A 设备,B、C 设备也是同理。绝不会出现将 B 驱动安装给 A 设备等情况。
但是如果我们有意想让系统安装与设备本不匹配的驱动怎么办?例如我们想让  A  设备
安装 C 驱动,怎么办?大家可能很快会想到,更改驱动 INF 列表,例如: 
A 设备=C 驱动 
B 设备=B 驱动 
C 设备=C 驱动
如果能够这样做完后,如果我们为 A 设备搜索驱动,系统会自动将 C 驱动安装给 A 设
备。
读到这里很多朋友都明白我要做什么了,如果我们想将“标准双通道 PCI IDE 控制器”
的驱动安装给当前的 IDE 控制器,那么我们就要将当前 IDE 控制器在驱动 INF 中所对应的
驱动更换为“标准双通道 PCI IDE 控制器”的驱动,再执行驱动自动搜索与安装就可以了。
就像将:
当前 IDE 设备=当前 IDE 设备的驱动
标准双通道 PCI IDE 控制器=标准双通道 PCI IDE 控制器的驱动
更改为:
当前 IDE 设备=标准双通道 PCI IDE 控制器的驱动
标准双通道 PCI IDE 控制器=标准双通道 PCI IDE 控制器的驱动
然后自动搜索当前 IDE 设备的驱动,系统就会为其安装标准双通道 PCI  IDE 控制器的
驱动了。

198 

自动更改 IDE 控制器为“标准双通道 PCI IDE 控制器”的 AU3 源码如下,运行该脚本
前需要将 DevCon.exe 放置于 Windows 文件夹或者 Windows\System32 文件夹内。 
#NoTrayIcon 
Dim 
$Class,$Dev,$KeyValue,$i,$j,$Line,$LineNum,$LineNum2,$Line2,$Len,$Str1,$Str2,$FileHandle 
,$FileHandle2 
;主键,该主键下有若干子键 
$Class="HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A­E325­11CE­BFC1 
­08002BE10318}\" 
;几个计数用的整数 
$i=1 
$j=1 
;文件行号 
$LineNum=1 
$LineNum2=1 
;Windows 文件夹下或者 Windows\System32 文件夹下是否有 devcon.exe,若没有则退出
程序 
If 
Not 
(FileExists(@WindowsDir&"\devcon.exe") 
Or 
FileExists(@WindowsDir&"\system32\devcon.exe")) Then Exit 
;Windows\Inf 文件夹下是否有 mshdc.inf,若有则将 mshdc.inf 备份为 mshdc.inf.bak,否
则退出程序 
If FileExists(@WindowsDir&"\inf\mshdc.inf") Then 
FileMove(@WindowsDir&"\inf\mshdc.inf",@WindowsDir&"\inf\mshdc.inf.bak",1) 
Else 
Exit 
EndIf 
;初始条件满足,准备开始更改 IDE 控制器 
While(1) 
;读取主键下的子键, 
$Dev=RegEnumKey($Class,$i) 
;若所有子键读取完毕,则退出程序 
If @error=­1 Then 
ExitLoop 
EndIf 
;读取该子键下 MatchingDeviceId 的键值,该键值对应着当前 IDE 控制器,并把此 
IDE 控制器的名称存入$KeyValue 中 
$KeyValue=RegRead($Class&$Dev,"MatchingDeviceId") 
;如果该键值为 pci\cc_0101,即 IDE 控制器已为标准双通道 PCI IDE 控制器,则无
需执行修改,反之则准备开始修改 
If $KeyValue<>"pci\cc_0101" Then 
While(1) 
;以读取模式打开 Windows\Inf\mshdc.inf.bak 文件 
$FileHandle=FileOpen(@WindowsDir&"\inf\mshdc.inf.bak",0)

199 

;读取第$LineNum 行,并保存到$Line 
$Line=FileReadLine(@WindowsDir&"\inf\mshdc.inf.bak",$LineNum) 
;文件若读取完毕则关闭文件并退出循环,文件若未读取完毕则只关闭文
件 
If @error=­1 Then 
FileClose($FileHandle) 
ExitLoop 
Else 
FileClose($FileHandle) 
EndIf 
;$KeyValue 中 IDE 控制器的名称的长度 
$Len=StringLen($KeyValue) 
;读取$Line 中第 2 到$Len 个字符,并保存在$Str1 中 
$Str1=StringMid($Line,2,$Len) 
;MsgBox(1,"test",$Str1&"      "&$KeyValue) 
;$Line 这行中包含$KeyValue 中 IDE 控制器的名称,并在正确的位置上,
则开始修改$Line 这行的内容 
if $Str1=$KeyValue Then 
;记录$Line 这行中=所在的位置 
While(1  ) 
If StringMid($Line,$j,1)="=" Then 
;MsgBox(1,"test",StringMid($Line,$j,1)) 
ExitLoop 
Else 
;MsgBox(1,"test",StringMid($Line,$j,1)) 
$j=$j+1 
EndIf 
WEnd 
;Msgbox(1,"test","While done !") 
;修改这行为$KeyValue 中 IDE 控制器的名称 加 =  PCI\CC_0101  的
组合 
$Str2=StringMid($Line,1,$j) 
$Str2=$Str2&"pciide_Inst,,PCI\CC_0101" 
;MsgBox(1,"test",$Str2) 
;以读取模式打开 Windows\Inf\mshdc.inf.bak 文件 
$FileHandle=FileOpen(@WindowsDir&"\inf\mshdc.inf.bak",0) 
;以写入模式打开 Windows\Inf\mshdc.inf 文件 
$FileHandle2=FileOpen(@WindowsDir&"\inf\mshdc.inf",2) 
;读取  Windows\inf\mshdc.inf.bak,创建  Windows\inf\mshdc.inf,用刚
修改的那一行替换原有的那一行 
While(1) 
$Line2=FileReadLine(@WindowsDir&"\inf\mshdc.inf.bak",$LineNum2) 
;MsgBox(1,"test",$LineNum&" "&$LineNum2&" "&$Line2)

200 

If @error=­1 Then ExitLoop 
If $LineNum2=$LineNum Then 
FileWriteLine(@WindowsDir&"\inf\mshdc.inf",$Str2) 
Else 
FileWriteLine(@WindowsDir&"\inf\mshdc.inf",$Line2) 
EndIf 
$LineNum2=$LineNum2+1 
WEnd 
;关闭文件 
FileClose($FileHandle) 
FileClose($FileHandle2) 
;MsgBox(1,"test","mshdc.inf is creat successful") 
;使用 devcon 来更新当前 IDE 控制器,由于当前 IDE 控制器的驱动以
被更改了指向,指向标准双通道 PCI IDE 控制器的驱动, 
;所以在更新当前 IDE 控制器驱动时,会寻找标准双通道 PCI  IDE 控
制器的驱动来替代当前的 IDE 控制器驱动 
;MsgBox(1,"test","cmd 
/c 
devcon 
update 
"&@WindowsDir&"\inf\mshdc.inf "&""""&$KeyValue&"""") 
Runwait("cmd  /c  devcon  update  "&@WindowsDir&"\inf\mshdc.inf 
"&""""&$KeyValue&"""","",@SW_HIDE) 
;变更驱动完毕,退出本次本 IDE 控制器的驱动变更,继续查找并更
改剩余的 IDE 控制器 
$LineNum=1 
ExitLoop 
EndIf 
$LineNum=$LineNum+1 
WEnd 
EndIf 
$i=$i+1 
WEnd 
;所有 IDE 控制器修改完毕,替换开始备份的原始的 mshdc.inf.bak 到当前的 mshdc.inf 
;Windows\Inf 文件夹下是否有 mshdc.inf.bak,则替换回去,没有则不替换 
If FileExists(@WindowsDir&"\inf\mshdc.inf.bak") Then 
FileMove(@WindowsDir&"\inf\mshdc.inf.bak",@WindowsDir&"\inf\mshdc.inf",1) 
Else 
Exit 
EndIf 
关于各行语句的作用,笔者已经详细注释,读者可以参考阅读。
这种方法虽然可以实现自动更改 IDE 控制器,但是有一个缺点,就是只能更改被 XP 自
带驱动识别出来的 IDE 控制器,不能更改安装了第三方驱动的 IDE 控制器。不过这也无关
紧要,要进行封装的系统一般在系统安装完毕后是不安装任何第三方驱动的。
将此脚本保存为 PCIIDE.au3,编译为 PCIIDE.exe 并保存。

201 

9.1.4 自动卸载驱动 
HKLM\SYSTEM\CurrentControlSet\Control\Class\ 
注册表的这个类下包含当前系统已安装驱动的所有类别的硬件设备。我们可以设法读取
所有设备类下的硬件设备,这样就可以获得一份关于所有设备的硬件 ID 列表,从而我们可
以使用 DevCon.exe 根据这个列表来注意卸载所有的硬件驱动。
卸载时还应当注意,要避开计算机类型、IDE 控制器、键盘、鼠标、系统设备这 5 类硬
件设备。
自动卸载驱动的 AU3 源码如下,运行该脚本前需要将 DevCon.exe 放置于 Windows 文
件夹或者 Windows\System32 文件夹内。 
#NoTrayIcon 
Dim 
$Class,$Cls,$Device,$DeviceID,$DeviceName,$FileHandle,$i,$j,$k,$NoUnloadClass[5],$Flag,$ 
LastDeviceID 
;注册表中所有关于硬件类别的注册表键 
$Class="HKLM\SYSTEM\CurrentControlSet\Control\Class\" 
;以准备写入方式打开一个名为“Device.esp”的文本文档,以在随后写入一份硬件  ID 
列表 
$FileHandle=FileOpen(@ScriptDir&"Device.esp",2) 
$i=1 
;5 类不用卸载的硬件,分别是“计算机类型”、
“IDE 控制器”
、“PS/2 键盘”、
“PS/2 鼠
标”

“系统设备” 
$NoUnloadClass[0]="{4D36E966­E325­11CE­BFC1­08002BE10318}" 
$NoUnloadClass[1]="{4D36E96A­E325­11CE­BFC1­08002BE10318}" 
$NoUnloadClass[2]="{4D36E96B­E325­11CE­BFC1­08002BE10318}" 
$NoUnloadClass[3]="{4D36E96F­E325­11CE­BFC1­08002BE10318}" 
$NoUnloadClass[4]="{4D36E97D­E325­11CE­BFC1­08002BE10318}" 
;$LastDeviceID  用 于 在 生 成 硬 件  ID  列 表 时 不 重复 写 入 相 同 的 硬 件  ID , 这 里 为 
$LastDeviceID 设置一个初值 
$LastDeviceID="Skyfree" 
While(1) 
;读取“HKLM\SYSTEM\CurrentControlSet\Control\Class\”下的每一个键,存储于 
$Cls 中 
$Cls=RegEnumKey($Class,$i) 
;如果读取不到了(所有键值都读完了),则退出循环 
If @error=­1 Then ExitLoop 
;为$k 设一个初值,$k 用于循环计数 
$k=0 
;为$Flag 设一个初值 
$Flag=0 
;启用一个循环,判断当前读取到的设备类是否属于不用被卸载的硬件类 
While($k<5) 
;如果该设备类属于不用被卸载的设备类,那么将$Flag 设置为 1 并退出当前用

202 

于判断的循环,否则$Flag 还会保持初值 0 
If $Cls=$NoUnloadClass[$k] Then 
$Flag=1 
ExitLoop 
EndIf 
$k=$k+1 
WEnd 
;如果$Flag 还是为 0 而不为 1,那么说明当前读取到的设备类不属于不被卸载的设
备类,那么我们开始执行下列操作 
If $Flag=0 Then 
$Cls=$Class&$Cls 
;$Flag=0 
$j=1 
While(1) 
;将设备类下的所有设备依次赋给$Device 
$Device=RegEnumKey($Cls,$j) 
;读取不到当前设备类下的设备时(读取完毕或此设备类下无设备)
,退出
此循环 
If @error=­1 Then ExitLoop 
$Device=$Cls&"\"&$Device 
;$DeviceID 也就是硬件 ID 的值为设备$Device 键下 MatchingDeviceId 键值 
$DeviceID=RegRead($Device,"MatchingDeviceId") 
;如果$DeviceID 与刚读取到的上一个不重复并且$DeviceID 不为空,那么
就将这个硬件的硬件 ID 写入 Device.esp 
If $DeviceID<>$LastDeviceID And $DeviceID<>"" Then 
FileWriteLine(@ScriptDir&"Device.esp",$DeviceID) 
$LastDeviceID=$DeviceID 
EndIf 
$j=$j+1 
WEnd 
EndIf 
$i=$i+1 
WEnd 
;Device.esp 写入完毕,关闭该文件 
FileClose($FileHandle) 
;以准备读取方式在此打开 Device.esp 
$FileHandle=FileOpen(@ScriptDir&"Device.esp",0) 
$i=1 
While(1) 
;读取 Device.esp 中的每一行 
$DeviceID=FileReadLine(@ScriptDir&"Device.esp",$i) 
;如果读取不到时(读取结束),则退出当前循环 
If @error=­1 Then ExitLoop 
;能读取到硬件 ID 时则使用“devcon remove  (硬件 ID)”命令来卸载该硬件

203 

RunWait("cmd /c devcon remove "&$DeviceID,"",@SW_HIDE) 
$i=$i+1 
WEnd 
;Device.esp 读取结束,关闭该文件 
FileClose($FileHandle) 
;删除 Device.esp 
FileDelete(@ScriptDir&"Device.esp") 
关于各行语句的作用,笔者已经详细注释,读者可以参考阅读。
高人们曾经对我说我的这种方法可能会卸载掉“假象设备”,会有可能造成不稳定。不
过根据笔者个人的测试,使用此方法卸载驱动后封装的系统,部署后笔者还没见出现过什么
问题。笔者的测试量很大,所以可以保证这套用于清理驱动程序的源码具有绝对的可用性。
高人们又不喜欢将“高级的”方法公开,那我们还是自力更生吧。菜,还是自己做的好吃。
将此脚本保存为 RmDev.au3,编译为 RmDev.exe 并保存 

9.1.5 自动使系统进化为可自动判断 HAL 
根据上一章中所讲的,做这个事情要分为 3 步。 
1>提取自动判断 HAL 所需的文件
提取 HAL 所需文件,按照上一章中所说的:
由系统中提取 HAL 判断所需的文件(Windows XP  SP2 在 SP2.CAB 中,如果今后出现 
XP SP3,这几个文件很有可能存在于 SP3.CAB 中)
: 
halacpi.dll、halapic.dll、halmps.dll、halaacpi.dll、halmacpi.dll、hal.dll、ntkrnlmp.exe、 
ntkrnlpa.exe、ntkrpamp.exe、ntoskrnl.exe 
提取完毕后将 hal.dll 更名为 halstnd.dll,将 ntoskrnl.exe 更名为 ntkrnlup.exe,并将这些
文件复制到系统的%Windir%\System32\中。
我们将上述要做的事情用 AU3 脚本写成自动的: 
Dim $CachePath 
$CachePath=@WindowsDir & "\HALCache" 
DirCreate($CachePath) 
RunWait("extrac32  /e  /y  "&'"'&@Windowsdir&"\driver  cache\i386\SP2.CAB"&'"'&" 
halacpi.dll  halapic.dll  halmps.dll  halaacpi.dll  halmacpi.dll  hal.dll  ntkrnlmp.exe  ntkrnlpa.exe 
ntkrpamp.exe ntoskrnl.exe /l "&$CachePath,"",@SW_HIDE) 
FileCopy($CachePath & "\halacpi.dll",@WindowsDir & "\System32\halacpi.dll",1) 
FileCopy($CachePath & "\halapic.dll",@WindowsDir & "\System32\halapic.dll",1) 
FileCopy($CachePath & "\halmps.dll",@WindowsDir & "\System32\halmps.dll",1) 
FileCopy($CachePath & "\halaacpi.dll",@WindowsDir & "\System32\halaacpi.dll",1) 
FileCopy($CachePath & "\halmacpi.dll",@WindowsDir & "\System32\halmacpi.dll",1) 
FileCopy($CachePath & "\hal.dll",@WindowsDir & "\System32\halstnd.dll",1) 
FileCopy($CachePath & "\ntkrnlmp.exe",@WindowsDir & "\System32\ntkrnlmp.exe",1) 
FileCopy($CachePath & "\ntkrnlpa.exe",@WindowsDir & "\System32\ntkrnlpa.exe",1) 
FileCopy($CachePath & "\ntkrpamp.exe ",@WindowsDir & "\System32\ntkrpamp.exe ",1)

204 

FileCopy($CachePath & "\ntoskrnl.exe",@WindowsDir & "\System32\ntkrnlup.exe",1) 
DirRemove($CachePath,1) 
上述代码中建立 Windows\HALCache 文件夹,然后从 SP2.CAB 中解压缩所有需要的文
件 到  Windows\HALCache  中 , 随 后 将 提 取 的 这 些 文 件 从  Windows\HALCache  复 制 到 
Windows\System32 下,并将需要改名的改名。最后删除 Windows\HALCache 文件夹。 
2>更改启动文件
我们将 Longhorn 的 NTLDR 命名为“NTLDR_L”
,然后将其放置到 C 盘中。然后我们
运行如下 AU3 脚本来更改 HAL 自动判定所需的启动文件: 
Dim $s 
FileSetAttrib("C:\NTLDR","­RSH") 
FileMove("C:\NTLDR","C:\NTLDR_XP") 
FileMove("C:\NTLDR_L","C:\NTLDR") 
FileSetAttrib("C:\NTLDR","+RSH") 
FileSetAttrib("C:\Boot.ini","­RSH") 
$s=IniRead("C:\Boot.ini","operating 
systems","multi(0)disk(0)rdisk(0)partition(1)\WINDOWS","") 
$s=$s & " /detecthal" 
IniWrite("C:\Boot.ini","operating 
systems","multi(0)disk(0)rdisk(0)partition(1)\WINDOWS",$s) 
FileSetAttrib("C:\Boot.ini","+RSH") 
前 4 句用于将 XP 原始的 NTLDR 备份为“NTLDR_XP”
,后 5 句用于在 Boot.ini 中添加
“/detecthal”参数。 
3>删除与当前 HAL 相关的注册表信息
删除 HAL 相关的信息前必须先使用命令行工具 setacl.exe 来更改注册表的修改权限,然
后才能进行删除。我们将 setacl.exe 放置于 C:\Sysprep 中以方便使用。 
RunWait("c:\sysprep\setacl.exe 
MACHINE\SYSTEM\ControlSet001\Enum\ACPI_HAL 
/registry /grant everyone /full","",@SW_HIDE) 
RunWait("c:\sysprep\setacl.exe 
MACHINE\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL  /registry 
/grant 
everyone 
/full","",@SW_HIDE) 
RunWait("c:\sysprep\setacl.exe 
MACHINE\SYSTEM\ControlSet002\Enum\ACPI_HAL 
/registry /grant everyone /full","",@SW_HIDE) 
RunWait("c:\sysprep\setacl.exe 
MACHINE\SYSTEM\ControlSet002\Enum\Root\ACPI_HAL  /registry 
/grant 
everyone 
/full","",@SW_HIDE) 
RunWait("c:\sysprep\setacl.exe 
MACHINE\SYSTEM\ControlSet003\Enum\ACPI_HAL 
/registry /grant everyone /full","",@SW_HIDE) 
RunWait("c:\sysprep\setacl.exe 
MACHINE\SYSTEM\ControlSet003\Enum\Root\ACPI_HAL  /registry 
/grant 
everyone 
/full","",@SW_HIDE) 
RunWait("c:\sysprep\setacl.exe  MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI_HAL

205 

/registry /grant everyone /full","",@SW_HIDE) 
RunWait("c:\sysprep\setacl.exe 
MACHINE\SYSTEM\CurrentControlSet\Enum\Root\ACPI_HAL  /registry  /grant  everyone 
/full","",@SW_HIDE) 
RunWait("reg 
delete 
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\ACPI_HAL /f","",@SW_HIDE) 
RunWait("reg 
delete 
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\ACPI_HAL 
/f","",@SW_HIDE) 
RunWait("reg 
delete 
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Enum\ACPI_HAL /f","",@SW_HIDE) 
RunWait("reg 
delete 
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Enum\Root\ACPI_HAL 
/f","",@SW_HIDE) 
RunWait("reg 
delete 
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Enum\ACPI_HAL /f","",@SW_HIDE) 
RunWait("reg 
delete 
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Enum\Root\ACPI_HAL 
/f","",@SW_HIDE) 
RunWait("reg 
delete 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI_HAL 
/f","",@SW_HIDE) 
RunWait("reg 
delete 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\ACPI_HAL 
/f","",@SW_HIDE) 
OK,现在我们将上述 3 段代码合而为一,命名为 HAL.au3,并编译为 HAL.exe 并保存。
有了 HAL.exe 后不要忘记 HAL 自动判定所需的 dtecthal.inf 文件。勿忘将这个文件复制
到 C:\Windows\Inf 文件夹下,否则 HAL 是不能自动判定的。 

9.1.6 自动运行 Sysprep.exe 封装系统 
Sysprep.exe  可以在命令行下使用,同样它也有很多参数,使用这些参数可以控制系统
封装的自动执行。Sysprep.exe 在封装时常用的参数如下: 
­activated,不重置 Windows 产品激活的宽限期。 
­forceshutdown,在 Sysprep 完成后关闭计算机。 
­mini,配置  Windows  XP  Professional  以使用“最小化安装”而不是“欢迎使用 
Windows”
。该选项对  Windows XP Home Edition  没有影响,它的首次运行体验始终是“欢
迎使用  Windows”
。 
­noreboot,用于在系统封装后不重启计算机。 
­nosidgen,不生成新的  SID。 
­quiet,运行  Sysprep  而不显示屏幕确认消息。 
­reboot,在 Sysprep 完成后强制计算机自动重新启动。 
­reseal,清除事件查看器日志并准备将计算机交付客户使用。

206 

其实 Sysprep.exe 拥有很多参数,
上面笔者介绍的这些只是其中一部分,更多关于 Sysprep 
的参数请参阅企业部署工具 Deploy.cab 中的 Deploy.chm。
以下笔者使用 AU3 脚本来调用 Sysprep.exe 来实现自动封装: 
RunWait("c:\sysprep\sysprep.exe ­quiet ­mini ­nosidgen ­activated ­reseal ­noreboot") 
将此脚本保存为 RunSysprep.au3,编译成 RunSysprep.exe 并保存。
笔者在这句话中选择了不生成 SID,如果大家需要生成 SID 请去掉“­nosidgen”参数。 

9.1.7 自动导入 SRS 驱动和注册表
为了方便使用了笔者论坛(自由天空技术论坛,Http://Www.FreeSkyCD.Cn)realhyg 整
理的 SRS 驱动与注册表。下载地址: 
http://www.freeskycd.com.cn/bbs/Show.asp?id=903&BoardID=15&TB=1 
这个驱动包的使用很简单,在系统封装后将驱动包中  System32  下的所有文件复制到 
C:\Windows\System32 下,并导入驱动包中提供的注册表文件就可以了。这样就快速实现了
微软官方方法的封装。
为了方便使用,我们将驱动包中的  System32  文件夹成自解压包,命名为  SRS.exe,自
解压路径为 C:\Windows,再将注册表文件改名为 SRS.reg。我们现在将 SRS.exe 和 SRS.reg 
放置于 C:\Sysprep 文件夹下以方便调用。
以下笔者使用 AU3 脚本来实现 SRS 驱动与注册表的的导入。 
RunWait("C:\Sysprep\SRS.exe") 
RunWait("regedit.exe /s C:\Sysprep\SRS.reg","",@SW_HIDE) 
将此脚本改名为 SRSPlugIn.au3,编译成 SRSPlugIn.exe 并保存。 
realhyg 的 SRS 驱动包中还包含一个 Sysprep.inf 文件,其中包含[sysprepcleanup]段,这
一段用于在部署完成前禁用无用  SRS  驱动服务,请在自动封装完成后将  realhyg  的 
[sysprepcleanup]段复制到您的 Sysprep.inf 中。 

9.1.8  自动封装的最终实现
经过从 9.1.2~9.1.7 的学习,我们总共写好了 6 个 AU3 脚本,分别是:StandardPC.au3、 
PCIIDE.au3、RmDev.au3、HAL.au3、RunSysprep.au3、SRSPlugIn.au3。我们将它们都编译
成 exe 文件,放置于 C:\Sysprep 下,并将每个 AU3 脚本所调用的外部程序放在相应位置。
现在,我们来写个脚本综合调用这几个刚写好的程序。
笔者通过一个 AU3 脚本来调用这 6 个脚本来完成自动化封装。 
ToolTip(@CR&"  正 在 更 改 计 算 机 模 式 ...      "&@CR,  @DesktopWidth­200, 
@DesktopHeight­100) 
RunWait("C:\Sysprep\StandardPC.exe") 
ToolTip(@CR&"  正 在 更 改  IDE  控 制 器 ...      "&@CR,  @DesktopWidth­200, 
@DesktopHeight­100) 
RunWait("C:\Sysprep\PCIIDE.exe") 
ToolTip(@CR&"  正 在 卸 载 所 有 硬 件 驱 动 ...      "&@CR,  @DesktopWidth­200, 
@DesktopHeight­100) 
RunWait("C:\Sysprep\RmDev.exe") 
ToolTip(@CR&" 
正 在 封 装 系 统  ...      "&@CR,  @DesktopWidth­200, 
@DesktopHeight­100)

207 

RunWait("C:\Sysprep\RunSysprep.exe") 
ToolTip(@CR&" 
正 在 导 入  SRS  驱 动  ...      "&@CR,  @DesktopWidth­200, 
@DesktopHeight­100) 
RunWait("C:\Sysprep\SRSPlugIn.exe") 
ToolTip(@CR&" 
添 加  HAL  自 动 判 断  ...      "&@CR,  @DesktopWidth­200, 
@DesktopHeight­100) 
RunWait("C:\Sysprep\HAL.exe") 
ToolTip(@CR&"  系统封装完毕!  "&@CR, @DesktopWidth­200, @DesktopHeight­100) 
保存这个 AU3 脚本为 AutoSysprep.au3,编译为 AutoSysprep.exe 并保存。
此后,只要进行系统封装,我们首先将各个程序运行所需的文件放置于规定位置,然后
单击这个 AutoSysprep.exe 就可以完成整个自动化系统封装了。
这里有一点要注意的是,添加 HAL 自动判断的程序最好在系统封装后运行,因为 HAL 
自动判断不仅更改了 HAL 自动判断文件,还删除了当前 HAL 的信息。如果没有当前的 HAL 
信息时执行系统封装,很有可能造成蓝屏事故。
当然,以上的自动完成的 6 项功能只是实现万能部署所必须的,大家如果还需要什么功
能,例如封装前自动安装补丁、自动优化服务、自动优化注册表等功能,可以自己写  AU3 
脚本加入就可以了。
现在很多智能的封装工具,就是自动化的完成各种各样封装前常作的操作。 

9.2  部署过程自动化控制
众所周知,封装好的系统通过磁盘映像软件转移到目标计算机后,在目标计算机第一次
启动时会开启一个系统部署过程,系统部署过程中会创建 SID、搜寻硬件并安装硬件驱动、
更改网络标示、注册组件等。系统部署过程是由 Windows\System32\Setup.exe 触发的。如果
我们想在部署前或部署后做点什么,甚至想在部署过程中做点什么,我们该怎么办? 

9.2.1  接管部署过程
既然我们知道系统部署过程是由 Windows\System32\Setup.exe 触发的,那么系统是怎么
知道在第一次启动时运行 Windows\System32\Setup.exe 的呢?经过无数前辈们的探索,发现
了 CMDLine 这个键值。 
HKEY_LOCAL_MACHINE\SYSTEM\Setup\CMDLine 键,在封装后此键值为“Setup.exe 
–newsetup ­mini”
,这也就是说在系统第一次启动时运行 Setup.exe 并加载“–newsetup –mini”
参数。
(如果封装时没有选最小化部署这里不会有“­mini”参数)
我们可以据此断定,之所以目标计算机第一次运行时会运行 Setup.exe 来部署系统,是
由这个键值控制的。那么,如果我们把这个键值更改一下,让目标计算机第一次启动时运行
我们所需的程序,不就能够控制部署过程了吗?
我 们 将  HKEY_LOCAL_MACHINE\SYSTEM\Setup\CMDLine  键 的 键 值 更 改 为
“AllUsrRun.exe”
(AllUsrRun.exe 是笔者用 AU3 脚本写的一个用于控制部署过程的小程序),
并将  AllUsrRun.exe  放置于  Windows  目录下,这样在目标计算机第一次启动时会运行 
AllUsrRun.exe 而不是 Setup.exe 了。从而,也就实现了部署过程的接管。
有一点要注意的是,HKEY_LOCAL_MACHINE\SYSTEM\Setup\CMDLine  键的键值不

208 

能有路径,系统在目标计算机第一次启动时,会去  Windows  和  Windows\System32  下寻找 
CMDLine  键值所规定的程序,所以接管部署过程的小程序一定要放置于  Windows  或 
Windows\System32 下。
好的,如果我们确认要接管部署过程,那么我们就必须在封装结束时更改 CMDLine 键
值,我们可以在上一节的 RunSysprep.au3 的末尾添加一句: 
RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\Setup","CmdLine","REG_MULTI_SZ"," 
AllUsrRun.exe") 
当然,您可以将 AllUsrRun.exe 更改为您想要的任何名字。
读到这里,有的读者要问了,接管部署过程有什么意义?AllUsrRun.exe 要怎么写?
接管部署过程我们就可以在系统部署进行前或者系统部署完成后做点什么了,例如运行
我们在上一章中提到的“Sysprep.exe  ­clean”、替换现在 Longhorn 的 NTLDR 为 XP 的等等
工作。
大家可以看一下笔者的 AllUsrRun.au3,内容如下: 
;删除 Longhorn 用于 HAL 判断的 NTLDR,替换回 XP 的 
FileSetAttrib("C:\NTLDR","­RSH") 
FileDelete("C:\NTLDR ") 
FileSetAttrib("C:\NTLDR _XP","­RSH") 
FileMove("C:\NTLDR _XP","c:\ntldr") 
FileSetAttrib("C:\NTLDR ","+RSH") 
;更改 boot.ini 中的“/detecthal”参数 
FileSetAttrib("c:\boot.ini","­RSH") 
IniWrite("c:\boot.ini","operating 
systems","multi(0)disk(0)rdisk(0)partition(1)\WINDOWS",'"Microsoft 
Windows 
XP 
Professional" /fastdetect') 
FileSetAttrib("c:\boot.ini","+RSH") 
;运行“Sysprep.exe –Clean”禁用无用的 SRS 驱动服务 
RunWait("c:\sysprep\sysprep.exe ­clean","",@SW_HIDE) 
;删除 CMDLine 键值 
RegDelete("HKEY_LOCAL_MACHINE\SYSTEM\setup","cmdline") 
;执行最小化系统部署 
RunWait("setup.exe ­newsetup ­mini") 
;部署完成后导入注册表优化、运行服务优化 
RunWait("regedit.exe /s C:\Windows\RegOp.reg") 
FileDelete("C:\Windows\RegOp.reg") 
RunWait("C:\Windows\SrvOp.exe") 
FileDelete("C:\Windows\SrvOp.exe") 
以前只运行一个“Setup.exe –newsetup ­mini”的系统部署过程,被笔者接管后运行了 N 
多程序。
笔者再对这个 AllUsrRun.exe 做一下简单的说明。
首先,我们撤销了系统  HAL 自动判定功能,因为系统启动时 HAL 的自动判断与修改
已经完成了,所以我们完全可以在部署时撤销这个功能。其实 HAL 自动判断功能保留也是
可以的,只是由于 Longhorn 只有英文版,使用 Longhorn 的 NTLDR 会造成启动菜单变成英
文的,所以还是替换回 XP 的为好。
其次,我们运行了“Sysprep.exe ­clean”。凡是使用微软官方方法封装的系统,在集成了

209 

大量的大容量磁盘控制器驱动之后必须在系统部署结束前运行“Sysprep.exe ­clean”来禁用
无用的磁盘控制器驱动服务,否则会造成大量大容量磁盘控制器驱动相互冲突而造成错乱。
这种错乱一般体现在系统部署结束后,第一次进入系统时系统直接提示“某某文件缺失”,
其实这时这个文件并没有缺失,而是由于太多的磁盘控制器驱动错乱造成的。
然后,我们删除了已经没用的 CMDLine 键,并执行了系统部署过程: 
RunWait("setup.exe 
­newsetup ­mini")。
最后,当系统部署结束后,系统已经基本成型,我们可以在这个时候导入注册表优化并
优化服务。
现在大家明白笔者为什么一定要接管系统部署过程了吧,接管了这个过程,我们几乎可
以随心所欲的运行任何我们想运行的程序,不过由于系统部署未进行前系统环境比较特殊,
并不是所有的程序在这里运行都可以正常运行,所以还是请大家多实践。 

9.2.2  第三方驱动的导入与自动安装
系统封装与部署技术大大的提高了系统安装速度,系统补丁、软件等都可以在封装前直
接安装进系统,如果在系统部署时可以自动安装驱动那该多省时省力?如果提供足够多的第
三方驱动程序,系统部署完成时所有驱动就已经安装完毕,那样该多么的快捷?
实现驱动的自动安装其实很简单,大家可能已经听说过一些例如“驱动提前解压技术”
之类的名词了,其实大家只要了解一些基本的原则,以不变即可应万变。
驱动的自动安装需要三个条件: 
1、把收集好的驱动包放在一个至少您知道的地方; 
2、告诉系统您把驱动包放在哪了; 
3、触发一个驱动自动搜寻与安装过程。
明白了这三点,驱动自动安装就不是什么难事了。
由于我们要封装的系统在 C 盘,所以我们可以把驱动包也放在 C 盘中,例如 C:\Drivers,
这样系统在部署时可以在硬盘上搜索与安装驱动程序,速度较快。
我们还要告诉系统我们把驱动放在  C:\Drivers  中了,怎么告诉系统呢,我在第四章讲 
DPS 







过 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\DevicePath  键来
规定驱动所在位置的。那么我们只要修改这个键就可以让系统知道我们把驱动放在哪了。不
过不要以为将这个键修改为“C:\Drivers”就可以了,我们必须将 C:\Drivers 下的每一个子目
录的路径都写进 DevicePath 键,
这将是一份巨量的工程。
不过幸好我们在第六章研究过 DPS,
知道 DPS 中包含一个名叫 DevPath.exe 的命令行工具,用于驱动所在位置导入注册表。这样
依赖,我们只需要运行“DevPath.exe C:\Drivers”
,就可以将 C:\Drivers 下的所有子文件夹都
导入 DevicePath 键。这样以来,我们就实现了告诉系统我们将驱动放置在了什么位置。
最后我们还要出发一个驱动自动搜寻与安装过程,这个 Setup.exe 已经为我们准备好了,
在系统部署过程中,系统会自动搜寻并安装驱动程序。 
OK,总结一下,如果我们想让系统在部署时自动安装第三方驱动,我们只要能在 
Setup.exe 运行前将驱动包“放”到一个位置,并在 Setup.exe 运行前“告诉”系统我们把驱
动放在哪里了,Setup.exe  运行时就会自动去我们告诉它的那个放置驱动的位置搜索驱动并
自动安装。
这下我们的思路就开阔了许多。
驱动的放置与告知系统驱动的位置只要在 Setup.exe 运行前做完就可以了,而 Setup.exe 
运行前是个很宽泛的范围。我们可以在封装前将驱动包放置于 C:\Drivers 并告知系统。如果

210 

驱动包太大我们还可以做成压缩包,放在  C:\Sysprep  下,用磁盘映像软件备份  C  盘,恢复
系统到目标计算机后,在 Setup.exe 运行前通过 AllUsrRun.exe 调用解压 C:\Sysprep 下的驱动
压缩包到 C:\Drivers 并告知系统。更有甚者直接将驱动压缩包放置于光盘,在 Setup.exe 运
行前直接解压光盘中的驱动包到 C:\Drivers 并告知系统。
现在网络中流传一些“驱动解压工具”
,其实就是先将驱动包按照硬件类型分类,再通
过驱动解压缩工具让用户选择要解压的驱动包,驱动包解压后再将驱动解压的位置告知系
统。
下面笔者在 AllUsrRun.au3 中在 Setup.exe 运行前添加几句,以实现驱动的自动解压与告
知系统驱动位置。代码如下: 
RunWait("C:\Sysprep\Drivers.exe") 
RunWait("C:\Sysprep\DevPath.exe C:\Drivers","",@SW_HIDE) 
这两句分别用于调用 C:\Sysprep\Drivers.exe 驱动自解压包运行,Drivers.exe 驱动自解压
包运行时会自动将驱动解压到 C:\Drivers。随后调用 C:\Sysprep\DevPath.exe 来告知系统驱动
包位于 C:\Drivers 中。
读完这节,大家应该已经对第三方驱动的导入与自动安装不再陌生了。 

9.2.3  部署中程序调用控制
大家可能在某些  XP  定制作品中见过在“注册组件”时调用某些程序的,早期的一些 
XP 定制作品会在这里调用 XPLOAD,现在则经常用来调用软件安装器、双核 CPU 补丁等。
这个位置的调用,其实是通过更改 RunOnce 键值(注意,这个与 GUIRunOnce 不是一



。 
RunOnce 




: 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce 
我们可以在这个键值下添加一个 RunOnce.exe 小程序,然后通过 RunOnce.exe 小程序来
调用我们要调用的内容。RunOnce  键值是支持路径的,例如我们把  RunOnce.exe  放在 
C:\Sysprep 下,那么 RunOnce 的键值可以设定为“C:\Sysprep\RunOnce.exe”

为了设定这个键值,我们可以在 AutoSysprep.au3 中添加如下命令: 
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\R 
unOnce","ESRun","REG_SZ","C:\Sysprep\RunOnce.exe") 
然 后 我 们 写 一 个  RunOnce.exe , 放 置 于  C:\Sysprep  中 就 可 以 了 , 下 面 是 笔 者 的 
RunOnce.au3: 
RunWait("C:\Sysprep\DualCore.exe") 
RunWait("C:\Sysprep\WallPaper.exe") 
RunWait("C:\Sysprep\Themes.exe") 
笔者先后调用了 CPU 双核自动判断与安装程序、桌面壁纸压缩包、系统主题压缩包,
其实 RunOnce 脚本具体要调用什么要靠大家自己发挥了,需要什么,就调用什么。 

9.3  自动化系统封装与部署常见问题和解答
通过前几节的学习,大家已经对封装过程自动化控制和部署过程自动化控制有了一定的
了解。笔者在前几节中关于封装与部署自动化控制的介绍都是很基本的,前几节中所讲的内
容都是自动化封装与部署必须的、最常见的步骤,还有很多步骤可以供大家挖掘。大家还可
以根据自己的需要添加各种自动化过程。

211 

其实现在网络中形形色色的封装工具,就是封装与部署的自动化实现。现在有很多封装
工具都提供图形化的可供用户选择的界面,可谓功能强大。通过前几节的阅读很多朋友已经
可以完全脱离现有网络中的封装工具,而完全可以自己制作自己的封装工具了。
笔者有着做封装工具的经历,也有很多封装系统的经验,所以对系统封装有一定程度的
了解,现在为大家提供一个常见问题与解答的列表,可能用得上。 
1、如何自动集成系统补丁?
这个在本文 2.4 节中已经介绍过,详见 2.4 节 
2、系统减肥要注意什么?
在第 3 章中我们已经学习了 nLite 的使用,完全可以使用 nLite 精简一个系统再进行封
装,这样要比装好系统后再执行系统减肥操作要干净的多。减肥时一定要注意适当和适量,
不要见到什么东西大就删什么。一定要了解某文件或文件夹是什么、干什么用,再进行减肥
操作。减肥时笔者强烈不建议减掉系统自带的驱动,有很多硬件都是依赖这些系统自带驱动
的。 
3、封装前是否要移动页面文件(虚拟内存)
通常我们在封装完系统后,都是使用  Ghost  来将  C  盘做成系统映像以方便转移到目标
计算机。Ghost  8.0  以上的版本都具备忽略页面文件备份系统的功能。所以页面文件的转移
没有太大的意义。不过将页面文件转移出 C 盘有助于我们估算 C 盘当前体积。 
4、封装前是否要关闭系统还原?
系统还原是 XP 的一项特殊功能,用于将当前系统做一个备份,每个磁盘分区都有备份。
封装时 C 盘中有时候也会存在系统还原的备份文件,如果不关闭系统还原,则在使用 Ghost 
备份  C  盘是会将这些系统还原备份文件一起备份进去,这样就会增加系统映像的体积,不
利于我们使用 CD 等低容量介质来转移系统映像到目标计算机。所以我们在封装前一般都会
关闭系统还原。不过大家不用担心,只要不关闭系统还原所对应的服务,那么系统还原会在
系统部署完毕时自动开启。 
5、如何自动关闭系统还原?
将如下 VBS 脚本复制到记事本中,并将记事本的后缀名改为 VBS。 
Dim strComputer 
Dim objWMIService 
Dim colListOfServices 
Dim objService 
Dim oReg 
Dim strKeyPath 
Dim strValueName 
Dim dwValue 
strComputer = "." 
'禁用服务­­­­­­­­­­­­­­­­­­­­­­­­­ 
Set objWMIService = GetObject("winmgmts:" _ 
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
Set colListOfServices = objWMIService.ExecQuery _

212 

("Select * from Win32_Service Where Name = 'srservice'") 
For Each objService in colListOfServices 
objService.Change , , , , "Disabled" 
Next 
'改注册表­­­­­­­­­­­­­­­­­­­­­­­­ 
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_ 
strComputer & "\root\default:StdRegProv") 
strKeyPath = "SOFTWARE\Microsoft\WindowsNT\CurrentVersion\SystemRestore" 
strValueName = "DisableSR" 
dwValue = 00000001 
oReg.SetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,dwValue 
保存后运行该 VBS 脚本,即可关闭系统还原。大家可以在 AutoSysprep.au3 中调用这个 
VBS 脚本。 
6、如何自动建立宽带连接?
下列为自动建立宽带连接的 AU3 脚本,保存后编译,运行即可。 
ToolTip(@CR&"  即将自动生成“宽带连接”  "&@CRLF&"  强烈建议不要有任何
键盘鼠标操作!      "&@CR, @DesktopWidth­260, @DesktopHeight­120) 
Sleep(2000) 
ToolTip(@CR&"  正在自动生成“宽带连接”  "&@CRLF&"  强烈建议不要有任何
键盘鼠标操作!      "&@CR, @DesktopWidth­260, @DesktopHeight­120) 
Run("RUNDLL32 netshell.dll,StartNCW") 
WinWait("新建连接向导","欢迎使用新建连接向导") 
WinActivate("新建连接向导","欢迎使用新建连接向导") 
Send("!N") 
WinWait("新建连接向导","连接到  Internet") 
WinActivate("新建连接向导","连接到  Internet") 
Send("!C") 
Send("!N") 
WinWait("新建连接向导","手动设置我的连接") 
WinActivate("新建连接向导","手动设置我的连接") 
Send("!M") 
Send("!N") 
WinWait("新建连接向导","用要求用户名和密码的宽带连接来连接") 
WinActivate("新建连接向导","用要求用户名和密码的宽带连接来连接") 
Send("!U") 
Send("!N") 
WinWait("新建连接向导","在下面框中输入您的  ISP  的名称") 
WinActivate("新建连接向导","在下面框中输入您的  ISP  的名称") 
Send("!N") 
WinWait("新建连接向导","输入一个  ISP  帐户名和密码") 
WinActivate("新建连接向导","输入一个  ISP  帐户名和密码") 
Send("!M") 
Send("!N")

213 

WinWait("新建连接向导","正在完成新建连接向导") 
WinActivate("新建连接向导","正在完成新建连接向导") 
Send("!S") 
Send("{TAB}") 
Send("{TAB}") 
Send("{SPACE}") 
ToolTip(@CR&"  生成完毕!  "&@CR, @DesktopWidth­260, @DesktopHeight­120) 
Sleep(2000) 
7、如何自动转移当前桌面的快捷方式到所有用户的桌面?
我们通常是使用  Administrator  来装软件的,有些软件的快捷方式只建立在当前用户的
桌面上,如果我们新建了用户,则没有当前用户安装的这些软件的快捷方式,比较麻烦。我
们可以通过如下 AU3 代码来自动转移当前桌面快捷方式到所有用户桌面。 
RunWait("cmd /c move " & Chr(34) & "%USERPROFILE%\桌面\*.lnk" & Chr(34) & "  " 
& Chr(34) & "%ALLUSERSPROFILE%\桌面" & Chr(34)) 
其实就是将“%USERPROFILE%\桌面\*.lnk”转移到“%ALLUSERSPROFILE%\桌面”
下。 
8、注册表优化何时导入?
封装前导入,这时导入的注册表优化无论是针对系统的还是针对当前用户的都会生效,
而且系统在目标机部署完成后这些注册表优化绝大多数都是保留的。根据使用和测试者反
馈,某些注册表优化可能会造成系统在目标计算机第一次启动时卡机,虽然笔者没遇到过这
种情况,不过笔者还是要提醒一下大家。这种导入方式还有一个缺点,如果在后来想更替注
册表优化文件或更改某些优化项目会很困难,毕竟所有优化在封装前已经导入了。
部署完成后系统重启前导入,这时导入的注册表不一定全部条目都会生效,特别是一些
针对当前用户的优化。不过这个时候由于系统部署已经完成,导入注册表优化不会造成对系
统部署的影响。这种方式导入注册表优化易修改、不易造成对系统部署的影响,笔者推荐在
这个时候导入。
第一次登陆系统时导入,使用  GUIRunOnce  在第一次登陆系统时导入注册表优化,这
时导入注册表优化所有的注册表优化条目都会有效,无论是针对系统的还是针对当前用户
的。不过注册表优化都要重启后,也就是在第二次登陆系统时才会生效。
具体何时导入注册表优化,没有最佳时机一说,请大家根据时机情况合理选择时机,或
者将注册表优化列表根据性质不同分为几份,在合理的时机进行导入操作。 
9、服务优化应当注意什么?
笔者在 1.6 节中就详细的讲述过 XP 系统服务的优化。在封装系统时有个优化是要注意
的: 
Workstation,禁用并停止这个服务,会造成系统部署时生成网络 ID 失败。 
10、关于“桌面清理向导”的问题
桌面清理向导,很多人认为这是个无用的功能,很多时候还会打乱我们对桌面布局的排
布。在系统精简时很多时候都会将“桌面清理向导”直接精简掉。但是在系统部署时注册组
件时需要这个组件,没有“桌面清理向导”组件时就会报错。所以如果系统已经精简掉了“桌
面清理向导”
,那么请到完整版的系统中搜索“fldrclnr.dll”并放置于 System32 文件夹下。

214 

11、如何删除桌面上的 Windows Media Player 快捷方式图标
系统在部署完毕后会在桌面中生成 Windows Media Player 快捷方式图标,很多人感觉这
个碍眼,删除的话也很简单,如下一行 AU3 代码就可以了: 
FileDelete("C:\Documents and Settings\All Users\桌面\Windows Media Player.lnk") 
12、系统部署时的背景图片能修改吗?
微软默认的系统部署时的图片为 Windows\System32\Setup.bmp。如果想将部署时的背景
图片更改为自己想要的,替换这张图片就可以了。建议不要太大,且必须为 BMP 格式。 
13、部署时的分辨率可以锁定吗?
可以锁定,导入如下注册表: 
1>800x600 32 位色: 
Windows Registry Editor Version 5.00 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VgaSave\Device0] 
"DefaultSettings.XResolution"=dword:00000320 
"DefaultSettings.YResolution"=dword:00000258 
"DefaultSettings.BitsPerPel"=dword:00000020 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\{23A77BF7­ED9 
6­40EC­AF06­9B1F4867732A}\0000] 
"DefaultSettings.XResolution"=dword:00000320 
"DefaultSettings.YResolution"=dword:00000258 
"DefaultSettings.BitsPerPel"=dword:00000020 
2>1024x768 32 位色: 
Windows Registry Editor Version 5.00 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VgaSave\Device0] 
"DefaultSettings.YResolution"=dword:00000300 
"DefaultSettings.XResolution"=dword:00000400 
"DefaultSettings.BitsPerPel"=dword:00000020 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\{23A77BF7­ED9 
6­40EC­AF06­9B1F4867732A}\0000] 
"DefaultSettings.YResolution"=dword:00000300 
"DefaultSettings.XResolution"=dword:00000400 
"DefaultSettings.BitsPerPel"=dword:00000020 
要注意的是,某些低端的计算机支持不到这个分辨率与色位,这时就不能保证锁定了。 
14、系统部署前的背景图片是怎么实现的?
经过了 9.2 节的学习,
大家已经学会了如何接管部署过程并在系统部署前调用某些程序,
但是系统部署前系统并不提供背景图片,那我们如何实现这个位置的背景呢?
既然没有背景,我们就可以用某种程序替代背景,也就是说,我们可以让某程序的界面
全屏化,再在程序界面中添加一张图片。这样我们就将一个全屏的程序做成了背景。AU3 
代码如下: 
#include <GUIConstants.au3> 
GUICreate("", @DesktopWidth, @DesktopHeight, "", "", $WS_POPUP)

215 

GUICtrlCreatePic("c:  \Sysprep\Back.jpg",  0,0,@DesktopWidth,  @DesktopHeight, 
BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS)) 
GUISetState(@SW_SHOW) 
我们将上述代码添加于 9.2 节中所写的 AllUsrRun.au3 的头部,也就实现了在部署开始
前全屏化一个应用程序界面,并将 c: \Sysprep\Back.jpg 充满应用程序界面。从而实现了将 c: 
\Sysprep\Back.jpg 设置为系统部署前背景图片。 
15、什么是 SFC? 
SFC,系统文件保护,是 XP 的一项用于保护系统文件的功能。SFC 会将系统文件做一
个备份,当某些系统文件被替换或更改时自动修复回去。例如 SFC 将 A 文件做了备份,当
我们将 A 文件修改为 B 文件时,SFC 会自动的将 A 文件的备份调出并覆盖当前的 B 文件。 
SFC 在 XP 问世之初,的确起到了有效的保护系统关键文件的作用,但随着时间的推移,很
多病毒和恶意程序都能有效的避开 SFC 而直接破坏系统文件。就当前来说,SFC 的实际意
义已经不大。 
16、什么是 DllCache? 
SFC 会自动备份关键的系统文件并保存在 C:\Windows\System32\DllCache 文件夹中。由
于我们在封装系统时会尽量减小当前系统体积以方便转移,所以我们一般会将  DllCache  文
件夹中备份的系统文件做一定处理。
现在网络上提供一些 DllCache 备份工具,DllCache 备份工具用于记录当前 DllCache 文
件夹中备份了哪些系统文件,记录完毕后删除  DllCache  文件夹中所有的备份。系统部署时
可以调用该 DllCache 备份工具运行并恢复 DllCache 文件夹中系统关键文件的备份。这是现
在很多系统封装者常用的方法。
但是正如我在上文中所说, 
SFC 的实际意义并不大,那么我们能否彻底的关闭 SFC 呢?
彻底关闭 SFC 需要做两件事。
首先,导入如下注册表键值: 
Windows Registry Editor Version 5.00 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows 
NT\CurrentVersion\Winlogon] 
"SfcQuota"=dword:ffffffff 
"SfcDisable"=dword:ffffff9d 
然后,在 C:\Windows\System32 下搜索 sfc_os.dll,复制出来,再用 UltraEdit 打开这个
复制出来的 sfc_os.dll,Ctrl+G 跳到地址 0xECE9,把 33C040 改成 909090,保存。退出当前
系统进入 DOS 或者 Windows  PE 环境,将修改过的 sfc_os.dll 替换 C:\Windows\System32 下
原始的 sfc_os.dll。
在此进入系统时,SFC 就彻底的关闭了。 
SFC  关闭以后,DllCache  文件夹中的系统文件备份就不再有任何作用,直接清空 
C:\Windows\System32\DllCache 文件夹就可以了。
无论是备份  DllCache  文件还是彻底关闭  SFC,在最后都会清空  DllCache  文件夹,而 
DllCache 文件夹一般都有 300M 左右大,清空 DllCache 文件夹可以有效的减小系统总体积。 
17、如何做一个“是否删除驱动包”的选项? 
9.2 节中,我们学习了如何让系统在部署时搜索我们提供的第三方驱动包中的驱动并安
装。通常情况下,系统部署结束后所有驱动就已经安装完毕,那么第三方驱动包就已经没有

216 

作用了。我们可以在首次登陆系统时提供一个是否要删除第三方驱动包的选项,AU3  代码
如下:
Dim $Flag, $DriversDir 
$DriversDir="C:\Drivers" 
$Flag=MsgBox(1,"第三方驱动包","要删除第三方驱动包吗?") 
If $Flag=1 Then 
DirRemove($DriversDir,1) 
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVers 
ion","DevicePath","REG_EXPAND_SZ","%SystemRoot%\Inf") 
EndIf 
如果用户选择是,则删除第三方驱动包并恢复 DevicePath 键值为系统默认。 
18、AU3 程序怎么“自杀”? 
AU3  程序自己是不能“杀死”自己的,因为程序在运行时是不能被删除的。那么我们
就要借助第三方的力量了。AU3 程序“自杀”代码如下: 
Run(@ComSpec&' 
/c 
ping 
127.0.0.1 
­n 
2&del 
/q 
"'&@ScriptFullPath&'"',@ScriptDir,@SW_HIDE) 
在 AU3 程序的最后一行添加上述语句。
这个语句其实就是在 AU3 程序将要运行结束时出发两条 DOS 命令,一个是 PING 本机
两次,一个是删除当前的 AU3 程序。PING 本机两次可以造成一个延迟,这个延迟足够 AU3 
程序结束运行,随后一个命令就可以删除这个已经结束运行的 AU3 程序了。 
19、为什么系统首次启动时的进度条乱码?
系统在目标计算机首次启动时,在看到  XP  滚动条前有一个的进度条,正常情况下是
“>>>>>>>>>”
,但当我们替换了  Longhorn  的  NTLDR  后,进度条成了乱码。这是由于  C 
盘下的 BootFont.bin 仍旧是 XP 中文版的,而 NTLDR 是 Longhorn 英文版的,这就造成了不
匹配,出现乱码也就不足为奇了。除非我们有 Longhorn 英文版的 BootFont.bin,否则就不能
避免这个。但是时过境迁,现在找一个 Longhorn 英文版的 BootFont.bin 何其困难。那么我
们还有一个折中的办法,在封装完成后,将 C 盘根目录下的 BootFont.bin 改名或保存到别处,
这样系统在目标计算机中第一次启动时找不到 C 盘根目录下的 BootFont.bin,这时进度条会
成为“||||||||||||||||||||||”
,虽然也不怎么好看,但是比乱码好多了。系统部署时再将 BootFont.bin 
改名或复制回 C 盘根目录。
例如笔者在封装时将 bootfont.bin 转移到 Sysprep 文件夹内,又在部署时将 bootfont.bin 
转移回 C 盘根目录下。
在 AutoSysprep.au3 中添加: 
FileSetAttrib("c:\bootfont.bin","­RSH") 
FileCopy("c:\bootfont.bin","c:\sysprep\") 
FileDelete("c:\bootfont.bin") 
在 AllUsrRun.au3 中 Setup.exe 运行前添加: 
FileCopy("c:\sysprep\bootfont.bin","c:\bootfont.bin") 
FileSetAttrib("c:\bootfont.bin","+RSH") 
20、如何避免出现“本地连接 2”?
将如下 AU3 代码复制到 AutoSysprep.au3 中:

217 

regdelete("HKLM\SYSTEM\CurrentControlSet\Control\Network\{4D36E972­E325­11CE­B 
FC1­08002BE10318}") 
regwrite 
("HKLM\SYSTEM\CurrentControlSet\Control\Network\{4D36E972­E325­11CE­BFC1­08002B 
E10318}") 
regdelete("HKLM\SYSTEM\CurrentControlSet\Control\Network\{6BDD1FC5­810F­11D0­ 
BEC7­08002BE2092F}") 
regwrite 
("HKLM\SYSTEM\CurrentControlSet\Control\Network\{6BDD1FC5­810F­11D0­BEC7­08002B 
E2092F}") 
21、如何压缩 Program Files 文件夹?
很多朋友喜欢在封装的系统中安装很多软件,但是软件安装的多了系统体积也就上去
了,制作成系统映像时难以用 CD 作为转移介质。很多朋友就想到了,既然驱动可以压缩,
那软件可以压缩吗?软件基本都是安装在 Program  Files 文件夹的,那么 Program  Files 文件
夹可以压缩吗?
虽然很多朋友在研究 Program Files 文件夹的压缩,但是笔者说几点保守的建议。第一,
压缩是以时间来换取空间的方法,压缩固然可以节省空间的使用,
但是解压同样浪费了时间,
特别在某些配置低的机器中,大文件解压的时间实在太长;第二,如果真的要压缩 Program 
Files 文件夹,那么笔者只建议压缩其中非微软的内容,例如我安装了暴风影音、迅雷、QQ,
那么我将暴风影音、迅雷、QQ 的文件夹复制出来,使用 7Z 或者 NSIS 压缩并打包,并设定
在部署过程中解压缩此压缩包到 C 盘,随后删除 Program Files 文件夹中的暴风影音、迅雷、 
QQ 文件夹。
为什么笔者对 Program  Files 文件夹压缩的意见如此保守,呵呵,笔者我并非是循规蹈
矩的人,但是笔者本身对 Program  Files 文件夹压缩的经验并不多,知之为知之,不知为不
知。但笔者只推荐大家压缩 Program  Files 文件夹中非微软的内容也是有原因的,第一,造
成 Program  Files 文件夹体积大的一大原因是我们安装的第三方软件,所以要压缩的话那就
一定要从第三方软件入手;第二,像微软 Office 这种软件,如果压缩后删除,会对部署过程
产生一定的影响;第三,压缩本不宜过多,否则解压速度太慢,碰到低端机解压就像死机一
般。
笔者仍旧建议大家以控制大小为前提,实在要装的软件太多才选择对 Program  Files 文
件夹进行压缩。
以上数条是在系统自动化封装与部署时常常用到的内容,提供给您参阅。 

9.4  总结
本章着重讲述了系统封装与部署过程的自动化实现。自动化是为了更加快捷、准确的完
成系统封装与部署过程。本章中笔者所讲述的这些自动化方法,都是最基本的方法,重在给
大家提供一个思路和流程,大家一定要多加探索与尝试,并通过实践找出最适合自己的方法。
本章所讲述的内容,也是当前很多“封装工具”在实现的功能,很多封装工具的功能综
合性高、自动化水平高,适合新手使用。但无论这些封装工具再如何强大,就像笔者一再强
调的那样,很多事还是自己做的顺手,菜还是自己做的好吃。

218 

理解了自动化封装与部署的原理,相信大家对封装与部署的认识又提高了一个台阶。

219 

第十章、XP 封装与部署实例
经过 8、9 两章的学习,我们已经对系统的封装与部署原理以及实现过程有了相当的认
识。在本章中,笔者将以一个实例来讲述如何将一个 XP 系统封装成一张系统恢复光盘。 

10.1  母盘
所谓母盘,就是我们要用来做封装的系统。母盘分为三种情况: 
1、XP 原版 
XP 原版保持着微软默认的设定风格,其中文件数量、各种设置都维持着 XP 最初的状
态。
使用 XP 原版来做封装的母系统是不错的选择,第一,所有默认设置都是微软官方的,
这些默认设置虽然不一定是最高效的,但却是最稳定的;第二,系统未经过人为的修正与更
改,自定义性很高,我们全文都在讲 XP 的定制,一个 XP 原版可以提供给我们很多的自定
义空间。
但使用 XP 原版也有一定的麻烦。第一,体积大,虽然当前 DVD 驱动器已经流行,但
为了顾及更多类型的计算机,我们一般都只使用 CD 来作为转移系统映像的介质,这也就要
求我们尽量的要将系统映像做小,特别是我们经常要在系统中添加各种驱动、补丁、软件等,
这样,我们使用 XP 原版的话最后的系统总体积的确有些大;第二,未优化,由于是 XP 原
版,所以所有设定均是默认,所有的优化都要由我们手工来完成,这也对 XP 定制者的技术
水平要有一定的要求。
不过无论怎么说,使用 XP 原版作为系统母盘还是优点多多的,建议有一定技术水平的 
XP 定制者使用 XP 原版来做封装的母系统。 
2、修改版 XP 
现在网络中有层出不穷的 XP 修改版,有精简到 200 多 M 的“完美”精简版,有美化
的十分漂亮的美化版等等
使用这些版本作为封装的母盘有不少优点,第一,一些精简版的确不错,将  Windows 
系统体积控制的十分好,这样我们在集成驱动、补丁、软件等后依然可以十分良好的控制系
统总体积;第二,这些修改版的 XP 往往有着相当好的优化水平,系统的各个优化设置已经
达到了一定的层次,这也就免除了我们再度进行手工优化的麻烦。这两点,是相对于原版 
XP 最大的优势所在。
但是这些修改版也普遍存在一些问题。第一,修改版究竟修改了什么?很多 XP 定制者
也未做十分详细的说明,更有很多修改被 XP 定制“高手”认为是机密所在,不愿意透露,
这也就使得这些 XP 定制作品万一出现什么问题,使用者不好排查;第二,精简造成的问题,
精简是一定会造成兼容性和稳定性缺失的,这是毋庸置疑的,但是精简的精髓在于如果通过
精简损失的仅仅是一些无所谓的兼容性和稳定性又何乐而不为呢?不过由于网络中各种精
简版的制作者的水平各有千秋,某些精简又会对系统封装和部署造成微妙的影响,所以万一
由于精简出现问题,也是不好排查的。
笔者并不是排斥网络中流行的各类修改版,很多修改版都是十分优秀的,只是用这些修
改版做母盘时,一定要对这个修改版的可用性做一定程度的调查,了解了这些修改版后再决
定是否要用这些修改版做母盘。修改版 XP 适于 XP 定制水平一般的朋友或对某些 XP 修改
版有一定认识的朋友,只要我们的 XP 定制水平到达一定级别,完全可以按照自己的需要来

220 

定制一张自己需要的 XP 封装母盘,何必非要用别人定制好的呢? 
3、已封装好的 XP 
现在网络中流行着很多已经封装好的 XP,很多朋友感觉这些 XP 定制的不错,所以想
将这种已封装好的 XP 部署到自己的机器中,修改后再进行封装。
笔者对这种做法保留意见。当前定制一张属于自己的 XP 并不困难,只需要您了解一些
相关知识和一些基本的原理就可以了。很多朋友拿别人封装好的 XP 进行二次封装的直接原
因是感觉这些封装作品做的很好,而自己达不到这种水平。笔者个人认为,如果认识到自己
的水平和别人有差别,最好的办法是提高自己的水平、加强自己的实力,而不是直接修改别
人的作品。
由于笔者没进行过“二次封装”
,所以对“二次封装”的系统是否稳定这个话题暂不谈
论。不过就理论而言,造成“二次封装”不稳定的原因大概有二,一是定制者的水平,由于
进行二次封装的大多不是高手(当然,一些“特别”喜欢进行二次封装的高手除外)
,所以
对系统的再次封装不一定能达到与原封装水平相媲美的效果;二则是由于封装习惯不同,由
于每个人对 SRS 驱动等的处理方法不同,不同的 SRS 驱动与注册表的导入和修改很有可能
造成某些微妙的不兼容,这是造成二次封装的系统不稳定的又一原因。
笔者个人并不推荐二次封装,不过网络中的确有着各种喜欢玩二次封装的“高人”
,二
次封装不建议初学者使用。
封装母盘的选择对一个系统封装作品的好坏有着举足轻重的影响,笔者推荐新手在练习
时使用 XP 原版,有一定水平的朋友可以自己定制一个符合自己要求的 XP 封装母盘或使用
某些已经很成熟的 XP 定制作品。 
XP 母盘选好后,我们将要安装一个 Windows  XP 操作系统,才能执行系统封装操作。 
XP 的安装相信大家都会,所以不再赘述,不过大家可能会有两个问题。
第一,用什么配置的计算机做系统封装比较好?
这个是很多热衷于系统封装的朋友经常会问的问题,也曾经有着某某硬件比某某硬件封
装出来的系统兼容性好的说法。当然,这些说法在一定时期都是正确的,的确有着封装系统
兼容性与硬件配置有关系的说法。但是这些说法都与当时对  SRS  驱动的研究水平以及硬件
驱动卸载水平有关。
随着越来越多的系统研究者、编程精英加入了系统自动化封装与万能部署的研究行列, 
SRS 驱动被更新的越来越完美,当前系统驱动残留的处理也越来越彻底,被封装的系统与母
计算机硬件配置的关系越来越小。其实还是应验了那句老话,“技术到了,一切都有了”。
所以只要技术达到一定水平,用任何计算机做封装的母计算机都没有任何问题。笔者经
常使用 VM(虚拟机)作为封装的母计算机,封装好的系统兼容性也相当不错,部署上百台
计算机后也没见出现太大的兼容性问题。
第二,C 盘用 FAT32 格式还是 NTFS 格式?
关于 FAT32  和 NTFS 格式孰优孰劣的争论已经有了多时了,这里我们并不谈论孰优孰
劣,而仅从系统封装的角度来谈论一下这两种格式。
我们在系统封装结束后要使用第三方的磁盘映像工具来进行备份,
我们通常使用 Ghost,
而且会在备份时使用压缩。相同的压缩率下, 
FAT32 格式的 C 盘备份成系统映像后,比 NTFS 
格式小大概 30M。不过众所周知,虽然 FAT32 具备兼容性好、在低速硬盘中执行效率高、
易于在 DOS 下维护等优点,但是 NTFS 具有更高的稳定性,特别是在系统部署于磁盘阵列
后,NTFS 格式有着不可替代的优越性。
具体选用什么格式,还是由大家根据具体的使用环境来做。
有一点要提醒大家的是,在安装系统程式提示格式化  C  盘时,会有正常和快速两种模
式供选择,建议选择正常速度格式化 C 盘,这样可以避免由于 C 分区存在错误而影响系统

221 

的封装以及其后的部署。 

10.2  系统补丁
系统补丁也是一个重要的环节,由于从 XP 发布到当前已经有了很长一段时间,微软在
这段时间中发布了大量系统补丁程序。
我们通常会在系统封装前将这些补丁安装到系统,这样系统在部署后,目标计算机的系
统也就同时拥有了我们在源计算机中所安装的系统补丁。自动集成大量补丁可以按照笔者在 
2.4 节中所讲述的方法。
如 2.4 节中所讲述的,补丁安装时一般使用“/quiet、/passive、/norestart”参数,但由于
我们要尽量的减少对  C  盘空间的浪费,而且我们所安装的系统补丁一般情况下也不会需要
卸载,所以我们在安装补丁时可以选择不备份补丁卸载所需要的文件,这样我们可以加入
“/nobackup”参数。
按照 2.4 节中提供的方法,安装所有所需的系统补丁到系统。 

10.3  系统的设置修改 
1>禁用或转移虚拟内存 
PageFile.sys,系统会在硬盘中创建这个文件,以便在物理内存不足时,或物理内存中某
些数据不常调用时,将物理内存中的数据暂时存放在虚拟内存中。虚拟内存的读写速度比物
理内存慢的多,但是也起到了暂时缓解一时之需的作用。PageFile.sys  默认有物理内存的至
少 1.5 倍大。
使用 Ghost8.0 以上版本备份 C 盘时,不会将 PageFile.sys 备份到系统映像中,但是我们
可以暂时禁用虚拟内存或将虚拟内存移动到非 C 盘中,以便我们估算 C 盘当前大小。禁用
或移动虚拟内存的方法:
“我的电脑”à属性à“高级”选项卡à“虚拟内存”,更改à将 C 盘设置为“无分页
文件”
,记得设置完成后单击“设置”按钮,如果想要将虚拟内存移动到其他盘符例如 D 盘,
则在 D 盘中设置虚拟内存大小,完成后单击“设置”按钮。
禁用或转移虚拟内存,只会让我们在封装时  C  盘暂时没有页面文件。系统在目标计算
机部署完成后,会自动设置页面文件大小,并自动在 C 盘建立页面文件。 
2>关闭系统还原
系统还原功能会备份系统当前重要的系统文件和设置,以便在系统出现问题时恢复。系
统还原程序会在各个盘符下建立系统还原备份文件,当然,C  盘下也会有。为了减小  C  盘
体积,我们可以暂时关闭系统还原,关闭方法如下:
“我的电脑”à属性à“系统还原”选项卡à选中“在所有驱动器上关闭系统还原”
系统还原的关闭也是暂时的,只是便于我们更好的控制 C 盘的大小,系统部署完成后,
系统还原会自动开启。 
3>关闭休眠
在某些计算机中会有休眠功能,系统休眠会在  C  盘下创建一个休眠用的文件, 
hiberfil.sys。大家可以关闭休眠,关闭方法如下:
桌面,右键à属性à“屏幕保护程序”选项卡à“电源”按钮à“休眠”选项à“启用
休眠”前的对号去掉。

222 

10.4  系统精简
如果您要封装的系统中不包含驱动、软件等,或者您使用大容量可移动存储器(例如 U 
盘、移动硬盘、DVD  等)作为转移系统映像的介质,那么您可以不对系统进行精简。但是
当前使用最普遍的方法依然是用 CD 来作为转移系统映像的介质。由于 CD 普遍只有 700M 
容量(部分可擦写 CD 只有 650M,部分大容量 CD 有 800M 甚至 800M 以上),所以如果要
在系统中集成补丁、驱动、软件等,就不得不对系统做一定程度的精简。系统精简有三种方
法。
第一,使用  nLite,在母系统安装前就对母系统进行处理,安装后就已经是一个完成精
简的系统。笔者比较倾向于这种办法,这也是笔者为什么在第三章使用整整一章来讲述 nLite 
使用方法的一个原因。nLite  是一款比较成熟的系统精简软件,对系统的精简准确稳定,只
要操作得当,可以随心所欲的定制任意大小的 XP。在系统安装前进行精简的一大好处就是
“干净”
,比系统安装好后再进行精简工作要干净的多,可以尽量减少系统精简残留物。 
nLite 
的使用方法请详见本文第三章。
第二,在 XP 安装好后,使用软件进行精简。当前网络中这类精简软件很多,大家选用
时一定要慎重,笔者推荐大家使用 XPLite 这款精简软件,可选组件多、性能综合性强。
第三,手工精简。这种减肥方法是麻烦的,而且容易造成一些小失误,但是这种方法相
对于第二条还是有优势的,至少我们干了什么我们很清楚,某些减肥软件减完后会有些莫名
其妙的小错误。
下面笔者对手工精简做一下详细的介绍: 
1>删除 C:\Documents and Settings\Administrator\Local Settings\Temp\*.* 
2>删除 C:\Program Files\UPDATE\*.* 
3>C:\Program Files\windows nt\pinball,三维弹球,不用就删了 
4> C:\Program Files\movie maker,Movie Maker,不用就删了 
5> C:\Program Files\messenger,Windows Messenger,不是 MSN,可以删除 
6> C:\Program Files\msn gaming zone,微软在线游戏,不用可以删除 
7>删除 C:\Program Files\windowsUpdate\* 
8>C:\windows\下所有以“$NtUninstall*$”为命名格式的隐藏目录,这些是系统补丁的
卸载备份文件,如果使用了“/nobackup”参数则无。如果不需要卸载补丁,则把这些都删
除了吧。 
9>删除 C:\windows\下所有以 KB 打头的.log 文件 
10>C:\windows\pchealth,帮助中心文件,如 果不需 要可以删除。不过删除前请将 
pchealth\helpctr\binaries\ 中 的  msconfig.exe  和  helpctr.exe  复 制 到  System32  文 件 夹 下 , 
msconfig.exe 在配置系统启动项时经常使用, 
helpctr.exe 直接删除的话在 XP 下按 F1 会报错。 
11>C:\windows\help\*,帮助文档,不用的话能删除的全删除。 
12>C:\windows\srchasst,帮助助手,就是搜索时的那条狗,除 mui 目录以外全部删除。 
13>C:\windows\msagent,微软助手,除 intl 目录以外全部删除。 
14>C:\windows\softwareDistribution\download\* 
15>C:\windows\system32\oobe,XP 激活程序,如果要封装的 XP 是免激活的,则可以删
除这个。但不要试图删除  OOBE  以实现非免激活系统转化为免激活系统,这个只是用以激
活的程序。 
16>DllCache 文件夹,关于 SFC 和 DllCache 的详细信息请参阅本文 9.3 节第 15、16 问

223 

题。DllCache  文件夹约有  300M  大,其内为  XP  系统关键文件的备份。可以使用  DllCache 
备份工具备份 DllCache 文件夹中的内容,并在部署时恢复,或者彻底关闭 SFC 后直接删除 
DllCache 文件夹。 

10.5  软件安装
安装必备的软件,通常情况下,我们会安装如 Office、WinRAR、暴风影音、迅雷、QQ 
等,按照我们每个人的需求与系统部署的计算机用途、适用范围的不同来选择不同的软件进
行安装。
软件安装不宜过多,如果软件体积过大会增大系统映像的体积。 

10.6  实现万能部署的必要修改
在本文 8.2 节中已经讲过要实现系统在封装后的万能部署,需要突破三个限制,突破这
三个限制需要更改诸多系统文件,详细内容敬请参阅本文 8.2 节。
我们基本要做的事情有: 
1>将 Longhorn 的 HAL 自动判断与更改引入到 XP 中,注意,关于当前计算机系统 HAL 
信息的删除不要在这个时候做,一定要在系统封装后执行。 
2>将 SRS 驱动整合到 XP 中 
3>驱动处理:更改  IDE  控制器为“标准双通道  PCI  IDE  控制器”
、更改计算机模式为
“StandardPC”
、依次卸载除“键盘”、
“鼠标”、
“IDE  控制器”
、“计算机”
、“系统设备”外
的所有硬件设备的驱动程序。 

10.7  系统封装
这个比较简单,就是运行 Sysprep.exe 进行封装,详见 8.1 节中的叙述。
其实我们在上一章中已经使用 AU3 编写了一套自动封装脚本,可以自动实现更改计算
机模式、更改 IDE 控制器、卸载所有硬件驱动、导入 SRS 驱动、封装系统、更新自动 HAL 
判断等,如果您按本文第九章中笔者所讲的做了,现在应该有如下目录:
(例如将所有第九章中写的自动化封装脚本都放置在 D:\AutoSysprep 下) 
D:\AutoSysprep 
D:\AutoSysprep\NTLDR_L(Longhorn 的支持 HAL 自动判定的 NTLDR) 
D:\AutoSysprep\Sysprep 
D:\AutoSysprep\Sysprep\AutoSysprep.exe(自动封装调用程序) 
D:\AutoSysprep\Sysprep\DevPath.exe(驱动路径导入程序) 
D:\AutoSysprep\Sysprep\Drivers.exe(驱动压缩包) 
D:\AutoSysprep\Sysprep\HAL.exe(HAL 自动判断更改) 
D:\AutoSysprep\Sysprep\PCIIDE.exe(IDE 控制器自动修改) 
D:\AutoSysprep\Sysprep\RmDev.exe(驱动程序自动卸载) 
D:\AutoSysprep\Sysprep\RunSysprep.exe(自动封装) 
D:\AutoSysprep\Sysprep\SetACL.exe(注册表权限修改工具) 
D:\AutoSysprep\Sysprep\Setupcl.exe(封装必备)

224 

D:\AutoSysprep\Sysprep\SRS.exe(realhyg 的 SRS 驱动) 
D:\AutoSysprep\Sysprep\SRS.reg(realhyg 的 SRS 注册表) 
D:\AutoSysprep\Sysprep\SRSPlugIn.exe(SRS 驱动与注册表自动导入) 
D:\AutoSysprep\Sysprep\StandardPC.exe(自动修改计算机模式) 
D:\AutoSysprep\Sysprep\sysprep.exe(封装工具) 
D:\AutoSysprep\Sysprep\sysprep.inf(自动应答文件) 
D:\AutoSysprep\Windows\inf 
D:\AutoSysprep\Windows\inf\dtecthal.inf(HAL 自动判定所需 INF 文件) 
D:\AutoSysprep\Windows\System32\ 
D:\AutoSysprep\Windows\System32\devcon.exe(命令行的设备管理工具) 
D:\AutoSysprep\Windows\System32\fldrclnr.dll(桌面清理向导的 DLL) 
D:\AutoSysprep\Windows\AllUsrRun.exe(部署过程接管) 
D:\AutoSysprep\Windows\RegOp.reg(注册表优化) 
D:\AutoSysprep\Windows\SrvOp.exe(服务优化)
有了这套自动封装脚本,可以省下我们很多功夫。只需要将 D:\AutoSysprep 的内容全部
复制到 C 盘根目录下,然后运行 AutoSysprep.exe 就可以自动的完成 10.6 和 10.7 节中的所有
工作。整个自动化封装过程是无需人为参与的,而且已经预置 AllUsrRun.exe 接管了部署过
程。
需 要 注 意 的 是 , 笔 者 这 里 用 的 是 笔 者 论 坛 ( 自 由 天 空 技 术 论 坛 , 
Http://Www.FreeSkyCD.Cn) 
realhyg 所编写的 SRS 驱动与注册表,笔者已经多次强调 realhyg 
的  SRS  驱 动 与 注 册 表 的 导 入 其 实 就 是 微 软 封 装 方 法 的 快 速 实 现 , 所 以 一 定 要 在 
AllUsrRun.exe 中添加
“Sysprep.exe –clean”并在自动封装结束后,
将 realhyg 提供的 sysprep.inf 
中的[sysprepcleanup]段添加到您的 sysprep.inf 里。
无论您使用什么方法,是自动的还是手动的,到这里,一个集成了系统补丁、第三方驱
动程序、经过系统减肥处理、安装了软件、具备了万能部署性能的系统已经被封装完毕了。
下面我们要做的,是将这个封装了的系统使用第三方磁盘映像工具将系统备份为系统映
像。 

10.8  使用 Ghost 将系统备份为系统映像
大家可能早有疑惑,为什么笔者从第八章开始讲述系统的封装与部署,只提“第三方磁
盘映像工具”而只字未提“Ghost”
。这一点,是笔者为了更正现在很多人的误区而刻意这样
写的。万能部署 XP,被当前俗称为 GhostXP,其实这是一种十分不准确的说法,让很多人
产生误解,更让很多人认为万能部署 XP 就是用 Ghost 把系统备份起来然后克隆到 N 台计算
机上。由此,也让太多人产生了对万能部署 XP 稳定性的怀疑。
笔者在最初介绍封装与部署时已经提过源计算机封装系统到目标计算机部署系统的过
程:
源计算机系统,封装àC 盘为封装好的系统à使用 Ghost 备份 C 盘为系统映像à通过介
质转移系统映像到目标计算机à使用 Ghost 恢复系统映像到目标计算机 C 盘à目标计算机启
动,开始系统部署à部署完毕,目标计算机 C 盘系统安装完毕。
所以,Ghost  只是工具,并非主角,封装与部署才是主角。Ghost  的许多优越性让我们
选用它,它可以将源计算机  C  盘的分区格式、分区引导区、分区中的文件彻底备份,恢复
到目标计算机时会将这些信息一并写入,把格式化 C 盘、写入引导区、写入文件一并执行。

225 

这就是为什么我们选用 Ghost 的原因。 
Ghost 在备份时可以采用压缩存储,这对于我们缩小系统映像的体积有着极大的帮助。 
Ghost 最大压缩的参数为“­z9”

系统封装完毕后,重启计算机,进入 DOS 或者 Windows  PE 系统,在 DOS 或 PE 的命
令提示符下,切换到存放 Ghost 程序的文件夹,例如 D:\Ghost 文件夹,假设 Ghost 程序的名
字为 Ghost.exe,则写下如下命令行: 
Ghost.exe –z9 
然后回车。此时依然会正常进入 Ghost 界面,但是在进行系统备份时不再提示您选择不
压缩、快速压缩和高压缩了,而是直接使用 Ghost 的最大能力压缩。
备份 C 盘为 WINXP.GHO,存放于 D:\下。 

10.9  从系统映像到系统恢复光盘
现在我们已经做好了一个系统映像  WINXP.GHO,现在我们可以通过各种途径将这个 
WINXP.GHO  分发到目标计算机,然后进入  DOS  或  PE  环境运行  Ghost  程序来恢复 
WINXP.GHO 到目标计算机的 C 盘。可是有没有更方便一些的方法,让我们可以“一键”恢
复 XP 到 C 盘?
笔者已经在第七章中讲述了 EasyBoot,并说明 EasyBoot 可以调用各种 IMA 或 IMG 软
盘映像启动,软盘映像一般都是 DOS 启动盘,可以启动进纯 DOS 环境。所以,我们只要能
由一个 DOS 启动盘启动,并设定进入 DOS 环境后自动执行恢复 WINXP.GHO 到 C 盘就可
以了。
大家可以参阅现在的一些 XP 恢复光盘,到它们的 EZBOOT 文件夹中提取恢复 XP 所用
的 IMA 或 IMG。虽然这些软盘映像的功能有所差别,但是根本功能都是一样的。它们的功
能大致都为搜索光盘根目录下的 Ghost.exe,并使用 Ghost.exe 恢复系统映像到 C 盘。
例如笔者使用了的一个 IMA 软盘映像,其中的 AutoExec.BAT 内容如下:
(AutoExec.BAT 为进入 DOS 环境后自动运行的程序) 
@ECHO OFF 
SHSUCDX /D:?PATACD01 /D:?SATACD01 /D:?SATACD02 /D:?SATACD03 
findcd /s>nul 
call findcdr "ghost.exe" C D E F G H I J K L M N O P Q R S T U V W X Y Z 
%CDROM%: 
ghost ­nousb ­clone,mode=pload,src=ghostxp.gho:1,dst=1:1 ­crcignore ­sure  ­fx 
笔者略微解释一下: 
SHSUCDX /D:?PATACD01 /D:?SATACD01 /D:?SATACD02 /D:?SATACD03 
调用 SHSUCDX 搜索有无 SATA 光驱,这样可以获得对 SATA 光驱的支持。 
findcd /s>nul 
call findcdr "ghost.exe" C D E F G H I J K L M N O P Q R S T U V W X Y Z 
则是在 C~Z 盘根目录下搜寻 ghost.exe,有则将根目录下有 ghost.exe 的盘当成光驱。 
%CDROM%: 
ghost ­nousb ­clone,mode=pload,src=WINXP.GHO:1,dst=1:1 ­crcignore ­sure  ­fx 
切换到光盘根目录,使用 Ghost 恢复 WINXP.GHO 到第一硬盘第一分区。
我们要根据软盘映像中 AutoExec.BAT 的功能来放置我们所需的文件。例如笔者的这个
软盘映像,笔者需要将 Ghost.exe 放置于光盘根目录下,将 WINXP.GHO 放置在光盘根目录

226 

下,将这个软盘映像放置于光盘 EZBOOT 目录中。
有了这些,在 EasyBoot 中添加一个菜单条,调用上述软盘映像启动,这样即可自动执
行恢复光盘中 WINXP.GHO 到第一硬盘第一分区。这样,我们也就彻底的完成了一张 XP 恢
复光盘。 

10.10  总结
本章讲述了封装一个万能部署 XP 的基本流程。
这只是一个基本流程,所以大家一定要根据自己的需要来变通,定制出真正属于自己的 
XP。系统封装其实并不神秘,熟读原理,知道什么是必须要做的,即可以不变应万变。
笔者衷心的希望 XP 封装与部署技术,可以让广大系统维护工作者彻底的从重复性的工
作中解脱出来,提高工作效率,减少无谓的时间消耗!

作者 :Skyfree 
QQ  :165718402 
Email:Skyfree@FreeSkyCD.Cn 

自由天空技术论坛 
Http://Www.FreeSkyCD.Cn/

227