http://blog.sina.com.cn/s/blog_6e94205b0100njpj.html
谢谢
肖正波(happymy)
此文章存在技术问题,请阅读以下修正内容:
http://blog.sina.com.cn/s/blog_6e94205b0100o3po.html
第四章实战开发
4.1我们要做什么?
OK,我想当大家看过前三章后,对WES7的就开发应该有了一个初步的了解。在本章将讲解以在Vmware虚拟机为硬件平台。在Vmware虚拟机上开发出一个WES 7的嵌入式系统镜像。借此演示一个标准使用ICE编写应答文件和自定义开发工具的开发流程。这个开发流程包含一些嵌入式特性的使用。以及覆盖了如何配置应答文件实现无人值守安装、如何集成驱动、在镜像的安装过程中如何执行自定义命令和脚、如何封装系统镜像以便进行大规模部署等大家常会接触到的问题。
4.2建立虚拟机和采集硬件信息
• 步骤 1:对于如何建立Vmware Workstation7虚拟机,这里不详细讲解。只要设置虚拟机的宿主操作系统为“Windows 7”就可以。

图4-1 Vmware Workstation 虚拟机
• 步骤 2:将Standard_7_32bit.iso载入虚拟机的光驱,然后启动虚拟机,并从光盘引导。单击“LaunchWinPE Command Prompt”

• 步骤 3:准备一个格式化好的USB U盘,将USBU盘挂载进虚拟机。
• 步骤 4:键入“Tap /oc:\demo.pmq”。c:为U盘的盘符(将生成的PMQ文件保存到U盘当中)

4.3用Image ConfigurationEditor(ICE)编写应答文件(用与构建母板镜像)
• 步骤 1:打开Image ConfigurationEditor(ICE), 菜单“File”>“Select Distribution Share”选择DistributionShare文件夹的位置。默认位置是“C:\Program Files\Windows Embedded Standard7\DS”如果是64bit的Distribution Share,文件夹的名称应为DS64。DistributionShare是由开发工具提供的,用户不应在其根目录建立新的文件夹。

• 步骤 2:单击“New…”按钮,新建一个应答文件。双击“Distribution Share/Templates/IBW”下的“ThinClient.xml”

• 步骤 3:菜单“File>Import>importPMQ”,选择在上一节中生成的PMQ文件,并导入。

• 步骤 4: 菜单“Validate>AddRequired Packages”。双击下方的错误信息。

• 步骤 5: 取消选中“Windows ExplorerShell”,选中“Command Prompt Shell with Shell Support”和“Simplified(PRC)Chinese Language Pack ”。单击“OK”按钮。
• 步骤 6:菜单“Validate>Add Required Packages”。展开“DistributionShare\Packages\Feature Pack\Embedded Enabling Features”双击Hide BootScreens。

• 步骤 7:找到VMwareWorkstation的安装目录下的windows.iso,用winrar或者其他软件打开windows.iso,将里面的所有文件拷贝到DS库的“\$OEM$Folders\$1\Program Files\vmtoolsetup”下,例如:C:\Program Files\WindowsEmbedded Standard 7\DS\$OEM$ Folders\$1\ProgramFiles\vmtoolsetup”文件夹。
之后在“\DS\$OEM$Folders\$1\Windows\Setup\Scripts”文件夹下建立一个名称为“SetupComplete.cmd”脚本文件。编辑该文件加入下列命令:
“C:\Program Files\vmtoolsetup\setup.exe” /v/qn
C:\Windows\system32\calc.exe
这样做会在第7个阶段(OOBE)执行上面2条命令,但是此种执行命令或脚本的方法并不会检查被执行命令的返回值,另外如上所示,第一条命令执行后会重新启动计算机,这有可能造成第二条命令未被执行或没有被完整的执行。这点在开发过程中要注意!
• 步骤 8:将DS库的“\$OEM$Folders\$1\Program Files\vmtoolsetup\Program Files\VMware\VMwareTools\Drivers\”的“scsi”文件夹拷贝到DS库的“\Out-of-BoxDrivers目录中,例如将“C:\Program Files\Windows Embedded Standard7\DS\$OEM$ Folders\$1\Program Files\vmtoolsetup\ProgramFiles\VMware\VMware Tools\Drivers”的“scsi”文件夹拷贝到“C:\ProgramFiles\Windows Embedded Standard 7\DS\Out-of-Box Drivers”文件夹下。
$1文件夹下的所有文件将会被IBE自动拷贝到目标系统盘中。其他类似“$1”的“变量”可以从帮助文档中查询。除了此种集成文件的方法:使用imageX修改IBW光盘\DS目录下的install.wim文件。在这里就不详细介绍了。
• 步骤 9:菜单“insert> OEM Folders Path…”选中 “C:\Program Files\WindowsEmbedded Standard 7\DS”下的“$OEM$ Folders”文件夹,然后单击“Open”按钮。

