中国最权威的科学杂志:DIY微型XPE系统教程 无忧启动论坛

来源:百度文库 编辑:中财网 时间:2024/05/02 07:00:37
DIY微型XPE系统教程

第一部分:PEBuilder

1.   下载 PEBuilder 的最近版本号v3.1.10a:
http://69.90.47.6/mybootdisks.co ... /pebuilder3110a.zip

2.   对pebuilder3110a.zip进行解压,解压后的文件放在文件夹 C:\WinPEBuilder 里面。

3.   在文件夹 C:\WinPEBuilder 里面,文件 bartpe.bmp 是壁纸,可以用你自己喜欢的加以替换。特别的网卡或者SCSI驱动,请加到drivers文件夹里面。

4.   假如你用的 Windows 源CD属中文体系,又或者你需要简(或繁)体中文支持,请把附上的 zzh 中文插件加到plugin文件夹里面。
zzh.part1.rar (292.97 KB)
zzh.part2.rar (147.56 KB)

5.   双击并运行 pebuilder.exe,如图5,在 Source: 下面填上你的 Windows 源CD (XP或者2K3)路径,在 Output: 下面填上生成PE的目标路径。留空 Custom:,不设 Media output。
图5:


6.   单击 Plugins 按钮以选择插件,如图6,我们只启用 (Enable) 五个插件:barpe.inf, ChinesePlugin.inf, penetcfg.inf, dcomlaunch.inf, sermouse.inf。 其余均以 Enable/Disable 按钮禁用之。
图6:


7.   单击 Close 按钮返回图5画面,单击 Build 按钮,在你回答并同意创建目录和接受用户许可协议书后,PEBuilder即开始建造最简单的PE内核。如图7,有四个错误出现是正常的,因为我们没有选用nu2menu.inf插件。
图7:


8.   单击 Close 按钮返回图5画面,然后单击 Exit 按钮退出 PEBuilder。最简单的BartPE内核已经建成(大约180MB),它用命令符作SHELL,有网络功能。见图8。
图8:


有关zzh中文插件的补充说明:
我用PEBuilder来建PE的核心,是因为它建成的PE最为稳定,有最完整的注册表和良好的网络支持。不过,假如我们用的 Windows 源CD属中文体系,又或者我们需要在英文体系中增加对简(或繁)体中文支持,这就要解决两个问题:

问题一:PEBuilder是建基于英文体系的,不加中文插件做出来的PE,缺少了支持中文需要的NLS,LOCALE,LANGUAGE, CODEPAGE,FONTS,FONTLINK和输入法等注册表资料。为此,我在zzh文件夹里面放了四个中文插件供选用:
1.   ChinesePlugin.inf: Windows 源CD属简体中文体系,用来建造以简体中文为核心的PE,当然也能支持英文。
2.   CHS_on_EN_Platform.inf: Windows 源CD属英文体系,用来建造以英文为核心的PE,而且,它兼会支持简体中文。(你的英文源CD可能缺少下面文件,请自行把它们放置在zzh文件夹中:simsun.ttc,c_936.nls,c_10008.nls)
3.   CHT_on_EN_Platform.inf: Windows 源CD属英文体系,用来建造以英文为核心的PE,而且,它兼会支持繁体中文。(你的英文源CD可能缺少下面文件,请自行把它们放置在zzh文件夹中:mingliu.ttc,c_950.nls,c_10002.nls)
4.   ChineseTraditional.inf: Windows 源CD属繁体中文体系,用来建造以繁体中文为核心的PE,当然也能支持英文。
四个中文插件其实只有很小差别,有兴趣的请自行打开研究。

问题二:假如你用来建造PE的所处平台与目标PE不属于相同语言体系,(例如我在英文平台用上面的1.   ChinesePlugin.inf建造以简体中文为核心的PE,)
PEBuilder在改写netmscli.inf和nettcpip.inf两只网络文件的过程中,错误地把最后的[STRINGS]段落里的中文字符串砍掉。为此,我们需要把它手动还原。ChinesePlugin.inf调用的CN_MSCLI.INF和CN_TCPIP.INF,ChineseTraditional.inf调用的TW_MSCLI.INF和TW_TCPIP.INF,就是为了这个目的而设的。

