在PE 2.0中提供了下面的程序/语言包:
包名称
|
描述
|
WinPE-HTA-Package
|
HTML Application support
|
WinPE-MDAC-Package
|
Microsoft Data Access Component support
|
WinPE-Scripting-Package
|
Windows Script Host support
|
WinPE-SRT-Package
|
Windows Recovery Environment support
|
WinPE-XML-Package
|
Microsoft XML (MSMXL) Parser support
|
而这些包,如果你不安装,那么将在3.Prepare步骤中删除掉。运行peimg /list命令可以得到你的PE 2.0的预制包的列表。我运行所得到的一个例子见下图,注意在Ins列下面+表示已经安装的程序/语言包。
而包的安装已经在前面的第2步中介绍了使用的命令行,这里要说的是,安装可以使用统配符,比如下面的语句就是安装WinPE-XML-Package和WinPE-WMI-Package两个程序包,而对于语言包同样适用:
peimage /install=WinPE-?M* C:/myWinPE/Applied/Windows
对于语言包,大家可以看到,PE 2.0提供的语言包包括中文的三个版本,还有韩文和日文的,对于没有提供的语言包,可以使用下面的方法把它引入到我们自己的定制包中,使用peimg的/import选项:
peimg /import=<path> c:/winpe_x86/mount/Windows
其中<path>是语言包所在的目录。
然后再安装,比如安装日文的语言包:
peimg /install=*JA-JP* c:/myWinPE/Applied/Windows
最后,如果必要可以设置默认语言包:
Peimg /lang=ZH-CN c:/myWinPE/Applied/Windows
注意,上面的语言包和程序包的操作,一定要在/Prep之前完成!
我们先来回顾一下在微软的标准文档中所介绍的定制步骤,它要求一定要先/Apply,也就是把影像WIM文件,释放到一个目录中,然后对于该目录中的内容进行处理,之后再重新生成WIM影像文件,也就是/Capture然后Update。详细的解释请看Windows系统的桌面部署Desktop Deployment(3) 的有关章节介绍。
然而,我们完全可以不用那种方式,而同样达到定制的效果,这里我介绍的就是使用imagex命令行的/mountrw和/commit两个参数的使用。对于imagex命令,它是操作WIM影像文件的Windows AIK包里面带的一个很有用的命令,它的基本功能就是对WIM影像文件进行展开和制作、映射和撤销映射等的基本操作,详细的命令解释可以参看Windows AIK的相关说明。
下面我就说说怎么来做,首先我们使用直接对最终生成的在ISO/Resource目录中的中的Boot.wim文件来操作,使用下面的命令,把它映射到一个空的目录中:
imagex /mountrw ./ISO/Source/Boot.wim 1 mount
说明:当你是用copype命令建立工作环境的时候,那个批处理命令同时在你的工作目录中建立了一个叫mount的空目录,它就是用来映射WIM影像文件的目录。上面的命令就是把./ISO/Source/目录中的Boot.wim文件中的第一个影像,映射到./mount目录上。这样当你浏览mount目录的时候,看到的内容和你是用/Apply所释放出来的一样。
当你在mount目录里面定制操作完成后,可以用下面的命令来完成以前的第5和6步的工作:
imagex /unmount /commit mount
其中最关键的就是/commit选项,它把映射在内存中的影像文件重新写回到映射的原文件中。
需要注意的是,因为映射过程是把文件中的文件释放到内存中,所以如果没有进行/commit工作,而直接/unmount,或者电脑从新启动/关机,那么你的工作就全丢失了,而使用标准的方式就没有数据丢失的潜在危险,因为那是把数据事实地写到硬盘上的。至于哪种工作方式好,我看还是根据自己的工作习惯和喜好来定。我本人比较喜欢这种方式,我订制了两个批命令文件,来简化其中的工作。
添加客户自己的应用程序可能是开发定制人员考虑和用时最多的步骤了。要添加客户应用程序,就要了解PE有两种调用方式,一个是在线叫online,一个是线下叫offline的。什么意思呢?就是,当PE启动后,如果是online的,那么它随着PE系统被装入到内存(RAM),这样在PE启动完成后,启动介质就可以被拿走而不影响它的运行,而如果是offline的,那么不能卸载启动介质,因为程序没有被装载入RAM,而是留在介质上,当使用时,要在启动介质上查找该程序。两者各有各的应用场景,比如,该程序太大太多,无法一次装入内存,就要使用选择offline的方式,而内存可以全部装下的时候,当然可以选择online方式。
如何选择online方式呢,很简单,把程序以及它的支持环境复制到/Apply或/Mountrw的目录中的。下面举一个简单的例子,因为imagex程序没有包含在标准的PE影像中,我们需要把它安装成online方式。执行下面的命令:
Copy C:/Program Files/Windows AIK/Tools/x86/imagex.exe C:/myWinPE/Applied/Windows
Xcopy C:/Program Files/Windows AIK/Tools/x86/Servicing/*.* C:/myWinPE/Applied/Windows/Servicing/ /I /E /Y /H
Xcopy %windir%/system32/msxml6*.dll C:/myWinPE/Applied/Windows/System32
那么Offline方式呢?很简单,把上面的C:/myWinPE/Applied换成C:/myWinPE/ISO就可以了:
Copy C:/Program Files/Windows AIK/Tools/x86/imagex.exe C:/myWinPE/ISO
Xcopy C:/Program Files/Windows AIK/Tools/x86/Servicing/*.* C:/myWinPE/ISO/Servicing/ /I /E /Y /H
Xcopy %windir%/system32/msxml6*.dll C:/myWinPE/ISO/Servicing
顺便说一句,当包换imagex程序时,微软建议编辑下面的文件内容,并把它保存成Wimscript.ini放到imagex.exe文件相同的目录里面,每当imagex.exe启动的时候,都会检查这个配置文件,当然你也可以添加自己定制的列表:
[ExclusionList]
ntfs.log
hiberfil.sys
pagefile.sys
"System Volume Information"
RECYCLER
Windows/CSC
[CompressionExclusionList]
*.mp3
*.zip
*.cab
/WINDOWS/inf/*.pnf
这一点很简单,虽然Windows PE 2.0附带了好多通用的驱动程序,但是你的特使硬件环境可能需要安装特殊的驱动程序。驱动程序可以用peimg命令的/inf参数添加到影像文件中,例子如下:
Peimg /inf=<path> c:/myWinPE/Applied
其中<path>就是inf驱动程序所在的目录。
而当影像启动后,可以用drvload命令添加到PE系统中使用,例子如下:
Drvload inf_path [,info_path[…]]
当WIndows PE启动了之后,如何运行用户自己的程序呢?一种方式是用户手动在Command Pormpt里面输入命令,另外一种方式就是让PE自动运行。简单地说,用户可以通过设置三个文件来启动应用程序、脚本等,它们是Winpeshl.ini, Startnet.cmd和unatend.xml。
1. WinPEShl.ini文件:在第3步中,执行下面的步骤。用文本编辑器编辑一个WinPEShl.ini文件并保存到影像的%SYSTEMROOT%/System32目录中,这样PE启动的时候就可以自动启动了,一个举例:
[LaunchApp]
AppPath=%SYSTEMDRIVE%/myshell.exe
[LaunApps]
%ProgramFiles$/Tools/myTools.exe, -option1, -option2
%SYSTEMROOT%/mydir/application2.exe, -option1
Application3.exe, -option1, -option2, -option3
简单说明一下,其中在[LaunchApp]下面的程序是没有参数运行的程序,而[LaunApps]下面的是可以带参数运行的程序。
2. StartNet.cmd文件:StartNet.cmd脚本由winpeshl.exe文件提交运行。PE系统在%SYSTEMROOT%/System32目录中,有一个系统的StartNet.cmd脚本,它的任务是,运行wpeinit.exe,而wpeinit.exe完成安装PNP设备、运行Unattend.xml文件设置,并加载网络资源等工作。所以,只要是把你自己的程序添加到里面并保存就可以了。
3. Unattend.xml文件:Unattend.xml默认地应该在启动介质的根里面,但是也可以重定向,具体的参见wpeinit.exe的说明。
对于这些命令,除了以前我们用到的,这里列举了另外一些经常用到的命令。因为这些在微软的Windows AIK的随机文档中都有介绍,所以,这里只是简单较少,不做过多解释。
Bootsect: 用于指定启动文件使用BOOTMGR(Vista的启动)还是NTLDR.(XP/2000的启动文件). 这个命令文件取代了以前版本的: FixFAT和FixNTFS两个命令。举例说明一下:
bootsect.exe /help
Bootsect.exe /nt52 SYS
设定从system partition的NTLDR启动系统
Bootsect.exe /nt60 ALL
设定从所有的可被启动的NT60分区的BOOTMGR来启动。
Bootsect.exe /nt52 c:
设定从c:分区的NTLDR启动系统
Diskpart:磁盘分区工具,这个分区工具,有很多内部命令参数,它是很好的对磁盘、分区操作的工具,大家可以仔细研究一下。
Drvload:在线加载指定的inf的驱动程序,前面说过了。
Drvload.exe inf_path, [inf_path[…]][/?]
Wpeutil:它有好多实用的选项可以利用,比如Wpeutil shutdown来关机, wpeutil enablefirewall来打开PE的防火墙等.。下面简单列举它的一些选项:
CreatePageFile /path=c:/pagefile.sys /size=512MB
DisableFirewall
EnableFirewall
InitilizeNetwork
Reboot
SetKeyboardLayout
ListKeyboardLayout
SetMuiLanguage de-DE;en-US
SetUserLocal de-DE;en-US
Shutdown
UpdateBootInfo
前面说了,我们说了这么多的定制过程和手段,说白了,最终还是要运行我们自己的程序,你当然可以用C或者VB语言开发,设置是Java/PHP等等,但是我认为是使用HTA开发的程序比较适合PE。
什么是HTA呢?全称就是HTML Applications,其实它是由Internet Explorer来执行的,其中HTML/DHTML主要是进行显示的控制,而流程的控制使用DHTML和脚本来实现,脚本语言可以使用VBScript和JavaScript。更方便的是对于现成的Windows管理脚本(WSH支持的),你完全可以直接复制过来使用,最多是生成一个Sub或者Function以被调用,而现成的Windows管理脚本有很多,而且也不难学,对于有过Windows Script编程经验的人来说更是好消息。细心的读者可以发现,Windows BDD 2007的随机帮助文档,以及以后我们要提到的BDD 2007里面的应用程序也是使用HTA的。附带说一句,微软的HTA Developers Center里面的HTML Applications Reference连接是死连接,真正的在这里:http://msdn2.microsoft.com/en-us/library/ms536471.aspx
而HTA的缺点恐怕首先要数程序的加密问题,虽然可以使用Scritp的Encode把明码转换成密码,但是程序本身太容易被复制和修改,所以不太适合商业。再有就是,HTA不适合于大型或复杂软件的开发,对于底层开发不好支持,以及运行速度缓慢等。
至于如何开发以及教程和资源等请大家去微软的Script Center。我这里只是提示一个开发思路,全作抛砖引玉之用。
好了,终于完成了前4个部分的初稿,来回忆一下,第一部分是开篇说明用意,第二篇主要说明使用影像的发布方式在企业日常IT技术支持方面的优越性,以及给企业本身管理带来的挑战,第三篇是介绍了BDD 2007和Vista的重要组成部分Windows PE 2.0的定制,而这一篇则是上一篇的进一步的探讨。
因为在我读英文原文的资料的时候,总是感到他们的思路不适合初学的人,而且也不适合中国人的思维方式,所以,才对Windows PE的定制工作方法流程等,进行了提炼尝试,首先向大家说明下面的工作所要达到的目的,然后再说明具体的步骤,这样大家可以有一个提纲携领的纲要可循,在知识里搭出一个骨架,最后在就一些具体的关键内容,或者进行比较详细的解释,或者罗列出来,大家就可以把这些肉放在骨架上,这样给初学者一个有血有肉的技术全貌。我希望,我的努力可以给大家带来方便。
后面,我想说一下Vista很重要的unattend.xml文件,以及最重要的BDD 2007的使用,虽然说BDD 2007已经发布好长时间了,但是最近的Technet的Journal里面老有这方面的文章,说明这里面很有文章可做,我仅就我个人经验来对它进行刨析。之后或者穿插着,我根据自己在Mac OSX的多年经历,说说OSX的桌面部署的理念和方法。我知道Apple机在国内的应用很是局限,但是根据我的经历,我是越来越喜欢Mac机了,而且我认为Mac机在教育方面应该有着重要的、不可替代的作用和发展前途。
如果你有任何的见解和意见,请不吝赐教,给我发PM,或者email: [email protected]. 先行谢过。