• 步骤 10:按快捷键“Ctrl+F”,输入“Home”,单击“Find”按钮。双击下方的“Answerfile”的“IE-InternetExplorer_x86/Home_Page”。

• 步骤 11:将“Home_Page”的“Value”设置成“www.cyent.com.cn”。

• 步骤 12:将同页上方的“DisableFirstRunWizard”和“DisableWelcomePage”的“Value”设置成“True”。

• 步骤 13: 展开并选中“AnswerFile\Untitled\FeaturePack\User Interface\ Command Prompt Shell withShell Support ”。
设置“Filter view by:”为“2 Offline Servicing”。
设置“CustomShell”的“Value”为“C:\windows\system32\cmd.exe”
此处称之为自定义Shell,是大家常用的嵌入式特性之一。可以将用户“锁定”在自定义的应用程序。此处以命令提示符为例(默认就是命令提示符)。

• 步骤 14:在做完第8步之后,展开选中“Distribution Share/Out-of-BoxDrivers/mydevices”,鼠标右键“Insert Drive Path to Pass 1 WindowsPE”
此处称之为集成驱动,此方法只能集成INF格式的驱动程序!磁盘控制器的驱动(这类驱动称之为系统启动必须加载的驱动程序)要在第一阶段被加载否则将找不到可用的磁盘。

• 步骤 15: 展开“AnswerFile\Untitled\Product\Operating System\Foundation Core\WindowsEmbedded Edition\Setup_X86\UserData”
设置“Filter view by:”为“1 WindowsPE”
设置“AceptEULA”的“Value”为“True”。
展开并设置“ProductKEYKEY\”的“Value”为产品的序列号。如果没有请留空,不要使用00000-00000-00000-00000-00000。
设置“WillShowUI”的“Value”为“OnError”

• 步骤 16: 展开“AnswerFile\Untitled\Product\Operating System\Foundation Core\WindowsEmbedded Edition\International-Core-WinPE_X86”。
设置“Filter view by:”为“1 WindowsPE”。
设置“UILanguage”的“Value”为“zh-CN”。

• 步骤 17: 展开“AnswerFile\Untitled\Product\Operating System\Foundation Core\WindowsEmbedded Edition\International-Core_X86”。
设置“Filter view by:”为“4 Specialize”。
设置“UILanguage”的“Value”为“zh-CN”。

• 步骤 18:在DS\$OEM$Folders文件夹下建立一个名称为disksp.txt的文本文档。
select disk 0
create partition primary
select partition 1
format FS=NTFS quick
active
exit
将上面的脚本复制到该文本文档中,并保存。
菜单“Insert\Synchronous Command\Pass 1 windowsPE…”,在弹出的窗口中键入(仅键入粗体部分的字符):
“diskpart /s “D:\AutoUnattend_Files\windowsPE\$OEM$Folders\disksp.txt”。然后单击“OK”按钮。
我们直接在第一阶段调用dskpart进行分区,并配置分区。RunSynchronous和RunAsynchronous可以在指定的阶段执行命令。Runsynchronous与RunAsynchronous不同地方是Runsynchronous会等待当前命令执行完,才会执行下一条。