不用担心由PEBuilder产生的PE核心体积会过大(180MB),现阶段我们的目的是要全,不是要简。全部功能齐全后,我们才去精简。

第二部分:WinBuilder
这部分我们介绍使用WinBuilder这个工具,对先前已经做好的PE核心增加功能(RAMDISK,FBWF,WIMFLTR)和注册表优化:

1.   下载 WinBuilder 的最近版本号[074]:
http://winbuilder.net/e107_files/downloads/WinBuilder074.zip

2.   对WinBuilder074.zip进行解压,解压后的文件WinBuilder.exe放在文件夹 C:\WinPEBuilder 里面。

3.   双击并运行 WinBuilder.exe,如下图所示,单击顶头的Download页面,只选取下载VistaPE的Tools(工具),其余均留空不选。单击左下角落的 Download 按钮进行下载。WinBuilder会自动在当前目录创建Projects文件夹,并把下载的Tools文件夹和文件置于其下。完成后退出WinBuilder。
下载WinBuilder辅助工具:


4.   下载附上的Projects.rar,解压后的文件和文件夹放到 C:\WinPEBuilder 里面,覆盖原有的文件和文件夹。你会发现Projects目录下面多了一个名为WINPE的文件夹,内含我编写好的脚本和所需文件。
Projects.rar (内含我编写的BartPE优化脚本 01-BartpePlus.script):

Projects.part01.rar (292.97 KB)
Projects.part02.rar (292.97 KB)
Projects.part03.rar (292.97 KB)
Projects.part04.rar (164.39 KB)

5.   双击并再一次运行 WinBuilder.exe,你会发现顶头处比前多了一个当前的Scripts(脚本)页面,底下有我整里好的第一个脚本。当前页右方有Script, Paths, Log和Code Box四栏可选,我们先选Paths设定路径。见图9。
图9:


6.   在 Source directory: 下面填上你的 Windows 源CD 路径(不是核心PE的路径),在 Target directory: 下面填上经WinBuilder优化后生成PE的目标路径。我们暂时没有用到ISO file。设定完成后,请退回当前页右方Script的一栏。

7.   如图10所示,展开当前页左方的BartpePlus Configuration,在右面窗口上半部设定RAMDisk的大小和盘符,下半部设定需要优化的核心PE的所在路径和它的%SystemRoot%文件夹名。设定完成后,你就可以单击右上方的 Play 按钮让WinBuilder替你的PE加工优化了。
图10:


8.   BartPE内核优化已经完成,它仍用命令符作SHELL,有网络功能,而且加入了RAMDISK,可以挂载Windows镜像.WIM文件,可对建基于光盘上的系统进行模拟写文件操作。

WinBuilder这个工具有很强的能力,十分适合对已经做好的PE进行YY操作,脚本语法也很易掌握。有兴趣研究的,可以到网页http://boot-land.net/winbuilder/help/scripts/script_syntax.html处下载详细的语法说明。你也不妨打开我编写的脚本, (c:\WinPEBuilder\Projects\WINPE\BASE\01-BartpePlus.script),你会很容易看到我是如何实现那些功能的,从而便作出适合你自己的修改了。

第三部分:Explorer Shell
在这部分我们用WinBuilder和我编写好的脚本,往先前做好的的BartPE内核加入Explorer Shell(外壳)。这样,我们的PE就有了图形化的介面,而不是停留在单调的命令符窗口了。同时加入的,还有老九的PECMD 3.0,PELOGON,PELOADER,PESHELL,HWPnP等厢关工具。下面描述的,其实是把第二部分和第三部分内容一起显示:

1.   下载附上的Explorer.rar和PROGRAMS.WIM.rar,把解压后的文件夹和其下的文件放到 C:\WinPEBuilder 里面,覆盖原有的文件和文件夹。你会发现Projects\WINPE\BASE目录下面多了一个名为02-ExplorerShell.script的脚本文件,sysfiles目录里面亦增加了一批文件。

