前言:虽然有winbuilder一类优秀的制作pe的工具,我还是打算写一个从WAIK入手,”手工”制作winpe并加入explorer的教程.此教程很基本,分为两个部分(后加入文件列表部分,共3部分),前面部分提及winpe及waik的基础知识,以及用waik添加程序包,通过修改win7sp1安装文件中的注册表software配置单元实现explorer的初步加入;后面部分介绍explorer的完善和设置,windows功能的添加,以及对winpe精简和合盘等的一些讨论.我写的这些主要来自于自己做pe的一些积累,waik的帮助文件和winbuilder的脚本,另外一些关键的问题很多是在wuyou,boot-land等论坛得到解决的,pe文件的加入部分也参考了很多他人的pe,还有很多问题都是通过google搜索解决.希望大家在看完本文后也都能做出自己满意的pe.
下面以64位winpe3.1为例,介绍制作带explorer的win7pe的操作过程.最终得到一个功能较为全面的winpe,如我的pe3.1, wingwy-pe3.1-v2.iso
http://www.wingwy.com/archives/2011_02_851.html
注:此文很多是回忆内容,文中难免很多错误,欢迎大家指出并讨论.
1 winpe和WAIK的一些基本知识
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.3.x系列是对应windows 7和2008R2,所以有时也叫win7pe.后面的小标号x则是对应各个sp版本,如某个pe是winpe2.2,即表示对应于vista sp2,目前最新的winpe3.1就是对应于win7 sp1.
1.2 WAIK全称Windows Automated Installation Kit,意为自动安装工具包.我们做pe主要用到他的2个工具,imagex和dism. 要制作winpe3.1,目前需同时下载WAIK3.0(KB3AIK_CN.iso 含制作工具,)和3.1的补充包(waik_supplement_zh-cn.iso 含新的wim文件). 注:以后微软可能会把这两个整合到一起.
另外,winpe2.0以后,程序系统和语言包都是分离的,WAIK的语言版本也就不是问题了,各个版本都含有对应的语言包,只需要自己添加就行了. 下面的例子是以中文版为例,其他语言版本也可.
2 准备工作
理想情况下,我建议大家准备好两个waik的iso文件和win7sp1的中文版安装镜像.要中文版win7主要是为了让最后制作出来的带explorer的winpe完全中文化.
如果你没有win7sp1中文版安装iso,只要你的操作系统是win7sp1中文版就可以了(这可以通过安装中文sp1包升级,我下面的例子就是这样的).如果这个条件还是不满足,下载我的pe, wingwy-pe3.1-v2.iso 里面的文件基本上就够了.
其他软件可以主要是ultraliso和Registry Workshop.
3 winpe的基本制作
WAIK其实提供了快速生成简单pe的脚本,不过为了使大家更好的了解pe,我们在这里手动完成.
3.1加载waik_supplement_zh-cn.iso进入amd64文件夹,拷贝boot文件夹bootmgr文件到 D:\TEMP\winpe3.1\org\win7pe (路径随意,以后以这个路径为例).
3.2拷贝amd64文件夹下winpe.wim到D:\TEMP\winpe3.1\org\win7pe\sources 并改名为boot.wim
3.3用ultraiso打开win7安装文件,提取iso引导信息文件备用,比如存为boot.bif.
新建一个启动光盘,引导文件用刚才的boot.bif文件,把D:\TEMP\winpe3.1\org\win7pe\下所有文件加入这个启动光盘,保存称pe.iso.一个基本的winpe就完成了.用虚拟机测试一下吧,启动后就是一个cmd窗口,如下图
这个pe是最基本的,显然不好用,我们需要修改boot.wim文件加入程序包
4 程序包的加入
4.1 加载waik_supplement_zh-cn.iso进入amd64文件夹,拷贝WINPE_FPS到D:\TEMP\winpe3.1\org\win7pe (路径随意,以后以这个路径为例)
4.2 新建文件夹D:\TEMP\winpe3.1\org\mount 在开始菜单上打开Windows AIK中打开”部署工具命令提示”如下
4.3 展开imagex以供修改,运行如下代码:
imagex /apply D:\TEMP\winpe3.1\org\win7pe\sources\boot.wim 1 D:\TEMP\winpe3.1\org\mount
4.4 添加程序包
AIK的说明文件里面有详细介绍,推荐添加以下6个包
WinPE-HTA:HTML 应用程序支持。
WinPE-MDAC:Microsoft(R) 数据访问组件支持。
WinPE-Scripting:Windows 脚本主机 (WSH) 支持。
WinPE-WMI:Windows Management Instrumentation (WMI) 支持。
WinPE-PPPoE:启用以太网上的点对点协议 (PPPoE) 支持。(如ADSL)
WinPE-DOT3SVC:IEEE 802.X 身份验证协议支持。(如WiFi)
命令格式如下:
dism /image:D:\TEMP\winpe3.1\org\mount /Add-Package /PackagePath:”D:\TEMP\winpe3.1\org\WINPE_FPS\winpe-wmi.cab”
添加其他程序包格式一样,只需修改cab文件路径,别忘了各个程序包还有相应的_ZH-CN.CAB包.
注:如果是英文版的WAIK,还需要先添加WINPE-FONTSUPPORT-ZH-CN和LP_ZH-CN包,然后设置:
dism /image:D:\TEMP\winpe3.1\org\mount /set-uilang:zh-cn
dism /image:D:\TEMP\winpe3.1\org\mount /set-syslocale:zh-cn
dism /image:D:\TEMP\winpe3.1\org\mount /set-userlocale:zh-cn
dism /image:D:\TEMP\winpe3.1\org\mount /set-inputlocale:0804:00000804
dism /image:D:\TEMP\winpe3.1\org\mount /set-timezone:”China Standard Time”
dism /image:D:\TEMP\winpe3.1\org\mount /set-SKUIntlDefaults:zh-cn
最后删除英文包:
dism /image:D:\TEMP\winpe3.1\org\mount /Remove-Package /PackageName:Microsoft-Windows-WinPE-LanguagePack-Package~31bf3856ad364e35~amd64~en-US~6.1.7601.17514
5 explorer初步加入winpe
5.1 好了,大家估计都急着让pe运行explorer了.我们把explorer加入到windows目录下,运行
imagex /capture /compress fast /boot D:\TEMP\winpe3.1\org\mount D:\TEMP\winpe3.1\org\win7pe\sources\boot.wim “winpe” “winpe”
重新打包boot.wim,并替换掉pe.iso中的boot.wim,保存后放入vm测试.在启动后还是一个cmd窗口.直接输入explorer.exe,你看到了什么? 系统提示缺少ExplorerFrame.dll.
显然,单独加入explorer.exe是不行的.简单的说windows系统程序的正常运行至少要满足两点,一个是相关的支持文件出现在正确的路径中(如各个dll文件和mui文件等),另外一个就是正确的注册表配置(程序运行的设置和支持文件的路径等).
好,明白了这个,一切就很清晰了,基本的explorer运行并不需要任何第三方程序的加入或是对微软的文件进行任何修改.只要添加了支持explorer运行的文件,配置好了注册表,就可以在winpe中正常运行explorer了.
5.2 其中文件的加入部分我这里不想细讲,因为它既繁琐又简单,意义不大.为什么呢?你运行程序,它提示你少什么文件,你加入就是了.如果你有耐心,可以一个一个加(当然,有时候他并不会提示你缺少某个文件,而explorer还是不能运行).文件的加入相对于注册表的是显而易见的,即使是才接触计算机的网友,只要他会复制和粘贴就没问题.另外,你还可以用鼠标右键看文件说明。
详细的文件列表可以参见 给winpe添加explorer教程(续):文件列表 http://www.wingwy.com/archives/2011_03_868.html
其实pe的制作就是不断地积累,吸收前人的经验,我更喜欢先对比别人的pe,看看别人都加了些什么文件,换一个思路,先添加足够的文件,运行起了explorer后再删除. 因此我建议你直接把我的wingwy-pe3.1-v2.iso中winpe.wim文件展开. 同时展开win7sp1的install.wim文件,依照我我的pe文件列表复制win7的安装文件到你要做的pe目录,D:\TEMP\winpe3.1\org\mount 下.(实现此步有很多办法,比如用xcpoy带/s /h /d /y 参数). 实在不行就直接复制我pe展开的文件,注意不要替换文件.
5.3 好了,该动pe的注册表了,注意D:\TEMP\winpe3.1\org\mount\Windows\System32\config 下的三个文件 software, system 和 default . 用注册表编辑器加载software单元,命名为pe-soft全部导出为soft-init.reg后,卸载pe-soft配置单元.
5.3.1 打开win7sp1的install.wim文件(可以用7-zip,用imagex展开也可),定位到Windows\System32\config下,把software文件加载到注册表,同命名为pe-soft. 一会儿你会遇到权限问题,可先在”权限”-“高级”中替换”所有者”为你当前用户.再在”权限”中添加好权限.
5.3.2 在pe-soft下搜索Interactive User,找到后全部删除.
5.3.3 在pe-soft下搜索D:\ 全部替换为X:\
5.3.4 导入刚才的soft-init.reg替换掉win7安装文件的,卸载pe-soft
5.4 用imagex打包,生成iso后启动vm测试.还是命令提示符窗口,不过你现在运行explorer.exe.看看,熟悉的explorer是不是已经出来.
好了explorer已经成功运行了,不过显然达不到我们要的效果,比如就没有任务栏,没有桌面,下面就继续修改注册表.
5.5 把任务栏和桌面显示出来
5.5.1 加载pe的software文件到注册表,命名为pe-soft,找到pe-soft下\Microsoft\Windows NT\CurrentVersion\Winlogon下,把”Shell”=”cmd.exe /k start cmd.exe” 改成 “Shell”=”explorer.exe”
5.5.2 找到你正在运行的win7的HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Svchost,导出全部项并添加到pe-soft下的Microsoft\Windows NT\CurrentVersion\Svchost.(此步骤在这里似乎不是必须的,不过为了其他功能的正常运行,建议添加)
5.5.3 合并打包测试,再运行explorer,任务栏和桌面都出来了(注: 可能有网友会质疑我的wingwy-pe3.1-v2.iso里含有第三方文件,不过你可以把它们全部删除后打包测试,不影响运行explorer,调出任务栏和桌面).
至此,我们在不修改原版文件,不添加第三方文件的基础上初步实现了explorer的运行.不过大家也看到,这样一个pe显然是不能让人满意的,更多的后续设置以及windows功能的添加和讨论,请关注 “给winpe添加explorer教程(下):Explorer的完善设置与其他讨论”