分享

创建一个属于自己的 WinPE(3.1)

 淡墨凝芳 2016-05-25

酝酿了很久,观望了很久,使用了很久别人的PE,终于决定自己动手创建一个属于自己的 WinPE,一个简洁实用的 WinPE。

本人属于 WinPE 的初学者,所以肯定有所纰漏的。期间所有的问题均在 Baidu,Google 的支持之下。感谢Wing大,飞飞和鱼非子的文章和作品,特别是Wing大的文章和飞飞的补充,外加参看他们的成品,给了我很大的启发。当然微软自家的文档的确堪称典籍,不可或缺。

参考文献:

鱼非子:http://hi.baidu.com/zhou3388/blog/item/bb752e3300fa721cbba16760.html

Wing:http://www./archives/2011_02_857.html

           http://www./archives/2011_02_862.html

           http://www./archives/2011_03_868.html#more-868

飞飞:http://www./archives/2012_04_1018.html

微软:C:\Program Files\Windows AIK\Docs\CHMs\           (WAIK 默认目录安装之后即可得)

首先我先表述一下自己的一些原则:

1、我制作 WinPE 的用途是用于PC的维护,以及操作系统安装的前期准备,毕竟谁都不喜欢Win7自己保留的那100MB的分区。

2、在操作系统崩溃的情况下能够用 WinPE 将需要的数据通过USB备份到移动硬盘上,然后重装系统,包括抢救 Linux 分区的数据。

3、通过长时间的使用个人认为系统恢复的功能是非常鸡肋的,恢复完的系统即使可以用,但谁都不会放心在其上运行重要程序。

4、网络功能同样如同鸡肋,费了好大力气,解决了种种问题,很有可能因为一个新型号网卡的出现而化为乌有,并且集成驱动将使WinPE的体积失去控制,注册表臃肿无比,降低了WinPE的运行效率。

5、WinPE 是一个环境并不是一个操作系统,因此不求面面俱到功能强大,只求高效简洁,实用。

6、将不会集成任何 Windows 系统安装器,我还是喜欢安装盘源生引导的安装方式,自然纯正。

其次实现方式的选择:

1、WinBuilder 的确是一个制作 WinPE 的利器,但毕竟是老外的作品,使用它做出来的 WinPE 是个中英文混血版,稍稍有点不伦不类,而且体积臃肿,更要命的是加入到 WinPE 的文件你自己无法控制。这点我和飞飞一样是无法容忍的。最简洁的选项也会是 WinPE 的体积暴涨至200MB以上,要是再自己集成个把顺手的工具体积就更难以控制,不利于之后整合在 Win7 安装盘之内。因此只能抛弃 WinBuilder。

2、Wing大及时变通,引入 PECMD 来解决一些需要通过修改多处注册表拷贝多个文件才能解决的问题。因此 PECMD 的首席辅助地位得以确立。

说了那么多废话让我们开始吧。

 

第1章 制作源生 WinPE 3.1

1.1 准备工作

WinPE全称 Windows Preinstallation Environment, 中文就是 Windows 预安装环境。其他的不用啰嗦,但我觉得有必要先说一下他的版本和名称问题。

WinPE 1.x 系列对应 Windows XP 和 2003,可以叫XPE,需要注意的是 Windows XP Embedded 也简称XPE,不过在PE领域,XPE应该不具有误导性。相应的,WinPE 2.x 系列对应 Windows Vista 和 2008,也叫 VistaPE。WinPE 3.x系列是对应 Windows 7 和 2008R2,所以有时也叫 Win7PE。后面的小标号x则是对应各个sp版本,如某个PE 是 WinPE 2.2,即表示对应于Vista sp2,目前最新的 WinPE 3.1 就是对应于 Windws 7 sp1。

1.1.1 下载 WAIK

要制作源生 WinPE 3.1,需要从微软官网下载如下软件:

自动安装工具包:Windows Automated Installation Kit(简称WAIK)