ExplorerShell.rar:
ExplorerShell.part1.rar (292.97 KB)
ExplorerShell.part2.rar (292.97 KB)
ExplorerShell.part3.rar (1.91 KB)

PROGRAMS.WIM.rar
PROGRAMS.WIM.part1.rar (292.97 KB)
PROGRAMS.WIM.part2.rar (292.97 KB)
PROGRAMS.WIM.part3.rar (292.97 KB)
PROGRAMS.WIM.part4.rar (292.97 KB)
PROGRAMS.WIM.part5.rar (192.05 KB)

2.   双击并运行 WinBuilder.exe,见图11的画面出现。

图11:


3.   如图12所示,我们先往Paths处设定路径:在 Source directory 下面填上你的 Windows 源CD 路径(不是核心PE的路径),在 Target directory 下面填上经WinBuilder加入Explorer外壳后的成品XPE的目标路径。我们暂时没有用到ISO file。完成后,退回Script处(Paths的左邻)。

图12:


4.   如图13所示,展开BartpePlus Configuration,在右面窗口上半部设定RAMDisk的大小和盘符,下半部设定需要进行优化,并加入Explorer外壳的核心PE的所在路径和它的%SystemRoot%文件夹名。

图13:


5.   如图14所示,展开Explorer Shell, 在右面窗口SourceCD Language:下面选择你的Windows 源CD所属语言,再在Set Locale to:下面设定你的成品XPE的所属意的Locale(不知道正确译名)。两者可以不同,例如英文CD(0409)用中文Locale(0804)。你还需设定备用的语言文件所在地。

图14:


6.   设定完成后,你就可以单击右上方的 Play 按钮让WinBuilder替你的PE进行优化并加入Explorer外壳了。一个经优化的XPE内核已经完成,它用Explorer作图形化的外壳,有网络功能,而且加入了RAMDISK,可以挂载Windows镜像.WIM文件,可对建基于光盘上的系统进行模拟写文件操作。它又采用了大家熟悉的PECMD,你可以在熟悉的环境下面,加插入合你使用的其他东西。现在,你可以用CDIMAGE把PE做成ISO,然后用虚拟机试试这只XPE的功能了。(由于现时的XPE还处于新鲜出爐状态,未经加工,很多系统文件还没有转换成需要的大写。所以,请用CDIMAGE时不要使用“-d”选项,好使CDIMAGE把全部文件名以大写状态写入ISO。)

图15:带Explorer外壳的XPE:


有关Explorer Shell的重要补充:
有网友反映制作后生成的XPE运行出错,系统在修正子过程后停留不动,经查明发现问题出在我的大意,漏发了一个PROGRAMS.WIM镜像文件,现在已经把它放在教程第三部分第一点ExplorerShell.rar的后面,请下载解压后再重新运行一次WinBuilder就成了。现在提供的这只PROGRAMS.WIM只带FREEWB(基点五笔拼音输入法),不带其他东西。你可自行增加合用的外置程式到里面。我又更改了一下PECMD.INI,避免直接使用WAIT命令(可能拖垮CPU),以NIRCMD.EXE WAIT xxxx代替之,希望可以降低启动时死机的机会。

我相信很多动手自己做PE的人都有不错的技术水平,可以很容易地从我写的脚本中看出我是如何实现功能的。这正是我的原意,因为有很多东西别人是难以一一解释清楚的,必须由你自己钻研。我会在下一步分讨论精简PE。

第四部分:XPE的后期处理和精简
在这部分我们用WinBuilder和我编写好的脚本(XpePostProcess.script),对先前经优化的XPE内核全版本进行后期处理和精简。很多人觉得自己从零开始做PE很难,要精简更是难上加难。不过,如果你能参考我的脚本,有系统的进行建造和精简,你会发觉它并非如传说那么困难的:

1.   下载附上的XpePostProcess.rar,把解压后的文件夹和其下的文件放到 C:\WinPEBuilder 里面,覆盖原有的文件和文件夹。你会发现Projects\WINPE\BASE目录下面多了一个名为03-XpePostProcess.script的脚本文件,sysfiles目录里面亦增加了一批文件,包括一只有网友想要的PENetCfg.exe多语言版本v2.3。

