Board logo

标题: [3]让你的Ghost XP更加自动化---dllcache的重建 [打印本页]

作者: benjaminwan    时间: 2004-5-27 05:33     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

[这个贴子最后由benjaminwan在 2004/05/31 07:44am 第 4 次编辑]

[1]让你的Ghost XP盘更加自动化--自动选择计算机类型原理简述
[2]让你的Ghost XP更加自动化---计算机类型自动检测的实现
[3]让你的Ghost XP更加自动化---dllcache的重建
[4]让你的Ghost XP更加自动化---最后的保护:OOBC
一般情况下,为减少万能Ghost XP的体积,制作时都删除了dllcache下的文件,但这样也破坏了系统的稳定性
曾有人提出,制作一个批处理,在最小化安装的注册组件阶段重建dllcache,但无奈文件太多太分散,不好实现。
但并不是不能实现。
我的实现方法:
1.在重新封装之前用命令dir %systemroot%\system32\dllcache\*.* /a /b> c:\sysprep\file.txt
保存dllcache内的文件列表到文件file.txt,因为操作系统不同,安装的系统组件不同,
dllcache内的文件不相同。
2.然后可以用sfc /purgecache清除dllcache了
3.最后在注册组件阶段用类似如下的命令来复制文件
FOR /F "usebackq" %%i IN (file.txt) DO if exist %systemroot%\%%i copy %systemroot%\%%i %systemroot%\system32\dllcache
这行命令的意思是读取file.txt的每一行并写入变量i中,并为每一行执行一个命令。
例如,file.txt第一行为abc.dll,第二行为efg.dll
那么实际执行时就会变成以下两句
if exist %systemroot%\abc.dll copy %systemroot%\abc.dll %systemroot%\system32\dllcache
if exist %systemroot%\efg.dll copy %systemroot%\efg.dll %systemroot%\system32\dllcache
file.txt内有多少行,就执行多少次命令
所以只要让它为各个不同的目录执行复制就可以了。
不要担心它的执行效率,只要在echo off模式下,速度并不慢,占用的时间大部分是花在复制文件上。
百密必有一疏,虽然这样做比较方便,但总有些文件会漏掉。
我提供的附件里的批处理,也只能恢复大概80%的dllcache内的文件。(在XP下测试)
----------------------------------------------------------------------------------------------------------
上篇文章中曾提到计算机类型的自动检测,其实方法多种多样,这次提供的附件中就附带了用PE来实现自动检测的批处理。
一个方法只有应用到实际中才可以显出其优劣,但你看到的不应该仅仅是它的优劣,而应该明白这个方法所蕴涵的知识。
-------------------------------------------------------------------------------------------------------------
                                                                    benjaminwan
                                                                    2004.5.26
作者: benjaminwan    时间: 2004-5-27 05:33     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

[这个贴子最后由benjaminwan在 2004/05/30 12:22pm 第 3 次编辑]

part2
作者: benjaminwan    时间: 2004-5-27 05:34     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

[这个贴子最后由benjaminwan在 2004/05/30 12:23pm 第 4 次编辑]

part3
作者: shadowman    时间: 2004-5-27 06:24     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

辛苦您了!支持!!
至于只能安装80%,是不是file.txt不太准确,要知道dllcache里不光只是文件,还有文件夹,是不是文件夹里的文件没写进file.txt里呢?
作者: kicker    时间: 2004-5-27 18:01     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

辛苦您了!支持!!
作者: je64    时间: 2004-5-27 18:17     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

FOR /F "usebackq" %%i IN (file.txt) DO if exist %systemroot%\%%i copy %systemroot%\%%i %systemroot%\system32\dllcache
这个是不是只能拷贝%systemroot%目录里的,不能拷贝其它目录里的呢?
DLLCACHE里面是没有文件夹的!
作者: je64    时间: 2004-5-27 18:25     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

你附件中的DLL恢得的长文件名可能会出错!
作者: benjaminwan    时间: 2004-5-27 21:35     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