我们需要下载的是 WAIK 3.0(KB3AIK_CN.iso)以及3.1的补充包(waik_supplement_zh-cn.iso)。

PS:WAIK 3.0 可以制作 WinPE 3.0,补充包就可以做3.1了。请自行在微软官网下载,软件很大。

1.1.2 工具软件的准备

① 虚拟机软件

VMware。制作过程中需要反复测试系统,所以这个是必须的。

② UltraISO

用来制作 ISO 文件的利器。

③ Win7 SP1 中文版安装镜像

如果你目前电脑上安装的系统就是 Win7 SP1 也是可以的。

④ 7-Zip 压缩软件

7-Zip 的优点是可以直接处理 wim 文件。

1.1.3 安装 WAIK 3.0

①使用 UltraIOS 的虚拟光驱功能加载 WAIK3.0 的光盘镜像(KB3AIK_CN.iso)。双击 StartCD.exe 开始安装,安装程序将检测当前的操作系统架构,然后自动选择相应版本安装。

1.1.4 安装 WAIK 3.1

①使用 UltraIOS 的虚拟光驱功能加载3.1的补充包(waik_supplement_zh-cn.iso)。

②打开提升了权限的命令提示符。单击“开始”->“所有程序”->“附件”,右键单击“命令提示符”,选择“以管理员身份运行”。

③将所安装的 WAIK 3.0 文件替换为 ISO 中相应的 WAIK 3.1 文件。 为此,请运行以下命令:

xcopy E:\ "C:\Program Files\Windows AIK\Tools\PETools" /ERDY

其中 E:\ 是 ISO 映像的根目录;引号内为WAIK 3.0的默认安装目录。

1.1.5 恢复 WAIK 3.0

当因为各种原因不想使用 WAIK 3.1 时,可以用以下方法恢复至 WAIK 3.0。

①单击“开始”,单击“控制面板”,双击“程序和功能”,然后单击“Windows 自动安装工具包”。

②单击“修复”。

1.2 预备知识

要制作 WinPE 3.1,了解以下知识很重要。下面这些资料复制于 WAIK 的帮助文件,请仔细阅读体会。

1.2.1 WinPE 3.1 的启动过程

① 加载特定媒体上的启动扇区(MBR)。将控制传递给 Bootmgr。Bootmgr 从启动配置数据 (BCD) 中提取基本的启动信息,并将控制权传递给 Boot.wim 中包含的 Winload.exe 文件。然后 Winload.exe 加载相应的硬件抽象层 (HAL),并加载系统注册表配置单元和必需的启动驱动程序。完成加载后,将会准备执行内核 Ntoskrnl.exe 的环境。

② 执行 Ntoskrnl.exe,完成环境设置。将控制权传递给会话管理器 (SMSS)。

③ SMSS 加载注册表的剩余部分,配置运行 Win32 子系统 (Win32k.sys) 的环境及其各种进程。SMSS 加载用于创建用户会话的 Winlogon 进程,然后启动服务和剩余的非必要设备驱动程序及安全子系统 (LSASS)。

④Winlogon.exe 根据注册表值 HKLM\SYSTEM\Setup\CmdLine 来运行设置。如果存在 %SYSTEMDRIVE%\sources\setup.exe,Winpeshl.exe 将启动它,否则 Winpeshl.exe 将查找在 %SYSTEMROOT%\system32\winpeshl.ini 中指定的应用程序。如果未指定任何应用程序,则 Winpeshl.exe 将执行 cmd /k %SYSTEMROOT%\system32\startnet.cmd。默认情况下,Windows PE 包含一个将启动 Wpeinit.exe 的 Startnet.cmd 文件。Wpeinit.exe 加载网络资源,并与网络组件(如 DHCP)进行协调。

⑤ Wpeinit.exe 完成后,将显示命令提示符窗口。此时,WinPE 3.1的启动过程完成。

1.2.2 WinPE 3.1的启动目录结构

├─bootmgr

├─boot
│ │─bcd
│ │─boot.sdi
│ │
│ └─fonts
│ └─chs_boot.ttf
│ └─wgl4_boot.ttf
└─Sources
└─boot.wim