XpePostProcess.rar:
XpePostProcess.part1.rar (292.97 KB)
XpePostProcess.part2.rar (292.97 KB)
XpePostProcess.part3.rar (274.77 KB)

2.   运行 WinBuilder.exe跟前介绍相同,展开XPE Post Process,见图16的画面出现。

图16:


3.   图16所示基本显示了后期处理和精简的整个流程,几乎每个步骤都容许选择与否。你最好能打开并对照XpePostProcess.script脚本,以便明白我的描述:

a. 脚本首先会除去没有特别用途的字库文件,你甚至可以指定一个小的(2.3MB)SIMSUN.TTC代替大字库文件。(减少23MB)
b. 脚本然后会除去 i386\WinSxS 目录下面的不必要文件夹和文件。 (减少8MB)
c. 接下来,网络的系统文件会被外置,并被保留到LastPE\PENET\CNXP文件夹下面(不包括驱动文件,因为我们会另用驱动包)。 (减少13MB)
d. 你可以选择除去Windpows自带的批量储存驱动文件(因为我们可以另用驱动包),脚本会自动修改txtsetup.sif内的[SCSI.load]段落以适应之。
e. 脚本跟着从三个地方除去不必须的系统文件:i386\inf (减少3.6MB); i386\system32\drivers (减少22MB); i386\system32 (减少57MB)
f. 你还可以决定是否保留bartpe.bmp壁纸,写字板wordpad.exe, 画图mspaint.exe, 和计算器calc.exe。
g. 系统启动过程会载入一批系统文件和驱动,这些文件都可以CAB模式存在,以节省空间。假如你选择这样做,脚本会向Windows源CD找寻原庄CAB文件用以替换。
h. 使用UPX压缩DLL或者EXE文件是减少空间的一个方法,但不能滥用,因为解压运行过程会反增使用空间。我只对几只大文件(如xpsp2res.dll)进行UPX压缩,它们都是不常活动的文件。
i. 脚本还可以生成ISO,但由于不太稳定,我没有把它选用。建议你自己手动生成。

4.   设定完成后,你就可以单击右上方的 Play 按钮。WinPEBuilder在后期处理和精简过程中,把XPE内核成功地由 184MB 减少到 65MB。

5.   如上所说明,网络的系统文件已经被外置,你需要把 WinPEBuilder\LastPE\PENET 下保留的文件自己加到外置PROGRAMS.WIM镜像文件或者PROGRAMS外置文件夹,还要加进DRIVERS_NET.CAB网络驱动包(已上载到ftp2)。详程请参考我的ISO或者等待下回分解。

6.   高级用家请留意一下 WinpeBuilder\LastPE 目录下面的内容,WINPE文件夹是后期处理改动前的完整PE,REMOVAL文件夹下是处理过程除去的各类文件。这些资讯对你的开发过程可能是很有用的。

这部分生成的XPE内核还不是最精简的ISO,几只大文件如SHELL32.DLL完全没有处理过,单把它的图标替换就能节省3MB空间。我打算在第五部份介绍用RESHACKER进行资源替换美化,并谈一下如何增加批量储存驱动包。

第五部分:XPE的批量储存和资源优化

XPE主要的用途在于对Windows系统的维护和恢复,所以对SCSI/RAID/SATA等各类型批量储存器的支持就显得十分重要。Windows源CD虽然也带部分批量储存的驱动,但并不足够,而且也嫌太旧了(我们在第四步份的精简过程索性把它移去)。在这部分我们重新往XPE加入比较新和全的DriverPacks批量储存驱动包(整理好的 8MB MassStorage.rar已经上载到ftp2),再用资源黑客reshacker进行资源优化:

1.   下载附上的XpeMassStorageResHack.rar,把解压后的文件夹和其下的文件放到 C:\WinPEBuilder 里面,覆盖原有的文件和文件夹。你会发现Projects\WINPE\BASE目录下面多了名为04-XpeMassStorage.script和05-XpeResourceHack.script的两只脚本文件,另有Resources文件夹,sysfiles目录里面亦增加了一批文件。

