|
老毛桃/老九的YY版PE(配合PECMD)加外置程式和驱动似乎成为了现今无忧的主流PE。 最近下载了老毛桃的杨州版和03版本进行研究,觉得它们最大的特点在于够精简和方便,包含了不少SCSI/SATA/RAID的硬盘驱动于系统核心之中。我认为仍有以下空间可以改进:
1. 增设RAMDRIVE:老毛桃/老九可能认为采用了FBWF使得系统光盘可进行文件读写,就没有必要再保留RAMDRIVE了。我认为不是这样, FBWF服务只可以容许进行文件读写操作,但不能像RAMDRIVE服务一样全面性摹拟一个可读写的磁盘。有一些操作(如imageX /mountrw)在执行前会先检查目标盘,发觉是光盘时就会拒绝执行,虽有FBWF服务也于事无补。所以RAMDRIVE还是有需要的。况且FBWF服务只是向系统申请一个空间,不是对RAM固定占用,所以可以同时设定RAMDRIVE和FBWF而不会多占用内存。
2. 改变环境变量temp和tmp,使其指向RAMDRIVE B:。也需修改注册表,使其较好地支持繁体中文,输入法热键等等。
3. 增设WimFltr服务和imageX,以便对Vista类型镜像WIM的全面支持。
4. 用Vista的WIM技术,建立Programs.wim外置程式镜像: 老毛桃的外置程序文件夹(\Programs\*.*)是放在CD或者硬盘上面的,很多用了WinRAR进行自解压缩以便节省空间。现在我们有了RAMDRIVE和WimFltr服务,可用imageX把众多的程序文件夹压缩成一个外置程式镜像,PE运行时把它外挂到RAMDRIVE B:去。WIM镜像有很好的压缩比率,60MB的外置程序可压缩成35MB的WIM。因为Programs.wim只是外挂,它并没有真正的占用B:盘的空间,所以一只16MB的B:盘挂上60MB的外置程序后仍然有16MB的空间,十分神奇吧?!这样做除了节省空间的特色外,还有把外置程序隐蔽使其不易外露或者被更改的好处。
5. 增加一脚本,使PE可以自动或者手动搜索硬盘、光盘上的Programs.wim或者\Programs外置程序夹。
6. 把PE的文件和文件夹重新恢复标准化:WXPE恢复成I386,TXTSETUP.SI_恢复成TXTSETUP.SIF,SETUPREG.HI_ 恢复成SETUPREG.HIV. 这样做相当于把PE的神秘面纱除了下来,让更多人得以观其真正的面貌。
下面是我的具体做法择要:(所需要文件和成品ISO可以在zhaohj的FTP,khauyeung的文件夹里面找到)
1. 从老毛桃的原ISO中抽出WXPE.IS_, 解压后得WXPE.ISO, 提出里面的文件夹\WXPE,改名为\I386
2. 从老毛桃的原ISO中提出里面的文件夹\外置程序,改名为\Programs
3. 原\I386\TXTSETUP.SI_解压后是仍然不能工作的。把它删除后用我提供的TXTSETUP.SIF代替。
TXTSETUP.rar
(28.63 KB, 下载次数: 256)
4. 把\I386\SYSTEM32\SETUPREG.HI_解压后得SETUPREG.HIV
5. 在Windows或者XPE的操作环境下,运行regedit.exe进行注册表操作, 加载入以下配置单元:\I386\SYSTEM32\SETUPREG.HIV, \I386\SYSTEM32\CONFIG\SOFTWARE, \I386\SYSTEM32\CONFIG\DEFAULT, 分别命名为 cxpe_system, cxpe_software, cxpe_default.
6. 导入我提供的CXPE.REG到注册表里面。
CXPE.REG.rar
(6.59 KB, 下载次数: 303)
7. 卸载配置单元。
8. 把我提供的文件分别加到对应的根目录,I386和Programs文件夹下面。有三只文件至为重要(
3Files.rar
(11.64 KB, 下载次数: 321)
):\I386\SYSTEM32\PECMD.INI, \I386\SYSTEM32\CPEStartup.cmd, \Programs\WINPE.INI。其中CPEStartup.cmd是用来挂接Programs.wim的灵魂。
9. 启动过程大概是这样的:PE启动时运行PECMD.EXE, PECMD.INI负责基本配置工作并把CPEStartup.cmd放在启动文件夹以执行下一步启动任务。CPEStartup.cmd搜索Programs.wim的存在, 把它外挂到RAMDRIVE B:去,并建立连结,最后加载另一个配置文件WINPE.INI。WINPE.INI加载外置基本核心和驱动,然后退出桌面。
10. 你可以参考我的成品ISO里面包含的Programs.wim,看看它是如何与CPEStartup.cmd配合工作的。\Programs\PRO_WIM.TAG是个标志文件。生成Programs.wim的指令大概是imageX
/compress maximum /capture c:\Programs c:\Programs.wim "External Programs for XPE".
假如你看不明白我说什么,那么有二个可能:
1. 我的水平太菜了,写的不知所谓,真的抱歉!
2. 你的水平太菜了,这个帖不看也吧!
很晚了,要去睡觉,迟些再补充吧!
[2007-5-18]: 回应老九建议,把imageX和WimFltr所需的文件和注册表处理整合成下面的组件WimFltr.rar。imageX的使用方法我记得有人详述过,我的中文太菜,不再敖述了。
WimFltr.rar
(387.22 KB, 下载次数: 2843)
[2007-5-19]: 有网友问关于wim镜像的问题,很有共通性,我把问题和答案都放在楼顶这里:
但如果是光盘上的wim镜像 挂接后是否可写呢? 卸载的时候会不会出错?
是否有办法可挂接后内容可写 但卸载后内容不会保存到原镜像里面 这样那些需读写磁盘的软件就不用做成自解压到X盘或B盘的形式了
光、硬盘上的wim镜像, 用imagex /mountrw挂接后都是"可写"的。所谓"可写"是指把转变暂时写在记忆体(RAM)里面而不是直接地写到wim镜像。至于卸载后内容会不会保存到原镜像里面,就要看你下达的卸载过程:如果只想卸载不想保存,用imagex.exe /unmount b:\Programs指令就够了;想卸载又要保存转变到wim镜像里面,必须加上/commit于指令中:imagex.exe /commit /unmount b:\Programs。我现时在YY版PE的处理,是只挂接不卸载,所以转变都不会写回wim镜像中,你希望"那些需读写磁盘的软件就不用做成自解压到X盘或B盘的形式了"的目标是完全可以达到了。从这个角度看来,使用WIM来处理外置程式的优势就更加显而易见了。
现实是光盘上的内容都是只读的,包括Programs.wim,假如你强行/commit /unmount就可能会导致蓝屏。
[2007-5-20]: 有网友问关于蓝屏问题,有共通性,我把问题和答案都放在楼顶这里:
原帖由 fengxi 于 2007-5-19 12:06 PM 发表
按楼主的办法改装毛桃版,用mountrw 挂上了一个wim文件,读取没问题,但往里写东西时就蓝屏了,有谁能解释一下?
我想在回答fengxi问题的同时,向大家指出一些建立Programs.wim外置程式的注意事项。
fengxi,我看过你作测试用的test.wim并做了实验,发觉问题还是出在你制作的wim上面:
你的wim很简单的,**不包含任何文件夹**,只包含二个文件,都放在根目录上面:
\BootXP.IMA
\Vista_MEMTEST.IMA
我用指令imagex /mountrw c:\test.wim c:\mount把它挂在虚拟机的C:盘的\mount文件夹下面,然后用指令copy c:\temp\coolsites.htm c:\mount往它写文件,马上就蓝屏了。假如我挂的不是你的test.wim,而是我的Programs.wim,蓝屏就不出现。那么,你的test.wim出了什么问题呢?
经研究问题是出在它*不包含任何文件夹*。我把你的test.wim改了一下,根目录下面增加了一只叫images的文件夹,然后把二个文件放在文件夹里面:
\images\BootXP.IMA
\images\Vista_MEMTEST.IMA
使用相同的指令挂接和写文件,这次写操作完全成功,蓝屏并不出现。随后的imagex /commit /unmount c:\mount指令也成功把所写的coolsites.htm这个转变更新到test.wim中。
我不懂如何解释这发生的现象,我想假如wim下面不带文件夹,wimfltr很可能会视它为一整个硬盘,写操作时会申请一个很大的临时空间,从而把系统搞垮。
结论是建立外置程式的wim镜像时,根目录下面最小得包含一只文件夹,写操作时要考虑系统的内存和临时写空间的承受能力。老毛原程式带很多自解压程序,解压过程必须使用临时写空间,不利wimfltr操作,同时也拖慢执行速度,建议解压后才整合到wim镜像中去。
[2007-5-25]: 答覆了网友关于使用imagex mount和mountrw的问题。
原帖由songq发表
还要请教楼主,老毛桃的iso我始终没有改成功(在虚拟机里mountrw不成功,mount可以),
现在在下楼主的iso.
1. 不用iso,用移动硬盘peldr+img,采用老九的最新pecmd没问题.可以读写,没有用到ramdrv.
2.如果用iso方式(也是img),在vmware虚拟机里,pecmd moun 加载不行,我以为是光盘启动需要ramdrv的原因,又把它加上,还是不行,但试了imagex mountrw不行,如果mount的话则可以.
是什么原因呢?
楼主改动的太多了,我只想把外置程序压缩成wim,但始终没弄好,再不行的话,从你的iso往回改
回答你的问题:
1. 用移动硬盘peldr+img时,你的PE是建立在硬盘上的(X:盘是硬盘),你的Programs.wim也是在硬盘上,而且挂接的目标盘也是在硬盘上。硬盘是可以读写的,所以一切都不成问题。
2. 用iso方式时,你的PE是建立在光盘上的(X:盘是光盘),假如把挂接的目标盘设定在X:盘的话,无论你用mountrw或者mount,挂接都不会成功,因为imagex会拒绝把wim挂接到唯读光盘。假如你加了ramdrv,并把挂接的目标盘设定为ramdrv,那么用mount指令是肯定没有问题了,但是mountrw还是有机会不成功的,这是因为如下面老九指出的:imagex /mountrw 参数要求原来的WIM文件是可写的,放在光盘上的WIM文件是只读的,所以 imagex /mountrw 挂不上WIM文件,要改用 imagex /mount。
关于如何灵活地自动处理用mount和mountrw的方法,请参考我下面答覆老九附上的脚本。
原帖由 lxl1638 于 2007-5-26 12:24 AM 发表
是不是这样:
imagex /mountrw 参数要求原来的WIM文件是可写的,放在光盘上的WIM文件是只读的,
所以 imagex /mountrw 挂不上WIM文件?
回答老九,你已经正确地答覆了自己提出的问题了。其实,我们不一定把wim挂接成可读可写的。我自己是用一只CPEStartup.cmd来执行找寻和挂接的wim文件的,我的处理原则是:先尝试用mountrw挂接到ramdrv,不成功则改用mount挂接。下面列出有关部分:- ......
- start /min /wait %SystemRoot%\system32\FORMAT.COM B: /FS:NTFS /V:RAMDisk /Q /C /X /FORCE>NUL
- if not exist "%ramdrv%\Programs" mkdir "%ramdrv%\Programs"
- :load1st
- set ProgramFiles=x:\Programs
- goto _linkprep
- :autoruntag
- echo autorun finished at %time% >%SystemRoot%\system32\autorun.tag
- :load2nd
- 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 _linkprep
- if not exist "%ramdrv%\Programs" mkdir "%ramdrv%\Programs"
- start /min /wait imagex.exe /unmount %ramdrv%\Programs >nul
- echo Trying to mount %_drive%:\programs.wim read-write...
- start /min /wait imagex.exe /mountrw %_drive%:\programs.wim 1 %ramdrv%\Programs >nul
- if not exist %ramdrv%\Programs\PROG_WIM.TAG (
- if not exist %ramdrv%\PROG_WIM.TAG (
- echo Error. Trying to mount %_drive%:\programs.wim read-only...
- start /min /wait imagex.exe /mount %_drive%:\programs.wim 1 %ramdrv%\Programs >nul
- )
- )
- set ProgramFiles=%ramdrv%\Programs
- goto _linkprep
- ......
- :_linkprep
- ......
- goto autoruntag
复制代码 对于那些有需要对wim进行写操作的人来说,他们应该把Programs.wim放到硬盘中去(或者是IMG/SDI-PE的X:盘)而不是放在光盘。假如你没有对wim的写需要,放在什么地方都不会成为问题。
[ 本帖最后由 khauyeung 于 2007-5-26 12:18 PM 编辑 ] |
|