标题: Windows PreInstallation Environment深入研究 [打印本页] 作者: cqmis 时间: 2003-11-27 19:40 标题: Windows PreInstallation Environment深入研究
Windows PreInstallation Environment(WinPE)直接从字面上翻译就是“Windows预安装环境”,微软在2002年7月22日发布,它的原文解释是:“Windows预安装环境(WinPE)是带有限服务的最小Win32子系统,基于以保护模式运行的Windows XP Professional内核。它包括运行Windows安装程序及脚本、连接网络共享、自动化基本过程以及执行硬件验证所需的最小功能。”换句话说,你可把WinPE看作是一个只拥有最少核心服务的Mini操作系统。微软推出这么一个操作系统当然是因为它拥有与众不同的系统功能,如果要用一句话来解释,我认为与Win9X/2000/XP相比,WinPE的主要不同点就是:它可以自定义制作自身的可启动副本,在保证你需要的核心服务的同时保持最小的操作系统体积,同时它又是标准的32位视窗API的系统平台。当然,现在这么说也许难以理解,没有关系,下面让我们来仔细研究它。
WinPE概览
即使有刚才的解释,你一定还是对这个全新概念的Mini操作系统一头雾水,没关系,在这里我将演示一下其运行的全过程,相信看过之后你或许就会有大致的了解。大多数人获得的WinPE光碟(包括我手上这张ISO镜像光碟)应该是一张“Windows XP OPK”CD,意思就是Windows XP OEM预安装工具包CD。实际上,Windows XP OPK CD是WinPE 32位版本的一个可引导副本,也就是说,这张CD已经是个用WinPE定义制作的操作系统了,我们可直接用它来引导系统。先看看这张CD的目录结构吧(图1),总共有352MB,是不是有些大呢?其实由于这是个副本(至少包含了不少驱动程序),大小是由当时自定义制作决定的,若是WinPE的32位非自定义版本,其在磁盘上的镜像大约为120MB。
1.引导WinPE
笔者考虑到网络环境等问题,主要的使用环境是VMware虚拟机和Virtual PC虚拟机,不过这两种虚拟机环境与实际PC环境几乎没有区别(就是说如果你不清楚虚拟机也没关系,就当是在真实PC上直接运行)。
将BIOS中设置成光驱引导,并开始启动系统,当屏幕画面上出现“Press any key boot from cd”时(图2),按任意键从光驱上的WinPE引导启动(图3、4)。如果你的存储设备驱动不被支持,在启动时按下F6键可加载特殊设备的驱动。当启动到桌面时系统会做一些如调整分辨率的工作(图5),最后打开默认的CMD命令行解释工具,大家看看,是货真价实的图形操作环境哦(图6)。
可以看到桌面上空空如也,不要指望可以拿鼠标点来点去,毕竟是个什么应用程序都没有安装的最小化图形操作系统。但它确实是标准的视窗环境,光碟上带有记事本,在命令行下输入“Notepad”并回车就可打开(图7);另外尽管光碟上带有的可执行的命令行工具有限,但明显可以自己添加,看看这是什么(图8)?没错,是我们最熟悉的扫雷游戏(现在知道题头所指了吧,呵呵),拿鼠标先玩玩吧,这是笔者从大家熟悉的WinXP操作系统中加入的(方法很简单,用ISO工具直接拷入刚才的镜像文件就可以了)。
那么还是先回到CMD命令行工具中吧。默认的目录是\I386\system32\,输入命令行“dir *.exe /w”可查看有哪些可运行的程序(图9)。下面我们实际研究一下对个人用户有实际意义的WinPE特性的操作。
在光碟镜像中可同时看到32位和64位操作系统的工具(图10),对于个人用户来讲,你可用它直接引导没有安装任何系统的机器,并在其上实现32位系统的许多功能,这在后面会一一道来。
2.WinPE对网络的支持
刚才dir时我们看到了ping命令,熟悉这个命令的读者应该都知道,只有安装了TCP/IP协议才能使用,那么不管三七二十一,先来ping自己试试吧,在CMD中键入“ping 127.0.0.1”,回车搞定(图11),显然是可ping通的,这证明TCP/IP协议确实已在运行。再试一试光碟上另一个命令IPConfig,键入运行(图12),看到IP地址已经自动分配好了。既然网络确实已经连接,那让我们来实际操作使用吧(这里可能有不少从视窗系统开始接触计算机的朋友会对操作不知所措,其实并没有想象中那么困难,你可以在CMD中使用命令工具带“/?”参数来查询具体使用方法,如果你机器上本来就装有XP,那么在帮助中心查询就更方便了,多实验一下,掌握命令行以后你会发现方便很多)。
现在我的物理机和虚拟机构成了一个虚拟网络,使用光碟镜像中的net命令,在虚拟机中键入“net view”查看已连接的服务器(图13),这里显示的服务器“XQ-B6QAS26953 EC”,名字表示虚拟机已通过网络连接了我的物理机器。我的物理机器上有一个名为TUKU的文件夹已经共享,所以再键入“net use e:\\XQ-B6QAS26953EC\TUKU”,意思是将物理机器上的共享目录TUKU镜像为虚拟机器上的E盘(图14),成功后可在虚拟机里自由地访问共享目录(图15),这时就可通过这个来做远程安装等工作。net命令还有不少参数,自己可以查阅并多加尝试,才可以发挥WinPE强大的网络环境功能,如果只是简单地访问服务器,上面的两个命令参数基本足够了。不过这里要记住用WinPE的机器可访问其他操作系统的机器,而逆操作是不能的,这是由于WinPE本身的限制,我们后面再讲这个问题。事实说明,WinPE启动后就可以使用网络环境。
2.有趣的硬盘使用功能
自定义的WinPE不仅可放到那些可移动存储设备如CD上,还可以放在硬盘上使用。因为许多朋友会认为将WinPE的自定义版本放在硬盘上没有什么意义,其实不然。把WinPE放在硬盘上应该是最为有趣的地方,且不说你的操作系统损坏无法进入的情况下启动硬盘上的WinPE可以方便地修复,关键是由于WinPE在硬盘上,所以在WinPE环境下安装应用程序就有了可能。呵呵,撇开题外话不讲,这里看一下如何把自定义的WinPE放到硬盘上吧(只能在硬盘上放置WinPE的32位版本)。
首先要安装恢复控制台:
(1)将Windows XP Professional CD放在CD-ROM驱动器中,这里指定其为cd_drive。
(2)在命令行CMD窗口中运行cd_drive\i386\winnt32.exe /cmdcons。
然后将WinPE自定义可引导副本放置在硬盘上,如下操作:
(1)在目标硬盘上,创建“C:\Minint”的目录(这里必须将目录命名为“Minint”)。
(2)将WinPE“根目录\i386”下的所有内容复制到C:\Minint。
(3)从WinPE根目录下将Winbom.ini复制到目标硬盘的根目录。
(4)在目标硬盘上,将“C:\Cmdcons\txtsetup.sif”的只读属性改为读/写。
(5)在目标硬盘上,将“C:\Minint\txtsetup.sif”复制到“C:\Cmdcons”进行覆盖。
(6)重新启动目标计算机。在“引导”菜单上,选择引导到“命令控制台”,计算机将使用WinPE引导。
3.Windows XP OPK CD的本职工作
上面说了其实我们拿到的是WinPE的一个可执行副本,即Windows XP OPK(Windows XP OEM预安装工具包)CD。从名字都知道它原来的本职工作是为了方便OEM工作的。如果你在Windows操作系统环境下打开光碟,它就会自动运行Autorun为你的系统安装一个“Windows安装管理器”的工具包(图31)。利用它,你可以轻易制造出带有计算机厂商OEM标志的Windows安装镜像。虽然这是Windows XP OPK CD的主要本职工作,但显然对我们个人没什么意义,当然,如果你想把手上的Windows安装CD都打上自己独有的印记,并在朋友的机器上安装时炫一下,那么使用它是个好主意。当然自己的“印记”绝非OEM标志那么简单,实际上你还可任意设定WinPE携带的软件,并可设置这些软件在WinPE启动时运行;理想的情形下你甚至可以为自定义的WinPE版本加上类似于Windows Explorer的图形外壳程序——要不怎么叫专为厂商OEM设计呢?
四、自定义WinPE
1.自定义Windows XP OPK CD的启动过程
这当然是最简单的自定义方法,简单到你只需在软盘上放一个自己编写的INI文件就可以了。
进入Windows XP OPK CD中的WinPE目录,可找到一个名为“Startopk.cmd”的文件,实际上此CD引导系统启动到后期,就会执行Startopk.cmd(这里的CMD文件类似于BAT批处理文件,可以手动编辑)。打开Startopk.cmd,里面只有一行命令“factory -WinPE”,其意思是找到Winbom.ini文件,并顺序处理这个文件中的命令部分。Winbom.ini对WinPE的启动过程至关重要,我们来看一下能默认用它实现哪些功能:
(1)将测试装置复制到目标计算机上,并运行硬件诊断程序。
(2)运行程序,例如分区和格式化驱动器的应用程序。
(3)使用“net use”命令建立网络连接,以及将目录更改到预安装映像的位置。
因此要自定义WinPE的启动过程当然不能放过Winbom.ini,这里的关键就是系统会如何找到这个文件了——因为原来CD介质上的Winbom.ini文件显然是不可改写的。这里WinPE做了一个巧妙的设计,使得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 -WinPE时,它将按下面顺序处理Winbom.ini文件中的命令部分:[WinPE.Net]、[DiskConfig]、[OEMRunOnce]、[OEMRun]、[WinPE](除Restart项)、[UpdateSystem]、[WinPE]中的Restart项。当然实际上,Winbom.ini文件中远不止这些部分(图1),但对于通常的制作,这些关键项已足够。我们可以打开手上这张Windows XP OPK CD的Winbom.ini文件直观地看看(图2),内容出乎意料的简单吧?由于Winbom.ini的支架已经写好,默认参数也已设定,若要自定义,只要加入其所包含各项的命令参数就能达到你想要的启动效果,当然这种定义也是有一定限制的,详细设置方式可阅读Windows XP OPK CD上的参考说明,都是非常简明的英语,并且大多数都有例子说明,所以并不难懂(图3)。
2.制作WinPE的可启动ISO副本
上文已提到,通常我们拿到的Windows XP OPK CD是WinPE基于32位版本的可引导副本,通过自定义启动过程可以取得一定的自由性。但如果希望配置WinPE使用不同的驱动程序组、或加入自定义的程序等,上述方法就不可取了。这时可创建自定义的WinPE版本,这当然也是WinPE最有特点之处。在加入自定义特性之前,让我们先来看一下WinPE自定义版本的创建过程:
1.在硬盘上创建一个新目录,假设为“build_location”。
2.将OPK CD插入CD驱动器,下面指定表示为“cd_drive”。
3.将cd_drive\winpe下的所有文件复制到build_location目录。
4.将cd_drive\tools\platform目录中的Factory.exe和Netcfg.exe文件复制到build_location目录。如果正在创建WinPE的32位版本,对应Platform的值为x86。
5.从CD驱动器取出OPK CD。
6.如果正在创建WinPE的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.自定义特性的加入
按照上面的步骤就可制作出WinPE的可启动ISO副本,但显然还没有做什么自定义的工作。进入Windows XP OPK CD中的WinPE目录,可看到除了上面提到的Mkimg、Startopk文件外,还另有一个CMD文件:Startnet.cmd,上面已经说过WinPE引导系统启动到后期,就会执行Startopk.cmd。然而当你创建自己的WinPE版本时,它将使用Startnet.cmd中的命令而不是Startopk.cmd了。默认Startnet.cmd文件并没有直接使用“factory -WinPE”命令,我们大致看一下其中的内容:
regsvr /32 /s netcfgx.dll
factory -minint
netcfg -v -WinPE
net start dhcp
net start nla
a:\floppy.cmd
你可看到Startnet.cmd的这一版本包括factory -minint命令(意思是使用“即插即用”安装网络接口卡),而后面那些命令更可灵活控制安装和启动网络服务。显然,对Startnet.cmd我们有自由的修改权利,因此可使自定义的WinPE副本按照我们的意愿去执行启动任务。例如在Startnet.cmd加入“net use e: \\网络某可见服务器\此计算机的共享目录”命令,那么WinPE启动后就自动将这一服务器(即网上邻居中可见的域中主机)的共享目录映射为本地硬盘E了。而更复杂、更自由的操作方式是通过编写CMD文件来处理,例如Startnet.cmd默认中的“a:\floppy.cmd”命令。
Floppy.cmd是一个可选命令,这一文件中可包含通常在命令提示符下运行的任何命令,例如启动应用程序或打开运行脚本的其他命令行窗口。你只要编写Floppy.cmd,并将其放到软盘的根目录下(也可使用其他文件名和存储位置,但要相应修改Startnet.cmd的内容),待到使用WinPE启动系统时,将此软盘放入软驱,即可实现更为灵活的自定义内容。例如在Floppy.cmd加入命令“format c: /fs:ntfs”,那么WinPE在启动时如果搜索到有Floppy.cmd文件,就会执行将C盘格式化为NTFS格式的命令;当然如果没有把软盘放入软驱,WinPE也不会出错。这实际上给了我们极大的自由度,通过控制“a:\floppy.cmd”文件的编写而使WinPE启动时做出多样化执行任务的选择。例如在本文连载(上)中所提到的,如果是新机器,你可将分区、格式化、转换文件格式等一系列磁盘管理命令编写成Diskpart脚本,然后加入到Floppy.cmd中,这样使用WinPE启动机器后,就会自动完成分区等一系列操作,大大减轻了工作的繁琐程度,特别是在完成批量装机等重复任务时,工作的强度将大为降低。
最后对自定义作一个总结:如果你不想制作WinPE的启动副本,可使用Windows XP OPK CD启动机器,并通过软盘上的Winbom.ini控制启动过程。如果想实现更多的自定义内容,请制作ISO启动副本,并将其刻录至光盘,这样启动机器后将通过光盘中的Startnet.cmd或软盘上的Floppy.cmd实现自定义。显然WinPE有着非常灵活而强大可控制的启动方式,这无疑是你选择它来替代其他启动方式的理由。 作者: cqmis 时间: 2003-11-27 19:41 标题: Windows PreInstallation Environment深入研究
该Windows PE自定义可引导副本放置在硬盘的方法操作如下
安装恢复控制台:
(1)将Windows XP Pro CD放入CD-ROM驱动器中,这里指定为%CDROM%。
(2)在命令行CMD中,运行%CDROM%\i386\winnt32.exe /cmdcons。
然后将Win PE自定义可引导副本放置在硬盘中,如下操作:
(1)在目标硬盘上,创建"C:\Minint"的目录(这里必须将目录明明为"Minint")。
(2)将WinPE"根目录\i386"下的所有内容复制到C:\Minint。
(3)从WinPE根目录下将Winbom.ini复制到目标硬盘的根目录。
(4)从目标硬盘上,将"C:\Cmdcons\txtsetup.sif"的制度属性改为读/写。
(5)在目标硬盘上,将"C:\Minint\txtsetup.sif"复制到"C:\Cmdcons"进行覆盖。
(6)重新启动目标计算机,在“引导”菜单上,选择引导到“命令行控制台”,计算机将使用WinPE引导。
操作方法copyed from某本杂志 《大众软件》??200303?? page 45!! 作者: LiLianjiang 时间: 2004-10-8 00:19 标题: Windows PreInstallation Environment深入研究