引用:
下面引用由je642004/05/27 10:17am 发表的内容:
FOR /F "usebackq" %%i IN (file.txt) DO if exist %systemroot%\%%i copy %systemroot%\%%i %systemroot%\system32\dllcache
这个是不是只能拷贝%systemroot%目录里的,不能拷贝其它目录里的呢?
DLL ...
是的,只能复制%systemroot%目录里的文件。
引用:
下面引用由je642004/05/27 10:25am 发表的内容:
你附件中的DLL恢得的长文件名可能会出错!
不用担心,其实不能恢复的那部分文件,就是由长文件名改成了短文件名存在dllcache下
打开用于控制XP安装时复制文件的txtsetup.sif
可以看到类似如下的复制语句:
evcreate.exe = 1,,,,,,,2,0,0,eventcreate.exe
意思是:原文件名为evcreate.exe,来源为i386,复制到%systemroot%\system32
复制后改名为eventcreate.exe
同时这个文件也要被复制到dllcache下,但文件名仍为evcreate.exe
所以对这部分文件比较难办。
作者: benjaminwan    时间: 2004-5-28 00:35     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

由于没有考虑到XP的osloader不能用于2003,所以昨天的附件在2003下重新封装会导致2003无法启动,现已更正,附件已更新。
作者: je64    时间: 2004-5-28 01:08     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

引用:
下面引用由benjaminwan2004/05/27 01:35pm 发表的内容:
不用担心,其实不能恢复的那部分文件,就是由长文件名改成了短文件名存在dllcache下
打开用于控制XP安装时复制文件的txtsetup.sif
可以看到类似如下的复制语句:
evcreate.exe = 1,,,,,,,2,0,0,eventcreate.exe
...
其实我是指你的路径了!!!
比如:
Microsoft Shared
要不要改成
Micros~1
eventcreate.exe这种长文件名的我在DLLCACHE目录里面倒是没发现!
作者: 金雕    时间: 2004-5-28 03:23     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

附件3为0字节?
作者: benjaminwan    时间: 2004-5-28 03:23     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

引用:
下面引用由je642004/05/27 05:08pm 发表的内容:
其实我是指你的路径了!!!
比如:
Microsoft Shared
要不要改成
...
我所提供的是.cmd文件,而不是.bat文件
.cmd文件是用命令解释器 Cmd来运行
.bat文件是用命令解释器 Command来运行
cmd命令支持长路径和长文件名,带有空格的路径必须加",比如"c:\program files\microsoft shared\abcdefgh.dll"
作者: 金雕    时间: 2004-5-28 03:39     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

为什么我的不能解压缩?
作者: hkb1982    时间: 2004-5-28 04:52     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

第三个附件是空的啊,请楼主更新一下吧!~~~~
作者: benjaminwan    时间: 2004-5-28 06:04     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

附件再次更新了
现在可以了
作者: shadowman    时间: 2004-5-28 08:09     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

至于将短文件名转换为长文件名,在deploy.chm找到以下内容,不知能不能帮上忙:
在 Windows 安装过程中,使用 $$Rename.txt 文件将这些 8.3 名称恢复为长文件名。$$Rename.txt 必须位于 $OEM$\$1 文件夹中。
$$Rename.txt 的语法:
[Section_name_1]
Short_name_1 = "Long_name_1[$$]"
Short_name_2 = "Long_name_2[$$]"
     .
     .
Short_name_x = "Long_name_x[$$]"
[Section_name_2]
     .
     .
参数
Section_name_1,Section_name_2,等等
包含文件的文件夹路径。部分可以没有名称,或以反斜杠 (\) 作为其名称。反斜杠表示该部分包含位于驱动器根目录上的文件或子文件夹的名称。
Short_name_1,Short_name_2,等等
文件夹中将被重命名的文件或文件夹的名称。请不要将这些名称置于引号内。
Long_name_1,Long_name_2,等等
文件或子文件夹的新名称。如果名称中有空格或逗号,请将其置于引号内。
如果 Long_name_x 是配置文件目录的名称,并且结尾有“$$”,则安装程序将合并该目录和当前的配置文件目录。
例如,如果 $$Rename.txt 文件包含下面的项:
[\]
D = "Documents and Settings$$"
那么,此部分中列出的文件将放在“Documents and Settings$$”配置文件目录中。

作者: benjaminwan    时间: 2004-5-28 15:26     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