• 步骤 19: 展开“AnswerFile\Untitled\Product\Operating System\Foundation Core\WindowsEmbedded Edition\Setup_X86\ImageInstall”。
设置“Filter view by:”为“1 WindowsPE”。
设置“InstallToAvailablePartition” 的“Value”为“True”。
这样设置会使得系统镜像安装到第一个标记到活动的分区中。如果要指定安装分区可以展开“InstallTo”。设置PartitionID的“Value”和“DiskID”的“Value”。

• 步骤 20: 展开“AnswerFile\Untitled\Product\Operating System\Foundation Core\WindowsEmbedded Edition\Shell-Setup_X86\OOBE”
设置“Filter view by:”为“7 OOBE System”
设置“NetworkLocation” 的“Value”为“Work”。
设置“SkipUserOOBE” 的“Value”为“True”。
设置“SkipMachineOOBE” 的“Value”为“True”。
设置“HideWirelessSetupInOOBE” 的“Value”为“True”。
设置“ProtectYourPC” 的“Value”为“1”。
设置“HideEULAPage” 的“Value”为“True”。
此处的这些设置可以跳过OOBE阶段的新建立用户、设置无线网络等设置。

• 步骤 21: 展开并选中“AnswerFile\Untitled\Product\Operating System\Foundation Core\WindowsEmbedded Edition\Shell-Setup_X86\U
serAccounts\LocalAccount”。鼠标右键单击,在弹出的菜单中选择“Insert NewLocalAccount”。
将“Name”设置为“CYBR”
将“DisplayName”设置为“CYBR”
展开“Password”,将“Value”设置为“CYBR”
将下面的“Group”设置为“Administrators”

• 步骤 22: 展开“AnswerFile\Untitled\Product\Operating System\Fou
ndation Core\Windows EmbeddedEdition\Shell-Setup_X86\AutoLogon”
设置“Filter view by:”为“4 Specialize”。
设置 “Username” 的“Value”为“CYBR”。
设置 “Enabled” 的“Value”为“True”。
设置 “Password”的“Value”为“CYBR”。

• 步骤 23:菜单“Validate>Add Required Packages”。
按“Ctrl+S”快捷键,保存应答文件到桌面,使用默认的文件名即可。
菜单“Tools”->“Create Media”-> “CreateIBW Image From Answer file”
在弹出的窗口中单击“…”按钮选择“C:\OSIMAGE”文件夹,单击“OK”按钮开始生成系统镜像。

