使用XP Embedded构建正版XP嵌入式环境,并打包为wim部署量产usbstick

需求分析

公司接到一个任务,为一家德资企业在中国的工厂制作国产的面板系统,面板系统包括软硬件环境:具体包括钣金、x86架构的工业PC、触摸屏及控制按键。
其中工业PC中应包括一套正版的XP Embedded嵌入式系统,以及该企业自己的专业软件,并最终制作成一个usb设备的PE系统,由其中的bat文件引导镜像的还原和恢复。
这家德资中国工厂原来的面板系统全部由德国进口,造价不菲,入驻中国后一部分中国的管理层期望能将这种面板系统国产化,我公司争取到这个机会。
硬件方面这里不提,由我公司硬件和电气工程师负责。
操作系统和软件方面主要由我负责,历时一周,基本每天加班到深夜,终于摸索得差不多了,本博文整理一下整个过程,帮助有需要的朋友,也趁着记忆犹新,给自己留一份备案记录。

XP Embedded构建定制版的XP

XP Embedded是构建嵌入式XP的开发环境,这个软件已经相当古老,网络上基本没有下载,我公司花钱从一家微软代理商那边买到正版的XP Embedded开发环境和一个序列号。对方表示这套开发环境已经相当老旧,不建议我们使用,推荐使用新版的WES2009,或者更高的WES7及WES8.1来构建windows 7和windows 8.1的嵌入式版本。但客户为保持与德国面板的一致性,并没有同意我们构建更高版本嵌入式Windows系统的提案。顺便提一句,WES2009也是可以构建XP嵌入式的,但微软官网只有evaluation版本,即评估板,评估板不具合法授权,生成的XP系统只有120天试用寿命,桌面右下方还有evaluation的水印,虽然可以强制修改,但对待外资企业还是谨慎一些好。

Windows XP由上万个组件构成,每一个小功能都是细化为一个组件,这些组件可以在XP Embedded中拼装。运行一个最精简的图形界面XP,只需要大概7个组件即可,然而这种系统连桌面右键菜单都不会提供,甚至连CMD命令都无法打开。
如果将10000多个组件全部配置上去,XP系统会相当庞大,什么Media Player,IIS,SQL server都在上面,启动也很缓慢。

这就给我们配置嵌入式的XP系统带来困难,因为配置的都能运行,但根本不知道有哪些组件缺失,会对之后的运行造成什么问题。
这之间我们配置了不下20个版本的XP,每个版本都要经历配置,分析依赖,构建,安装,初始化的过程,前后需要1个小时左右时间才能看到结果。
举两个栗子:
我们配置的第7个版本,看上去已经比较完善了,所有硬件驱动都搞定,德国公司的专业软件也能运行,后来发现还是不能用,因为一个「EWF」的组件没有添加,这个组件是德国公司需要的,用来保护C盘,相当于一个C盘的还原卡。组件缺失只能重新打包,我们试着去强制安装EWF,但没有成功,这个功能是嵌入式XP独有的,普通的XP Professional并没有。
当我们配置到16个版本时,已经解决到多数问题,甚至都已经打包成release版了,但发现打包还原后,并不能在PE引导还原系统时,初始化Computer Name,后来发现是一个名叫「WMIC」的组件没有配置,这个组件提供了从命令行接口和批命令脚本执行系统管理的支持,又得重新打包。

WIM镜像的制作

我们最终生成了一个XP系统,使用「dism」命令对其打包,之前只知道镜像打包为ISO,用ghost还原,经历了这个项目后,发现打包为wim格式,用dism还原成功率更高,而且wim中可以包含多个index,可以同时还原C盘和D盘,打包速度和还原速度都比ghost快很多。
DISM常用的命令如下(参数的大小写不区分):

#将指定分区打包为一个镜像
#将C盘打包成一个镜像,镜像文件为E:\xpe.wim,镜像别称为xpe,描述为:xpe-release
#Description参数非必要,其余参数必要。
Dism /Capture-Image /ImageFile:E:\xpe.wim /CaptureDir:C:\ /Name:xpe /Description:xpe-release

#向已有镜像文件追加index
#向刚才的wim文件追加D盘的备份,别称为data
Dism /Append-Image /ImageFile:E:\xpe.wim /CaptureDir:D:\ /Name:data /Description:data

#还原一个镜像到指定分区
Dism /Apply-Image /ImageFile:E:\xpe.wim /Index:1 /ApplyDir:C:\
Dism /Apply-Image /ImageFile:E:\xpe.wim /Index:2 /ApplyDir:D:\

基本上这三个命令就能解决大部分打包和还原的问题,命令简洁,执行速度快,微软建议用这种方式取代ghost。

DISM命令在WIN7之后的系统都自带。

PE系统的制作并回调USB存储设备中的bat文件

PE系统的制作这里不祥解了,网上教程很多,主要是要制作一个精简的PE系统,甚至连GUI图形界面都可以没有,但一定要有两个命令:「diskpart」和「dism」。

diskpart命令用来对磁盘进行管理的,拥有分区、格式化、设置active激活等功能,超级简单也超级强大。
常用指令如下:

clean     :清除整个硬盘,急剧破坏性
select     :disk/partition/volume 选择磁盘/分区/卷标
create partition primary size=5000    :创建分区大小5G
active    :设置选中分区为激活分区
assign letter=c     :设置选中分区的盘符为C

针对一个量产版的启动U盘,必须要能自动判断是否需要对空白的磁盘进行分区,需要在PE系统启动后自动寻找到U盘设备,并回调其中的bat脚本。

这段bat脚本用来引导用户安装或者还原系统,同时还能按需格式化物理硬盘。为什么不将其放在PE系统内部,因为PE系统封装起来耗时,且没有专业工具无法完成,所以使用回调方式来调用U盘中的引导脚本。

具体的脚本代码我不方便贴出来,涉及到版权问题。
大致流程就是使用echo命令构建一个文本菜单,让用户选择备份或者还原,
如果备份,就用dism命令将C和D驱动器制作成一个wim放在E盘并拷贝到U盘中,
如果还原,就列出U盘中所有可供还原的wim,让用户选择需要还原的镜像,并用dism命令还原。
在备份和还原操作之前,需要用diskpart命令分析一下磁盘分区,设定合适的盘符。

网上关于这方面的资料实在太少。
如果您也遇到了类似的问题,如果您恰巧能看到这篇文章,有任何疑问可以联系我。
newflydd@189.cn

丁丁生于 1987.07.01 ,30岁,英文ID:newflydd

  • 现居住地 江苏 ● 泰州 ● 姜堰
  • 创建了 Jblog 开源博客系统
  • 坚持十余年的 独立博客 作者
  • 大学本科毕业后就职于 中国电信江苏泰州分公司,前两年从事Oracle数据库DBA工作,两年后公司精简技术人员,被安排到农村担任支局长(其本质是搞销售),于2016年因志向不合从国企辞职,在小城镇找了一份程序员的工作。
  • Git OSChina 上积极参与开源社区