3.Windows XP OPK CD的本职工作
上面说了其实我们拿到的是Windows PE的一个可执行副本,即Windows XP OPK(Windows XP OEM预安装工具包)CD。从名字都知道它原来的本职工作是为了方便OEM工作的。如果你在Windows操作系统环境下打开光碟,它就会自动运行Autorun为你的系统安装一个“Windows安装管理器”的工具包。利用它,你可以轻易制造出带有计算机厂商OEM标志的Windows安装镜像。虽然这是Windows XP OPK CD的主要本职工作,但显然对我们个人没什么意义,当然,如果你想把手上的Windows安装CD都打上自己独有的印记,并在朋友的机器上安装时炫一下,那么使用它是个好主意。当然自己的“印记”绝非OEM标志那么简单,实际上你还可任意设定Windows PE携带的软件,并可设置这些软件在Windows PE启动时运行;理想的情形下你甚至可以为自定义的Windows PE版本加上类似于Windows Explorer的图形外壳程序——要不怎么叫专为厂商OEM设计呢?
四、自定义Windows PE
1.自定义Windows XP OPK CD的启动过程
这当然是最简单的自定义方法,简单到你只需在软盘上放一个自己编写的INI文件就可以了。
进入Windows XP OPK CD中的Windows PE目录,可找到一个名为“Startopk.cmd”的文件,实际上此CD引导系统启动到后期,就会执行Startopk.cmd(这里的CMD文件类似于BAT批处理文件,可以手动编辑)。打开Startopk.cmd,里面只有一行命令“factory -Windows PE”,其意思是找到Winbom.ini文件,并顺序处理这个文件中的命令部分。Winbom.ini对Windows PE的启动过程至关重要,我们来看一下能默认用它实现哪些功能:
(1)将测试装置复制到目标计算机上,并运行硬件诊断程序。
(2)运行程序,例如分区和格式化驱动器的应用程序。
(3)使用“net use”命令建立网络连接,以及将目录更改到预安装映像的位置。
因此要自定义Windows PE的启动过程当然不能放过Winbom.ini,这里的关键就是系统会如何找到这个文件了——因为原来CD介质上的Winbom.ini文件显然是不可改写的。这里Windows PE做了一个巧妙的设计,使得Factory.exe将首先在可移动媒体驱动器(如软盘驱动器)根目录搜索Winbom.ini文件。所以你只需编辑Winbom.ini文件,并将其放到软盘的根目录下,在Windows XP OPK CD启动时将插入此软盘,那么Factory命令就会优先读取软驱上的Winbom.ini文件内容,通过这种方式就可以控制手上这张Windows XP OPK CD的启动了。
明白了如何控制Windows XP OPK CD的启动,那么启动任务的定义就在于Winbom.ini文件本身的内容了,实际上Windows XP OPK C运行命令factory -Windows PE时,它将按下面顺序处理Winbom.ini文件中的命令部分:[Windows PE.Net]、[DiskConfig]、[OEMRunOnce]、[OEMRun]、[Windows PE](除Restart项)、[UpdateSystem]、[Windows PE]中的Restart项。当然实际上,Winbom.ini文件中远不止这些部分,但对于通常的制作,这些关键项已足够。我们可以打开手上这张Windows XP OPK CD的Winbom.ini文件直观地看看,内容出乎意料的简单吧?由于Winbom.ini的支架已经写好,默认参数也已设定,若要自定义,只要加入其所包含各项的命令参数就能达到你想要的启动效果,当然这种定义也是有一定限制的,详细设置方式可阅读Windows XP OPK CD上的参考说明,都是非常简明的英语,并且大多数都有例子说明,所以并不难懂。
2.制作Windows PE的可启动ISO副本
上文已提到,通常我们拿到的Windows XP OPK CD是Windows PE基于32位版本的可引导副本,通过自定义启动过程可以取得一定的自由性。但如果希望配置Windows PE使用不同的驱动程序组、或加入自定义的程序等,上述方法就不可取了。这时可创建自定义的Windows PE版本,这当然也是Windows PE最有特点之处。在加入自定义特性之前,让我们先来看一下Windows PE自定义版本的创建过程:
1.在硬盘上创建一个新目录,假设为“build_location”。
2.将OPK CD插入CD驱动器,下面指定表示为“cd_drive”。
3.将cd_drive\Windows PE下的所有文件复制到build_location目录。
4.将cd_drive\tools\platform目录中的Factory.exe和Netcfg.exe文件复制到build_location目录。如果正在创建Windows PE的32位版本,对应Platform的值为x86。
5.从CD驱动器取出OPK CD。
6.如果正在创建Windows PE的32位版本,将Windows XP Professional CD插入CD-ROM中。
7.在命令行模式下进入build_location,运行以下命令:
Mkimg.cmd source_directory destination_directory [image_name]
上面提过,CMD类似于BAT批处理文件,Mkimg.cmd与Startopk.cmd在同一目录,你发现它还可以带参数运行:其中“source_directory”用于指定Windows XP Professional 32位版本CD的位置,如果source_directory是CD-ROM,则只需指定驱动器号,要注意在source_directory中不要包括后置斜杠;“destination_directory”用于指定生成版本的存放路径(不是ISO文件,而是硬盘版本)。“image_name”可选,当然这里的目的是要生成ISO镜像文件,所以应在此指定其路径和文件名。需要注意,你可将ISO文件刻录到CD上,若要此CD能够成为系统启动光盘,请在创建ISO文件前删除i386目录下的Bootfix.bin文件。
3.自定义特性的加入
按照上面的步骤就可制作出Windows PE的可启动ISO副本,但显然还没有做什么自定义的工作。进入Windows XP OPK CD中的Windows PE目录,可看到除了上面提到的Mkimg、Startopk文件外,还另有一个CMD文件:Startnet.cmd,上面已经说过Windows PE引导系统启动到后期,就会执行Startopk.cmd。然而当你创建自己的Windows PE版本时,它将使用Startnet.cmd中的命令而不是Startopk.cmd了。默认Startnet.cmd文件并没有直接使用“factory -Windows PE”命令,我们大致看一下其中的内容:
regsvr /32 /s netcfgx.dll
factory -minint
netcfg -v -Windows PE
net start dhcp
net start nla
a:\floppy.cmd
你可看到Startnet.cmd的这一版本包括factory -minint命令(意思是使用“即插即用”安装网络接口卡),而后面那些命令更可灵活控制安装和启动网络服务。显然,对Startnet.cmd我们有自由的修改权利,因此可使自定义的Windows PE副本按照我们的意愿去执行启动任务。例如在Startnet.cmd加入“net use e: \\网络某可见服务器\此计算机的共享目录”命令,那么Windows PE启动后就自动将这一服务器(即网上邻居中可见的域中主机)的共享目录映射为本地硬盘E了。而更复杂、更自由的操作方式是通过编写CMD文件来处理,例如Startnet.cmd默认中的“a:\floppy.cmd”命令。
Floppy.cmd是一个可选命令,这一文件中可包含通常在命令提示符下运行的任何命令,例如启动应用程序或打开运行脚本的其他命令行窗口。你只要编写Floppy.cmd,并将其放到软盘的根目录下(也可使用其他文件名和存储位置,但要相应修改Startnet.cmd的内容),待到使用Windows PE启动系统时,将此软盘放入软驱,即可实现更为灵活的自定义内容。例如在Floppy.cmd加入命令“format c: /fs:ntfs”,那么Windows PE在启动时如果搜索到有Floppy.cmd文件,就会执行将C盘格式化为NTFS格式的命令;当然如果没有把软盘放入软驱,Windows PE也不会出错。这实际上给了我们极大的自由度,通过控制“a:\floppy.cmd”文件的编写而使Windows PE启动时做出多样化执行任务的选择。例如在本文连载(上)中所提到的,如果是新机器,你可将分区、格式化、转换文件格式等一系列磁盘管理命令编写成Diskpart脚本,然后加入到Floppy.cmd中,这样使用Windows PE启动机器后,就会自动完成分区等一系列操作,大大减轻了工作的繁琐程度,特别是在完成批量装机等重复任务时,工作的强度将大为降低。