- UID
- 2618
上士
- 积分
- 2876
- 经验
-
- 点数
-
- 油豆
-
- 荣誉
-
- 在线时间
- 小时
- 注册时间
- 2007-6-27
- 最后登录
- 1970-1-1
该用户从未签到
|
楼主 |
发表于 2009-3-24 23:08
|
显示全部楼层
实我们可以再压缩一下,eula.txt实际上没有用的,静默安装的话根本不会出现,所以可以把里面的文件清空(其实没多在必要)
这一看没有多少,也就640KB,但是数十个目录的话,就显得恐怖许多啦,所以,这里可以使用7-ZIP的共享压缩技术,为了在压缩的时候顺利通过CRC校验,呵呵,把所有的补丁包的上面列表文件都覆盖吧!
接下来就简单了,下载最新版本的7-ZIP压缩工具,选中所有的文件,然后右键,采用7-ZIP压缩,在出现的界面中,要注意几点,一,压缩算法采用LZMA,压缩级别选择极限压缩,并在压缩共享文件选项中打上勾.然后点确定吧!!!!.....................看到了没,呵呵,压缩得结果是不是很爽啊,我这里是33MB......(其实msxml.msi我也想去掉的,这样就又少了5MB,可惜最好是不能去掉)
下面的就是用7-zip的自解压模块进行打包了,具体的我不说了,提供一下我自已的脚本
config.txt
;!@Install@!UTF-8!
Title="大家园丁茶坊学生机系统V3.9升级补丁"
BeginPrompt="您确认要升级 大家园丁茶坊学生机V3.9 吗?"
RunProgram="setup.exe /T:%%T"
;!@InstallEnd@!
patch.bat
;!@Install@!UTF-8!
Title="╃赢政天下- 我最迷人WindowsxpSP2补丁集(更新之20071019)"
BeginPrompt=" 您确认要开始打WindowsXP SP2的补丁吗?"
RunProgram="setup.exe /T:%%T"
;!@InstallEnd@!
七 附录1 MAULO 本地补丁制作方法
这里来说一下具体的制作步骤,并列上批处理脚本,方便大家其它Windows 版本本地补丁包制作。这样制作的好处是安装快速,也方便后期加工,因为这些都是已解压的。本人在批处理上是门外汉,都是现学现用、现学现查写出来的,可能还不够精练,大家可以一起来讨论。这里以Windows server 2003 with sp1 为例进行说明。
1、安装全新原版Win 2003 sp1,建议在VM虚拟机中安装。
2、安装后马上关闭自动更新。安装好VM tools,以方便与宿主机的文件共享。联网并进行手动更新。
3、在更新已下载完毕并开始安装时,可以进行本地补丁安装源的备份了,在宿主机的E:盘下建立一个HOTFIX目录,再在这个目录下并列建立temp目录(为了与下面的脚本对应起来,建议这样建立,如果自己要改,下面的脚本中也要进行相应修改)。进入虚拟机系统盘的WINDOWS\SoftwareDistribution\Download目录下将所有的目录选定,并将它们拖动到宿主机的E:\HOTFIX\temp目录中,这时就会在双机之间进行文件复制。此外Download目录下还有几个没有扩展名的文件,其中一个5M多的为Windows Malicious Software Removal Tool,可以不去管它,而一个500多K的为KB922582的安装程序,加上exe扩展名并点击运行,不要点下一步进行安装,进入到C:或D:的根目录下,可以发现增加了一个如1091d42eb9e9e3da45这样的文件夹,将这个文件夹也拖到宿主机的E:\HOTFIX\temp目录中进行备份,这样应该说大部分的高优先的补丁都已备份齐了。说明一下,如果在虚拟机中复制这个文件夹,将会被阻止,而在虚拟机与宿主机之间进行复制就没有这个问题。
4、在宿主机的E:\HOTFIX\temp目录中建立一个批处理文件如autodo.cmd,内容如下:
代码:
del .\_file_to_execute_.txt /f/s/q/a
del .\_*.state /f/s/q/a
del .\$shtdwn$.req /f/s/q/a
del .\susdl.rq0 /f/s/q/a
del .\Windows*.psm /f/s/q/a
del .\update.url /f/s/q/a
dir /a:d /s /a /b | findstr /i /c:"update\KB" >list.txt
for /F "tokens=4 delims=\" %%i in (list.txt) do rd /S /Q %%i\backup
md ..\updates
for /F "tokens=4,6 delims=\." %%i in (list.txt) do move /y .\%%i ..\updates\%%j
dir ..\updates /a:d /s /a /b | findstr /i /c:"update\update.exe" >..\updates\setup.cmd运行这个批处理,最后会在e:\hotfix\updates\下得到了一个安装脚本setup.cmd,不过这个只能进行手动安装,要实现自动安装,可以将setup.cmd中的update.exe 替换成update.exe /q /n /z就可以了,另外将每行的"e:\hotfix\updates\"替换成".\",方便移动到其它地方安装。
至止本地安装源已其本制作完成了,不过这样的体积还比较大。后续可以进行分离和压缩,就可得到体积比较小的安装包了
八 附录2 QFE补丁批量提取方法
这是今天研究出来的,更新一下
第一 得到所有的补丁文件名
(1)下载完所有的补丁,保存在一个文件夹下,这里可以这样子做,解压缩雨林木风的补丁包,这样子我们就得到所有的单独补丁文件
(2)写批处理,第一步,提取所有的文件名到一个文件中
@echo off
dir /b |findstr /i "KB" >hotfix.txt
意义为列表所有的文件名中包含KB两个字符的文件名到hotfix.txt中,kb是忽略大小写的
这样我们在hotfix.txt中就得到了当前目录下所有补丁文件的名称
第二 提取所有的补丁到KB******目录
kb*****我们的目的和要求就是让计算机自动帮我们提取补丁中的目录和文件
补丁自动提取的参数是 kb***.exe /x:.\kb***
我们可以用以下批处理命令来完成
setlocal EnableDelayedExpansion
for /f "delims=" %%a in (hotfix.txt) do (
set var=%%a
set var=!var:kb=#!
set var=!var:*#=!
for /f "tokens=1 delims=-." %%b in ("!var!") do (
@echo 正在提取Windows_XP_Sp2_QFE 更新 kb%%b ,请稍等 && @%%a /x:.\kb%%b /q
)
上面这段bat代码特别感谢junchen2,lxmxn,26933062,slore,zerocq,fastslz等朋友们的指点
第三 提取QFE补丁安装所需要的文件
当目录提取出来之后,我们可以发现,KB******目录中包含了很多的目录,其中有许多我们不想要的,如何让计算机自动帮我们提取我们想要的文件呢?其中的sp2gdr,sp1qfe目录都是用不到的
通过分析我们可以发现,QFE节点安装方式只需要KB******目录中的两个目录update和sp2qfe目录
我们可以通过以下代码来让计算机自动帮我们完成这项工作
md .\kb%%b_backup
move .\kb%%b\update .\kb%%b
move .\kb%%b\sp2qfe .\kb%%b
rd .\kb%%b /s /q
ren kb%%b_backup kb%%b
这样我们就初步得到了kb******目录中QFE安装方式所需要的文件夹
接下来我们还要再精简一下,删除sp2qfe目录的sp1qfe.inf和sp2gdr.inf
通过以下代码可以完成
if exist qfe_bak_kb%%b\update\update_SP1QFE.inf del qfe_bak_kb%%b\update\update_SP1QFE.inf /q
if exist qfe_bak_kb%%b\update\update_SP2GDR.inf del qfe_bak_kb%%b\update\update_SP1GDR.inf /q
if exist qfe_bak_kb%%b\update\update_SP2GDR.inf del qfe_bak_kb%%b\update\update_SP2GDR.inf /q
这样我们就得到了QFE补丁的安装文件
参考:以下是我编写的完整批处理文件,不当之处请多多指正!
qfe_start.cmd
@echo off
dir /b |findstr /i "KB" >hotfix.txt
setlocal EnableDelayedExpansion
for /f "delims=" %%a in (hotfix.txt) do (
set var=%%a
set var=!var:kb=#!
set var=!var:*#=!
for /f "tokens=1 delims=-." %%b in ("!var!") do (
if exist kb%%b @echo -更新kb%%b已经提取,现在提取同名更新 KB%%b_2 ,请您手工分析...... && @%%a /x:.\kb%%b_2 /q
if not exist kb%%b @echo -正在提取Windows_XP_Sp2_CHS_QFE 更新 KB%%b ,请稍等 ...... && @%%a /x:.\qfe_bak_kb%%b /q
if not exist kb%%b md .\KB%%b
if exist qfe_bak_kb%%b move .\qfe_bak_kb%%b\update .\kb%%b
if exist qfe_bak_kb%%b move .\qfe_bak_kb%%b\sp2qfe .\kb%%b
if exist qfe_bak_kb%%b rd .\qfe_bak_kb%%b /s /q
if exist KB%%b\update\*SP1QFE.inf del kb%%b\update\*SP1QFE.inf /q
if exist KB%%b\update\*GDR.inf del kb%%b\update\*GDR.inf /q
echo -WindowsXP-KB%%b 的QFE更新部分已提取完成!
echo -
echo -
)
)
del hotfix.txt /q
cls
echo -
echo -
echo -
echo ------------------------------------------------------------------
echo -windows_XP_Sp2_QFE 补丁集已全部提取并制作完成! 请按任意键退出
echo -
echo -本补丁脚本编写制作:清风无影 2007.10.21
echo -[url]http://bbs.winzheng.com
echo -[url]http://bbs.ydxz.cn
echo ------------------------------------------------------------------
pause
qfe_start.rar
附录8 关于如何再精简补丁包体积的问题
同理,利用7Z的共享压缩原理,如果文件同名,CRC相同,就会只压缩一份
所以,把所有目录下的update.exe,spcustom.dll,updspapi.dll都采用最新的版本提供的文件!
用copy命令可以很容易实现
另外,所有update目录下的eula.txt,branches.inf由于是采用/q/n/z静默安装都是用不到的,所以也可以全部删除,可以用del或查找能容易实现.
最后,由于补丁包里有很多文件实际上由于更新时间的差异,但文件都是一样的,所以可以用新的代替旧的,这个可以用replace来实现!!
下面我提供一下脚本,这个可以放在补丁集目录下执行!
echo 请将本脚本放在QFE补丁集目录下执行
pause
md ..\source
copy kb943460\update\update.exe .\
copy kb943460\update\spcustom.dll .\
copy kb943460\update\updspapi.dll .\
dir /b /o-d |findstr /i "KB" >hotfix.txt
setlocal EnableDelayedExpansion
for /f "delims=" %%a in (hotfix.txt) do (
copy spcustom.dll %%a\update /y
copy update.exe %%a\update /y
copy updspapi.dll %%a\update /y
del %%a\update\eula.txt /q
del %%a\update\branches.inf /q
copy %%a\sp2qfe\*.* ..\source
)
replace ..\source\*.* ..\qfe /s /u
del ..\source\*.* /q
rd ..\source /s /q
del .\hotfix.txt /q
del .\update.exe /q
del .\updspapi.dll /q
del .\spcustom.dll /q
echo QFE体积瘦身行为已经完成
pause |
|