[这个贴子最后由benjaminwan在 2004/05/28 07:31am 第 1 次编辑]
引用:
下面引用由shadowman2004/05/28 00:09am 发表的内容:
至于将短文件名转换为长文件名,在deploy.chm找到以下内容,不知能不能帮上忙:
在 Windows 安装过程中,使用 $$Rename.txt 文件将这些 8.3 名称恢复为长文件名。$$Rename.txt 必须位于 $OEM$\$1 文件夹中。
$$R ...
是的,这部分文件比较少,比如象XPBalln.wav改为Windows XP 气球.wav
谢谢你提出的建议
作者: je64    时间: 2004-5-29 00:38     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
SfcQuota"=dword:ffffffff
是什么意思,有什么作用的?
作者: benjaminwan    时间: 2004-5-30 06:20     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

引用:
下面引用由je642004/05/28 04:38pm 发表的内容:
SfcQuota"=dword:ffffffff
是什么意思,有什么作用的?
设置文件缓存大小为最大
作者: benjaminwan    时间: 2004-5-30 20:26     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

5月30日
修正用PE实现自动选择计算机类型的批处理中对多处理器支持的错误
附件已更新
作者: je64    时间: 2004-5-30 20:36     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

用PE这样,是不是有点麻烦,JUJUMAO的方法也不错啊!
作者: 金雕    时间: 2004-5-30 22:44     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

引用:
下面引用由benjaminwan2004/05/30 12:26pm 发表的内容:
5月30日
修正用PE实现自动选择计算机类型的批处理中对多处理器支持的错误
附件已更新
请问您的这个是不想jujumao的那样完美解决了多处理器的问题?
作者: je46    时间: 2004-5-31 00:08     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

为何操作系统的初步安装也会出现检测错误的问题,还得人为修正?
作者: benjaminwan    时间: 2004-5-31 02:34     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

[这个贴子最后由benjaminwan在 2004/05/30 06:41pm 第 1 次编辑]
引用:
下面引用由金雕2004/05/30 02:44pm 发表的内容:
请问您的这个是不想jujumao的那样完美解决了多处理器的问题?
关于“完美”:我只能说我的方法并不完美,除非你不在乎那40M的空间。
关于“完美+多处理器”:由于PE的检测过程和全新安装的XP是一样的,全新XP装出来是什么样的,PE检测出来就是什么样的,所以不管是AMD还是Intel,不管是几年前红极一时的双CeleronA、双毒龙、还是现在的双Athlon MP、双Xeon、超线程甚至未来的双处理器,我想只要我的批处理没有出错,都不会有问题。
至于别人的方法,我没有试过也没有多处理器,所以也无从评价。
由于制作一个这样的Mini PE在方法上很简单,我也就没有多说,只当一个附属品发布,但是如果有错误,我还是会即时更正的。
引用:
下面引用由je462004/05/30 04:08pm 发表的内容:
为何操作系统的初步安装也会出现检测错误的问题,还得人为修正?
是我的批处理脚本中的几处文件名写错了,你误解了我的话
作者: hkb1982    时间: 2004-5-31 02:57     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

关于“完美”:我只能说我的方法并不完美,除非你不在乎那40M的空间。
关于“完美+多处理器”:由于PE的检测过程和全新安装的XP是一样的,全新XP装出来是什么样的,PE检测出来就是什么样的,所以不管是AMD还是Intel,不管是几年前红极一时的双CeleronA、双毒龙、还是现在的双Athlon MP、双Xeon、超线程甚至未来的双处理器,我想只要我的批处理没有出错,都不会有问题。
至于别人的方法,我没有试过也没有多处理器,所以也无从评价。
由于制作一个这样的Mini PE在方法上很简单,我也就没有多说,只当一个附属品发布,但是如果有错误,我还是会即时更正的。
其实我觉得你的这个方法很不错的,对电源的选择是完全正确的!不会出现错误的现象!40m的pe在硬盘上很好啊,我喜欢把pe放在硬盘上!就是在重新封装的过程,是否会比较慢呢?在检测电源时!~
作者: xxxyzxx    时间: 2004-5-31 03:51     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

写得实用,但我是保守派,仍然会用最完全版的GHOST!
作者: 抚轩    时间: 2004-5-31 05:40     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