XpeMassStorageResHack.rar:
XpeMassStorageResHack.part01.rar (292.97 KB)
XpeMassStorageResHack.part02.rar (292.97 KB)
XpeMassStorageResHack.part03.rar (292.97 KB)
XpeMassStorageResHack.part04.rar (292.97 KB)
XpeMassStorageResHack.part05.rar (47.89 KB)

2.   请留意上面的附件并未包括批量储存的驱动包。因为它的体积有8MB大,我把它上载到ftp2名为MassStorage.rar。下载解压后的文件夹和其下的文件放到 C:\WinPEBuilder 里面。你会发现Projects\WINPE\BASE目录下面多了MassStorage文件夹,内含在wnt5,wxp,w2k3使用的批量储存驱动文件。

3.   运行 WinBuilder.exe跟前介绍相同。XPE MassStorage没有什么设定,把它选好就成了。展开XPE Resource Hack,见图18的画面出现。脚本可以让你选择是否对shell32.dll, explorer.exe, msgina.dll和sysdm.cpl进行图标替换和资源优化。

图18:


4.   设定完成后,你就可以单击右上方的 Play 按钮。WinPEBuilder最终会在目标路径TargetDir产生一 68MB 左右的非压缩 XPE,它用Explorer作图形化的外壳,有网络功能(外置),全面支持SCSI/RAID/SATA等各类型批量储存器(内置),而且加入了RAMDISK,可以挂载Windows镜像.WIM文件,可对建基于光盘上的系统进行模拟写文件操作。它又经过多重精简,并且进行了资源优化和美化,可谓美观实用。

5.   我们现在简单的看一下批量储存脚本04-XpeMassStorage.script是如何工作的:
a. 拷贝xp/2k3通用的驱动器:DirCopy,"%ScriptDir%\MassStorage\wnt5\*.*","%TargetDir%\i386\system32\Drivers"
b. 拷贝只用在wxp的驱动器:DirCopy,"%ScriptDir%\MassStorage\wxp\*.*","%TargetDir%\i386\system32\Drivers"
c. 更新txtsetup.sif里面[SourceDisksFiles]段落下有关批量储存驱动器文件名讯息
d. 更新txtsetup.sif里面[SCSI]段落下有关批量储存驱动器的命名讯息
e. 更新txtsetup.sif里面[SCSI.Load]段落下有关在启动时要自动载入的批量储存驱动器文件名
f. 更新txtsetup.sif里面[HardWareIdsDatabase]段落下有关批量储存驱动器的硬件身分资料库讯息

上面几点是加批量储存驱动的基本步骤。脚本移植自DriverPacks的BartPE插件。有兴趣的可以下载以下文件自己研究:

http://www.driverpacks.net/DriverPacks/DriverPack.php?pag=b
http://driverpacks.mirror.thesneaky.com/BASE/DPs_BASE_805.exe

http://www.driverpacks.net/DriverPacks/DriverPack.php?pag=m
http://driverpacks.mirror.thesne ... _wnt5_x86-32_805.7z

6.   现在再来谈一下使用reshacker进行资源优化:
a. reshacker主要是用来对 .exe/.dll/.cpl 里面的图标文件(.ico)和图形文件(.bmp)进行替换。这样做的目的不单是为了美化,而且是为了节省空间。
b. 例如Shell32.dll里面的图标(.ico)很多都包藏好几套点阵,一个图标也许就有100KB大小,假如我们使用一个单含16x16点阵的图标代替它,我们可能减少90%的空间。经过资源优化,shell32.dll由8MB降低至5MB。
c. reshacker是可以批量执行指令的,下面是shell32_xp.res内含的部分批量指令,你可以看到它是如何替换图标和图形,与及删除AVI等文件的:

[Copy to clipboard] [ - ]
CODE:
[FILENAMES]
Exe=%ExeDir%\SHELL32.DLL
SaveAs=%ExeDir%\SHELL32_Patched.DLL
Log=%ExeDir%\SHELL32.LOG

[COMMANDS]
-addoverwrite %ResourceDir%\_WindowsPE.bmp,Bitmap,131,