以上就是微软默认的WinPE3.1启动目录结构。

1.3 制作源生WinPE3.1

根据1.2小节中的知识,如果不修改任何启动配置文件,严格按照1.2.2的目录结构安排文件,我们就可以得到一个 WinPE3.1 了;当然,我们还需要一个MBR,这个可以从Win7安装光盘映像中提取。以下就是按照这个思路制作 WinPE3.1 的具体步骤:

1.3.1 按照1.2.2中的目录内容从(waik_supplement_zh-cn.iso)中提取相应的文件,提取的文件先保存在一个临时目录中,结构应该与1.2.2所示一样。(waik_supplement_zh-cn.iso)中的 winpe.wim 文件对应 1.2.2 中的 boot.wim 文件,请提取后改名。

创建一个属于自己的WinPE(3.1) - zzorz - zzorz

注:制作32位版本的PE请从X86文件夹中提取文件,64位请从AMD64文件夹中提取文件。

1.3.2 使用 UltraISO 加载 Win7SP1 安装镜像,提取启动文件,也保存在临时目录中。

1.3.3 UltraISO 新建“启动光盘映像”,启动文件使用 1.3.2 中保存的启动文件,并将 1.3.1 中提取的文件目录等放入这个映像,并保存。

1.3.4 可以使用 VMware 测试了。效果如图:

创建一个属于自己的WinPE(3.1) - zzorz - zzorz

1.4 小结

本章所制作的源生 WinPE3.1 只有一个命令行窗口,并不具备使用价值。但是通过制作,可以学习一些 WinPE 的基本知识并熟悉工具软件的用法,为以后的制作打好基础。并且我们在本章中安装了 WAIK,我们以后要用到WAIK提供的许多工具软件(如Dism、ImageX等等),并且 WAIK 的帮助文件对初学PE者来说是宝典类的读物,希望大家有机会通读一遍。

 

第2章 使用 WAIK3.1 来制作 WinPE3.1

对于第1章制作的源生PE,主要是让大家了解一下目录结构以及初学者可以在其基础上添加各种模块已达到制作的目的。而我将与飞飞一样,用 WAIK 的命令行来完成真正源生的 WInPE3.1。

2.1 准备工作

我们即将拷贝大量的文件,这是个枯燥而又细致的活,好的准备能让我们减少出错的概率,提高效率。

2.1.1 工具软件的准备

① Beyond Compare

文件夹比较同步利器,拷贝大量需要保持原有目录格式的文件时的不二之选。

创建一个属于自己的 WinPE(3.1) - zzorz - zzorz

② RegistryWorkshop(简称RW吧)