• 步骤 24:打开“开始”菜单,在“附件”中,找到命令提示符并用鼠标右键单击,在弹出的菜单中选择“以管理员的身份运行”。
依次输入下列命令:
CD C:\Program Files\Windows Embedded Standard7\Tools\x86
oscdimg -n -m -b”C:\Program Files\Windows Embedded Standard7\Tools\IBW\x86\BOOT\etfsboot.com” C:\OSimageC:\OSimage\OSimage.iso
这样就把系统镜像的安装源打包成一个ISO光盘镜像文件。
• 步骤 25: 将刚才构建的ISO镜像再如到虚拟机然后启动虚拟机,如果上面步骤没有做错。等待40分钟系统的构建将顺利完成,在这期间不需要手动干预。
4.4 用ImageConfiguration Editor(ICE)编写应答文件(用于SYSPREP封装系统)
首先说明一下,在这里给出的是一个比较”通用”的应答文件(testsysprep.xml),应答文件的部分内容仍然需要修改后才能使用!以下是应答文件的内容:
<?xml version=”1.0″encoding=”utf-8″?>
<unattend xmlns=”urn:schemas-microsoft-com:unattend”xmlns:wcm=”http://schemas.microsoft.com/WMIConfig/2002/State”xmlns:ew=”urn:schemas-microsoft-com:embedded.unattend.internal.v1″>
<servicing>
<package action=”configure”>
<assemblyIdentityname=”Microsoft-Windows-EmbeddedEdition” version=”6.1.7600.16385″processorArchitecture=”x86″ publicKeyToken=”31bf3856ad364e35″language=”neutral” versionScope=”nonSxS” />
<ew:packageInfo releaseType=”Product”customInfoVersion=”1.0″ />
</package>
</servicing>
<settings pass=”generalize”>
<component name=”Microsoft-Windows-PnpSysprep”processorArchitecture=”x86″ publicKeyToken=”31bf3856ad364e35″language=”neutral” versionScope=”nonSxS” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
</component>
<componentname=”Microsoft-Windows-Security-Licensing-SLC”processorArchitecture=”x86″ publicKeyToken=”31bf3856ad364e35″language=”neutral” versionScope=”nonSxS” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<SkipRearm>0</SkipRearm>
</component>
</settings>
<settings pass=”specialize”>
<componentname=”Microsoft-Windows-International-Core”processorArchitecture=”x86″ publicKeyToken=”31bf3856ad364e35″language=”neutral” versionScope=”nonSxS” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<UILanguage>zh-CN</UILanguage>
</component>
<component name=”Microsoft-Windows-Shell-Setup”processorArchitecture=”x86″ publicKeyToken=”31bf3856ad364e35″language=”neutral” versionScope=”nonSxS” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<ProductKey>00000-00000-00000-00000-00000</ProductKey>
</component>
</settings>
<settings pass=”oobeSystem”>
<component name=”Microsoft-Windows-Shell-Setup”processorArchitecture=”x86″ publicKeyToken=”31bf3856ad364e35″language=”neutral” versionScope=”nonSxS” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<AutoLogon>
<Password>
<Value>CYBR</Value>
<PlainText>true</PlainText>
</Password>
<Username>CYBR</Username>
<Enabled>true</Enabled>
</AutoLogon>
<OOBE>
<NetworkLocation>Work</NetworkLocation>
<SkipUserOOBE>true</SkipUserOOBE>
<SkipMachineOOBE>true</SkipMachineOOBE>
<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
<ProtectYourPC>1</ProtectYourPC>
<HideEULAPage>true</HideEULAPage>
</OOBE>
</component>
</settings>
<settings pass=”windowsPE”>
<componentname=”Microsoft-Windows-International-Core-WinPE”processorArchitecture=”x86″ publicKeyToken=”31bf3856ad364e35″language=”neutral” versionScope=”nonSxS” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<UILanguage>zh-CN</UILanguage>
</component>
</settings>
<ew:answerFileInfo distributionSharePath=”C:\ProgramFiles\Windows Embedded Standard 7\DS” footprint=”576716800″ecoreFootprint=”576716800″ />
</unattend>
你可以用ICE打开这个应答文件,看看都改了那些配置。特别说明一下,ICE保存这个应答文件会报错。这是很正常的因为这个应答文件没有添加任何“组件包”,它是不能用来构建系统镜像的。所以直接忽略这些错误。毕竟用ICE写一个应答文件要比用记事本写方便的多。上面的应答文件一共配置了:
1. 设定好OOBE过程中的设置(这样就实现了无人值守的部署)
2. 跳过硬件检测(减少部署的时间,不会删除已经配置好的驱动。)
3. 自动登录(这个需要根据自己的需要更改。)
4. 设置了CDKEY(ProductKey必须根据实际情况修改,试用版留空。)
5. 重置了激活计数器(WES7需要进行产品激活,最多可以重置3次。所以在最后一次执行syssprep命令,才可以将SkipRearm设置为0)
• 步骤 1启动好虚拟机,等待CMD打开后,输入explorer打开资源管理器(仍然不会出现“桌面”)

• 步骤 2 将刚才的应答文件(大家自己修改过的)拷贝到“C:\Windows\System32\sysprep”下(直接复制粘贴过去,VMTool刚才已经安装好了)。
删除“C:\Windows\Setup\SCRIPTS”下的所有文件。
回到CMD下执行下面的命令:
sysprep /shutdown /generalize /oobe/unattend:C:\Windows\System32\sysprep\testsysprep.xml
等关机后,就可以使用Ghost或者ImageX进行系统镜像的批量部署,当然你也可以再次启动虚拟机看结果。
最后祝大家元旦快乐!\( ^▽^ )/