-addoverwrite %ResourceDir%\sIcon_1.ico,IconGroup,1,
-addoverwrite %ResourceDir%\sIcon_2.ico,IconGroup,2,
-addoverwrite %ResourceDir%\sIcon_3.ico,IconGroup,3,
...
-addoverwrite %ResourceDir%\sIcon_50.ico,IconGroup,21,
-addoverwrite %ResourceDir%\sIcon_50.ico,IconGroup,22,
-addoverwrite %ResourceDir%\sIcon_50.ico,IconGroup,23,
...
-delete AVI,150,
-delete AVI,151,
...
-delete Bitmap,146,
-delete Bitmap,147,


好了,现在教程已经到了终结的时候,我不准备再写下去了,因为不大喜欢没完没了的。我在五部分的教程里面,分别讨论了使用PEBuilder来建造PE核心和进行中文支持,然后使用WinBuilder增加各项功能,加入以explorer为外壳的图形介面,与及修改注册表。我又介绍了PE的后期处理和精简技术,最后又讨论了如何对批量储存器进行支持和资源优化技术。因为本文的主要对像是有动手能力的高级使用者,我行文时比较注重点出方法,没有对细节的描述。我的脚本不是最完善的,但可以对网友起参考和示范作用。建议大家不要一成不变地使用我的脚本,而是应该举一反三,根据自己需要和可能进行修改。各位网友再有问题,我会在时间许可的前提下,以FAQ问答形式跟大家讨论,但不一定每问必答。我希望网友们以自助型式,互相帮忙解决问题。最后,希望大家有一次由零开始制作PE的愉快体验,请请!

FAQ(问和答)

:在我制作繁体版时发现少了simsun.ttc这个字库,和B5AIO.IME,B5AIO.TBL,B5AIOPHR.TBL,B5AIOPTR.TBL,BIG5.NLS,LCPHRASE.TBL,LCPTR.TBL,MINIIME.TPL,UNIIME.DLL,除了simsun.ttc这文件外,我都可以从你制作的核心文件提取到,而simsun.ttc我只能用windows自带的取代,你能重新发布一下这些文件吗?还有这些文件能用在别的语言pe下吗?
:B5AIO.IME,B5AIO.TBL,B5AIOPHR.TBL,B5AIOPTR.TBL是我早年为繁体版制作的通用输入法文件,有拼音和英译功能。BIG5.NLS,LCPHRASE.TBL,LCPTR.TBL,MINIIME.TPL,UNIIME.DLL是繁体版windows自带的文件。我已经把这些文件包含入上面的zzh附件里面重新发布,请重新下载。这些文件应该可以用在别的语言pe下。

:我做出来的pe版本那里没显示是sp3的,只从版本号那里看出来是sp3的版本,这里是怎么回事?
:微软WINPE版本显示讯息包含在sysdm.cpl文件的[String Table]段落,项目180 "Microsoft Windows XP",项目191 "Professional",项目195 "Version 2002"。你需要使用reshacker手动修改为SP3字样才会显示你想要的讯息。

:基于XP SP3的WinPE比起SP2的WinPE多了些啥?值得升级么?
:XP SP3的WinPE没有比SP2的WinPE多了些什么,假如你满意现在SP2的WinPE,不值得升级。本帖的主要用意在于介绍如何从零开始建造WinPE,推介SP3的WinPE反而是次要。

:PROGRAMS.WIM中的那些外置程序的快捷方式是如何建立的?
:PROGRAMS.WIM中的那些外置程序的快捷方式是这样建立的:
PE引导时运行PECMD的配置文件%systemroot%\system32\pecmd.ini,有以下的一段子程式:

[Copy to clipboard] [ - ]
CODE:
/////////////////////////////////////////////////////////////////////////////////
_SUB MountOutSideWIM
FIND B:\>16,CALL NTFS_B
FIND B:\=16,CALL NTFS_B
FIND B:\<16,CALL FAT_B
_END