这个不是必备的,你可以用 regedit 直接操作注册表,但RW可以批量自动查找与替换、批量删除、注册表对比等,在准备PE注册表时,要用到批量删除与修改(若不用 RW,还真难办)。安装后,不必注册,试用期有30天。(官网:http://www./

这里顺便提一下怎样编辑注册表文件,供不懂的人参考(我也是最近才搞清楚,其实还挺复杂的,我相信搞懂的人不多,特别是权限问题):运行 regedit.exe 或启动 RW 后,加载的是正在运行的 Windows 的注册表,你编辑后,当即生效(没有保存这一说)。

问题1:怎样编辑 PE 的注册表?是否需要启动 PE 才能编辑 PE 自己的注册表?

答:不用,在 Window s下你可以从菜单→文件→ Load hive,分别加载 PE 的 SOFTWARE/SYSTEM/DEFAULT 的注册表文件,取一个名字(例如PE-SOFT)来进行编辑;编辑完成后,Unload hive 即可(需要选中 PE-SOFT 注册项 Unload hive 才变成可点击)。若用 RW,则 Unload 时,可能会提示无权限,退出 RW 重新进入就可以了。

问题2:怎样将安装光盘的 Install.wim 中的注册表的某一项(例如 HKLM-SOFTWARE 下的某一项)更新到PE的注册表相同的文职?

答:方法是先导出为 reg 文件,再导入到 PE 中。步骤:先加载 Install.wim 中的注册表(如 SOFTWARE ),加载命名为 PE-SOFT,找到导出项,导出成 xxx.reg,卸载;然后加载 PE 的 SOFTWARE,同样命名为 PE-SOFT(必须与刚才同名),导入 xxx.reg,再卸载即可。

问题3:怎样克服注册表修改的权限问题?

答:很多人都说必须在PE环境中直接修改PE自己的注册表,因为在 Windows 下因为权限问题不能修改加载的 PE 注册表。我费了好大劲,才知道有办法(注意过程的细节,否则不行):①先将所有者变成自己:选中加载后的 PE-SOFT 项,右键单击 PE-SOFT→权限→高级→所有者→选中自己的账户→注意勾选“替换子容器和对象的所有者”→应用,先退出全部对话框,再重复右键单击 PE-SOFT→权限→高级→添加账户→将自己的账户添加进权限清单→勾选所有权限→将应用于改成“This key and subkeys”→注意勾选下面的两个选项框→应用。这时,你发现可以修改和删除 PE-SOFT 中的注册项了。

③ 准备好待拷贝的 Win7 文件

目的:将 WAIK 原生PE缺失的文件,从这里拷贝。

可以将Win7 安装光盘中 \sources\Install.wim 映像文件拷贝到一个目录(如:G:\Win7SP1),再用imagex命令将其解压缩,例如:

imagex /apply g:\Win7SP1\install.wim 4 g:\Win7x64

其中的4表示第二个映像,为 Win7 旗舰版的映像,文件是最全的。

也可以通过 WinPE 将新安装好的 Win7 系统盘中的文件拷贝到另外一个目录,安装好的 Win7 比从 wim 中加载的文件可能要全些。

建议:不要用正在运行的在线 Win7 作为拷贝源,否则会出一些莫名其妙的问题(下面与本主题无关,仅阐述一些知识:在64位系统中, System32 中存放的是64位文件,而 SysWow64 中存放的是32位文件。例如:如果你是64位 Win7,当你用32位自编软件查找、读取或拷贝 C:\Windows\system32 下的文件时,实际读取的是 SysWow64 下的文件,因为32位软件访问 system32,Win7 会把它转到 SysWow64,Wow64 的含义是 Windows on Windows 64-bit,这就是为什么32为程序在64位系统下运行效率反而低的缘故)。

注意:有的厂商的 install.wim 文件不含中文包,中文包在 Win7 安装过程中从别的地方拷贝,HP工作站就是这样,飞飞在这里折腾了很久才发现 install.wim 中文件缺了很多(你可以检查加压缩后的 Windows\zh-cn\explorer.exe.mui 文件是否存在来确定)。这时,你可能要先在一台机器上安装一次,用PE将安装好的 Win7 整个C盘文件拷贝到另外的目录(作为文件源)。

2.2 用 WAIK 制作源生 WinPE3.1

WAIK 提供了创建本地 Windows PE 构建环境的自定义构建脚本 (Copype.cmd)。Copype.cmd 在所有要求的文件中创建了体系结构特定的目录结构和副本。

右键以管理员运行Waik的部署工具命令提示符下运行 Copype.cmd 脚本。该脚本位于 C:\Program Files\<version>\Tools\PETools 中。该脚本需要使用两个参数:硬件体系结构和目标位置。

copype.cmd <arch> <destination>

其中,<arch> 可以是 x86 或 amd64,<destination> 是本地目录的路径。例如:

copype.cmd x86 c:\winpe_x86

此脚本会创建以下目录结构并复制该体系结构的所有必要文件。

\winpe_x86
\winpe_x86\ISO
\winpe_x86\mount

\ISO 目录包含使用 Oscdimg 工具构建 .iso 文件的所有必要文件,Windows PE 映像 (boot.wim) 除外。必须使用默认的 Windows PE 映像 (winpe.wim) 创建自定义 boot.wim,然后将 boot.wim 复制到 \ISO\sources 文件夹。通过 ImageX 或 DISM 工具,可以使用 \mount 目录来装载 Windows PE 映像。必须创建每个硬件体系结构的单独构建环境。默认情况下,Windows PE 会分配 32 MB 的可写内存(称为暂存空间)。可以使用 dism /Set-Scrtachspace 将暂存空间增加到 512 MB(具体格式见下部批处理文件的相关命令)。

为了避免重复在 DOS下输入命令,一般会建立一些 bat 或 cmd 批处理文件。为了方便以后重复操作,一般会建立一些参数。在 Windows 中建立了几个系统环境变量(点击开始,搜索框中输入“环境变量”即可调出“编辑系统环境变量”对话框),然后建立以下几个环境变量,如:

PE_WORK_DIR = G:\WinPE ( WinPE 工作目录,存放编辑过程中的 winpeshl.ini、批处理等。)

PE_FILE_DIR = F:\WinPE_x86 (自己生成的 WinPE。)

PE_WIN7_DIR = G:\Win7sp1 (Win7 文件源。)

用 WAIK 建立原始 PE 文件:

右键以管理员运行 WAIK 的部署工具命令提示,运行以下批处理:

-------------------批处理文件.bat------------------------

rem 创建目录构架:

call copype.cmd x86 %PE_FILE_DIR%

rem 加载(解压缩)boot.wim

imagex /apply %PE_FILE_DIR%\winpe.wim 1 %PE_FILE_DIR%\mount

----------------------文件末端----------------------------

2.3 加载程序包

按自己的需要,加载 WAIK 自带的程序包。

WinPE 3.1 提供以下可选程序包:

 程序包名称

 描述
WinPE-FONTSupport-<region> 对以下语言的其他字体支持:ja-JP、ko-KR、zh-CN、zh-HK 和 zh-TW。
WinPE-HTA HTML 应用程序支持。能够使用 Internet Explorer 脚本引擎和 HTML 服务创建 GUI 应用程序。
Winpe-LegacySetup 媒体设置功能程序包。Windows Media 上 \Sources 文件夹中的所有安装文件。在为 Windows 媒体上的安装文件或 \Sources 文件夹提 供服务时,添加此程序包。必须随设置功能程序包一同添加。若要将新的 Boot.wim 添加到媒体,除了设置和媒体程序包之外,还要添加子程序包。支持 Windows Server? 2008 R2 安装需要使用此程序包。
WinPE-MDAC Microsoft(R) 数据访问组件支持。使用 Active Directory 对象 (ADO) 启用 SQL Server 查询。用法示例:根据唯一的系统信息构建动态无人参与文件。
WinPE-PPPoE 启用以太网上的点对点协议 (PPPoE) 支持。从 Windows PE 创建、连接、断开和删除 PPPoE 连接。
WinPE-Scripting Windows 脚本主机 (WSH) 支持。能够使用 WSH 脚本对象处理批处理文件。
WinPE-Setup 设置功能程序包(父)。客户端和服务器公用的 \Sources 文件夹中的所有设置文件。
WinPE-Setup-Client 客户端设置功能程序包(子)。客户端设置品牌文件。必须在设置功能程序包之后添加。
WinPE-Setup-Server 服务器设置功能程序包(子)。服务器设置品牌文件。必须在设置功能程序包之后添加。
WinPE-SRT Windows 恢复环境功能程序包。提供用于自动系统诊断和修复以及创建自定义恢复解决方案的恢复平台。
WinPE-WMI Windows Management Instrumentation (WMI) 支持。启用最低系统诊断的 WMI 提供程序子集。
WinPE-WDS-Tools Windows 部署服务工具功能程序包。包括 API,以便使用自定义的 Windows 部署服务客户端和映像捕获实用程序来启用多播方案。

WinPE-DOT3SVC 添加.NET Framework 3.0,用以支持相关软件。以后添加的许多软件都需要该包的支持,请添加。

注意: 

1、基本 Windows PE 映像不包含上面列出的所有程序包。您必须使用 DISM 工具来安装适当的程序包。这些程序包位于目录 \Windows OPK\Tools\PETools\_architecture 或 \Windows AIK\Tools\PETools\_architecture 中。为了使可选组件正常运行,请确保在客户端计算机上安装了必需的语言资源。位于某个文件夹中的语言资源与上面列出的目录中安装的语言具有相同的名称。

2、winpe-xml 程序包现在位于基本boot.wim 中。

3、WinPE-setup 是 winpe-setup-client 和 winpe-setup-server 的父程序包。在安装子程序包之前必须安装 winpe-setup。

一般加载以下几项,批处理文件内容如下:

-------------------批处理文件.bat------------------------

set FP=C:\Program Files\Windows AIK\Tools\PETools\x86\WinPE_FPs

set Mou=%PE_FILE_DIR%\Mount

rem -----加载 WAIK 程序包-----

dism /image:%Mou% /add-package /packagepath:”%FP%\WinPE-HTA.cab”

dism /image:%Mou% /add-package /packagepath:”%FP%\zh-cn\WinPE-HTA_zh-cn.cab”

dism /image:%Mou% /add-package /packagepath:”%FP%\WinPE-MDAC.cab

dism /image:%Mou% /add-package /packagepath:”%FP%\zh-cn\WinPE-MDAC_zh-cn.cab”

dism /image:%Mou% /add-package /packagepath:”%FP%\WinPE-Scripting.cab”

dism /image:%Mou% /add-package /packagepath:”%FP%\zh-cn\WinPE-Scripting_zh-cn.cab”

dism /image:%Mou% /add-package /packagepath:”%FP%\WinPE-WMI.cab”

dism /image:%Mou% /add-package /packagepath:”%FP%\zh-cn\WinPE-WMI_zh-cn.cab”

dism /image:%Mou% /add-package /packagepath:”%FP%\WinPE-PPPoE.cab”

dism /image:%Mou% /add-package /packagepath:”%FP%\zh-cn\WinPE-PPPoE_zh-cn.cab”

dism /image:%Mou% /add-package /packagepath:”%FP%\WinPE-DOT3SVC.cab”

dism /image:%Mou% /add-package /packagepath:”%FP%\zh-cn\WinPE-DOT3SVC_zh-cn.cab”

echo 设置运行内存

dism /image:%Mou% /Set-ScratchSpace:256

echo 显示已经加载的程序包

dism /image:%Mou% /Get-Packages

----------------------文件末端----------------------------

现在,你可以卸载 PE(重新生成 wim )并打包 ISO,测试一下 PE 是否运行正常,批处理命令为:

-------------------批处理文件.bat------------------------

Echo 生成 boot.wim 映像文件…

imagex /boot /compress maximum /capture %PE_FILE_DIR%\mount %PE_FILE_DIR%\ISO\sources\boot.wim “WinPE 3.1”

Echo 生成 ISO 文件…

oscdimg -n -b%PE_FILE_DIR%\etfsboot.com %PE_FILE_DIR%\ISO g:\winpe\winpe_x86.iso

DIR %PE_FILE_DIR%\ISO\sources\boot.wim

----------------------文件末端----------------------------

注:加载和卸载 wim,win7 的 WAIK 是用 dism 命令。但 dism 在卸载时会删除 mount 目录,不便于测试。在测试过程中,还是用以上的 imagex 命令方便。

2.4 拷贝缺失的文件

思路:将刚才生成的原始 PE,与参考 PE 的文件清单对比,将缺失的文件从 Win7 文件源中拷贝过来,从而生成与参考 PE 相同的文件,由于文件是从 Win7 的干净目录中拷贝的,生成的 PE 是干净的目标 PE。

注意:Waik 原始 PE 中已存在的文件在拷贝过程中不要替换,否则可能文件版本不同,与注册表不匹配,例如:原始 PE 是 IE8,Win7 是 IE9,可能会出问题。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多