ghost xp不稳定
作者: 金雕    时间: 2004-5-31 06:53     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

引用:
下面引用由抚轩2004/05/30 09:40pm 发表的内容:
ghost xp不稳定
不能一概而论的!很多的ghostxp还是很好的
作者: shadowman    时间: 2004-6-1 21:17     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

这是 死性不改 写的批处理,放上来,大家看看吧!
作者: je64    时间: 2004-6-1 22:26     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

@echo off
dir %systemroot%\system32\dllcache /a /b >files.txt
sfc /purgecache
echo @echo on >fdir.cmd
for /f %%I in (files.txt) do echo dir c:\%%I /a /b /s ^>^>%systemroot%\fdir.txt >>fdir.cmd
call fdir.cmd
del fdir.cmd
del files.txt
pause

@echo off
set fdir=%systemroot%\fdir.txt
for /f "usebackq" %%J in (%fdir%) do copy %%J %systemroot%\system32\dllcache\ >nul
del %fdir%
pause
好深奥啊,讲解一下呀!!


作者: benjaminwan    时间: 2004-6-2 00:48     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

@echo off
关闭回显
dir %systemroot%\system32\dllcache /a /b >files.txt
先把dllcache内的文件列表存在files.txt
sfc /purgecache
清除dllcache
echo @echo on >fdir.cmd
把@echo on这句存入fdir.cmd
执行fdir.cmd时首先将会开启回显
for /f %%I in (files.txt) do echo dir c:\%%I /a /b /s ^>^>%systemroot%\fdir.txt >>fdir.cmd
for /f %%I in (files.txt)  意思是 把files.txt每一行的文件名读入变量i,一次读入一行。
dir c:\%%I /a /b /s  意思 是在整个C:上查找变量i所存的文件名
^>^>  意思是 执行时把"^>^>"当作普通字符">>"来处理
实际整句执行时,这一句会把files.txt里每一行转化成,dir c:\每行内容 /a /b /s>>fdir.txt,并存在fdir.cmd(这一步由于不能用echo off
模式,所以执行速度很低)
例如files.txt第一行为abc.dll,第二行为cde.dll
那么将转化为
dir c:\abc.dll /a /b /s>>fdir.txt
dir c:\cde.dll /a /b /s>>fdir.txt
这句的意思是在整个C:上用dir查找cde.dll
然后把找到的文件完整路径写入fdir.txt(这步将花掉很多时间,毕竟是在成千上万个文件中查找一个文件)
call fdir.cmd
调用fdir.cmd
del fdir.cmd
del files.txt
删除临时文件
set fdir=%systemroot%\fdir.txt
设置变量fdir为%systemroot%\fdir.txt
for /f "usebackq" %%J in (%fdir%) do copy %%J %systemroot%\system32\dllcache\ >nul
读取fdir.txt中每一行(上面的命令所得到的文件完整路径),执行复制命令
del %fdir%
删除%systemroot%\fdir.txt
-------------------------------------------------------------------------------------
以上所有命令的详细帮助就在2000的帮助和支持中心。
想知道所有命令的详细使用方法,在帮助和支持中心中以"命令行参考"为关键字查找,即可找到"命令行参考 A-Z"
-------------------------------------------------------------------------------------
可惜的是,这个方法对dllcache的文件改名复制机制仍然无效。
撇开执行效率低不谈,如果出现C:中其他不相关文件夹里有一个文件,本不该和dllcache内的文件重名,却重名了,当这个文件被最后复制时
,将被错误的复制到dllcache里,替代正确的文件。
这是一种欠缺深思熟虑的做法,很抱歉,这种做法我无法认同。
作者: je64    时间: 2004-6-2 18:40     标题: [3]让你的Ghost XP更加自动化---dllcache的重建

引用:
下面引用由benjaminwan2004/06/01 04:48pm 发表的内容:
@echo off
关闭回显
dir %systemroot%\system32\dllcache /a /b >files.txt
先把dllcache内的文件列表存在files.txt
...
谢谢,那还有没有更好的方法!!




欢迎光临 EZB 论坛 (http://ultraiso.net/ezbbbs/) Powered by Discuz! 6.1.0