_SUB NTFS_B
EXEC =!CMD.EXE /C "%SystemRoot%\system32\FORMAT.COM B: /FS:NTFS /V:RAMDisk /Q /C /X /FORCE>NUL"
EXEC =!CMD.EXE /C "mkdir B:\PROGRAMS"
EXEC =!CMD.EXE /C "X:\PROGRAMS\PELINK_CNXP.CMD>NUL"
IFEX B:\PROGRAMS\FREEWB\FREEWB.IME,CALL FREEWB_B
_END

_SUB FAT_B
EXEC =!CMD.EXE /C "mkdir B:\PROGRAMS"
EXEC =!CMD.EXE /C "X:\PROGRAMS\PELINK_CNXP.CMD>NUL"
IFEX B:\PROGRAMS\FREEWB\FREEWB.IME,CALL FREEWB_X
_END
/////////////////////////////////////////////////////////////////////////////////


这段子程式执行脚本文件X:\PROGRAMS\PELINK_CNXP.CMD,有如下一段内容:

[Copy to clipboard] [ - ]
CODE:
if exist %SystemRoot%\system32\autorun.tag goto _findprog
for %%i in (x q w e r t y u i o p s d f g h j k l z c v n m) do (
if exist %%i:\programs.wim set _drive=%%i
)
if not exist %_drive%:\Programs.wim goto _findprog
echo Trying to mount %_drive%:\programs.wim read-write...
start /min /wait imagex.exe /mountrw %_drive%:\programs.wim 1 B:\Programs >nul
if not exist B:\Programs\PROG_WIM.TAG (
if not exist B:\PROG_WIM.TAG (
echo Error. Trying to mount %_drive%:\programs.wim read-only...
start /min /wait imagex.exe /mount %_drive%:\programs.wim 1 B:\Programs >nul
)
)


这段内容负责找寻和挂接programs.wim。之后,脚本运行其建立快捷方式的主要段落 _linkprep,使用shortcut.exe建立快捷方式。例如:

[Copy to clipboard] [ - ]
CODE:
if not exist "%UserProfile%\「开始」菜单\程序\文件工具" mkdir "%UserProfile%\「开始」菜单\程序\文件工具"
if exist "%ProgramFiles%\totalcmd\totalcmd.exe" (start /min /wait ShellExecute.exe -h %SystemRoot%\system32\shortcut.exe /f:"%UserProfile%\「开始」菜单\程序\文件工具\Total Commander.lnk" /a:c /t:"%ProgramFiles%\totalcmd\totalcmd.exe" /w:"%ProgramFiles%\totalcmd")

if exist "%ProgramFiles%\totalcmd\totalcmd.exe" (start /min /wait ShellExecute.exe -h %SystemRoot%\system32\shortcut.exe /f:"%UserProfile%\Application Data\Microsoft\Internet Explorer\Quick Launch\Total Commander.lnk" /a:c /t:"%ProgramFiles%\totalcmd\totalcmd.exe" /w:"%ProgramFiles%\totalcmd")


由上所见,改编脚本文件X:\PROGRAMS\PELINK_CNXP.CMD,即可建立你自己的快捷方式。

:如何才能让PROGRAMS.WIM文件能够以可读写(RW)模式成功挂接?
:.WIM文件是否能够以可读写(RW)模式挂接,需视乎.WIM文件的所在媒体:
1. 假如它是存放在NTFS格式的物理硬盘上面,可读写(RW)模式的挂接是肯定可以实现的;
2. 假如它是存放在PE的系统盘(X:)上面,而该系统盘是以NTFS格式的IMG/SDI模式在RAMDISK上引导出来的,属于硬盘性质,可读写(RW)模式的挂接也好是可以成功的;
3. 但是假如它存放在的PE系统盘(X:)是光盘,或者是以ISO光盘模式在RAMDISK上引导出来的,属于光盘性质,可读写(RW)模式的挂接就不会成功,因为光盘是不可写的。
对于少数需要在可读写媒体运行的程式,如FREEWB,应设法满足1或者2项的要求,或者使用WIM以外的其他型式运行。你也可以考虑把PROGRAMS.WIM放一份到NTFS格式的C:盘上面,让PECMD.INI或者PELINK_CNXP.CMD把它自动优先挂接就成了。