本帖最后由 mmxx2013 于 2018-8-12 19:13 编辑
离线集成Windows补丁的方法很多,我这里要说的是用系统自带的dism离线集成补丁,虽然说的是Windows 7的,Windows 8/8.1/10等系统集成补丁的方法也可参照此法,不过,给Windows 10集成离线补丁,必须用Windows 10以上版本的dism。
用dism集成补丁,好处是集成哪些补丁、集成顺序很好操作,而且,很方便顺序给多个版本集成补丁。
本文以给包含四个版本的 “cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso” 集成补丁为例,介绍用批处理文件方式依次给四个版本集成补丁的方法。文中先将四个版本从“install.wim”导出、集成补丁后再合并的用意在于,当集成补丁后,如果需要刻盘时,如果四个版本合并在一起,大小可能超过一张DVD-5的容量,这时可以把常用的版本改名为“install.wim”,用其替换原ISO文件里的“install.wim”,这样做出的ISO文件大小有可能刻录到一张DVD-5上。
一、获取待集成补丁用微软发布的最新版系统文件安装系统,然后检查更新。如果卡在“正在检查更新”,可以先安装KB3138612。本文举例使用“cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso”安装系统,安装IE11(必须先安装KB2533623、KB2639308、KB2670838、KB2729094、KB2731771、KB2786081、KB2834140、KB2882822、KB2888049),安装KB3138612,然后查找更新。
2016-12-31 23:45 上传
下载附件 (66.83 KB)
2016-12-31 23:46 上传
下载附件 (182.22 KB)
2016-12-31 23:46 上传
下载附件 (156.25 KB)
用文本捕捉软件,如TextCatch、HyperSnap 6.xx版,捕捉补丁列表上的文字。
2016-12-31 23:47 上传
下载附件 (45.67 KB)
二、准备集成所需文件在任一分区根目录下建立工作文件夹。
2016-12-31 23:54 上传
下载附件 (35.28 KB)
把IE11安装文件“IE11-Windows6.1-x64-zh-cn.exe”解压后复制到“Win7x64_hotfix\IE11\IE11_install”文件夹,解压命令为:
IE11-Windows6.1-x64-zh-cn.exe /x: 复制代码如果“Win7x64_hotfix\IE11\IE11_install”文件夹下解压,解压命令为:
IE11-Windows6.1-x64-zh-cn.exe /x: .复制代码
把集成IE11所需的补丁复制到“Win7x64_hotfix\IE11\IE11_hotfix”文件夹,这些补丁包括:KB2533623、KB2639308、KB2670838、KB2729094、KB2731771、KB2786081、KB2834140、KB2882822、KB2888049。
把原ISO文件解压到“Win7x64\原ISO文件解压”文件夹。
从“Win7x64\原ISO文件解压\sources\install.wim”导出四个版本的wim分卷。导出分卷操作可以用dism++完成,不过,用命令行方式操作更方便。
如果在Windows 8以上系统操作,可以用dism完成,命令格式如下:
dism /export-image /sourceimagefile: /sourceindex: /destinationimagefile:复制代码
将导出分卷的命令编成批处理文件,方便以后使用。
批处理文件举例:
@cls
set work_dir=%~dp0
set wim_file_install=%work_dir%原ISO文件解压\sources\install.wim
set wim_file_Homebasic=%work_dir%Wim卷导出\Homebasic.wim
set wim_file_Homepremium=%work_dir%Wim卷导出\Homepremium.wim
set wim_file_Professional=%work_dir%Wim卷导出\Professional.wim
set wim_file_Ultimate=%work_dir%Wim卷导出\Ultimate.wim
cd /d "%work_dir%"
dism /export-image /sourceimagefile:%wim_file_install% /sourceindex:1 /destinationimagefile:%wim_file_Homebasic%
dism /export-image /sourceimagefile:%wim_file_install% /sourceindex:2 /destinationimagefile:%wim_file_Homepremium%
dism /export-image /sourceimagefile:%wim_file_install% /sourceindex:3 /destinationimagefile:%wim_file_Professional%
dism /export-image /sourceimagefile:%wim_file_install% /sourceindex:4 /destinationimagefile:%wim_file_Ultimate%
@echo 操作完成。
@pause复制代码
如果在Windows 7系统操作,可以用imagex完成,命令格式如下:
imagex /export 复制代码将导出分卷的命令编成批处理文件,方便以后使用。
批处理文件举例:
@cls
set work_dir=%~dp0
set wim_file_install=%work_dir%原ISO文件解压\sources\install.wim
set wim_file_Homebasic=%work_dir%Wim卷导出\Homebasic.wim
set wim_file_Homepremium=%work_dir%Wim卷导出\Homepremium.wim
set wim_file_Professional=%work_dir%Wim卷导出\Professional.wim
set wim_file_Ultimate=%work_dir%Wim卷导出\Ultimate.wim
cd /d "%work_dir%"
imagex /export %wim_file_install% 1 %wim_file_Homebasic%
imagex /export %wim_file_install% 2 %wim_file_Homepremium%
imagex /export %wim_file_install% 3 %wim_file_Professional%
imagex /export %wim_file_install% 4 %wim_file_Ultimate%
@echo 操作完成。
@pause复制代码
把待集成的补丁文件复制到“Win7x64_hotfix\hotfix”文件夹。
在任意位置新建一个挂载wim文件用的文件夹,如“WimFile_Mount_Dir”,此文件夹内不要放其它文件/文件夹。
三、编写集成补丁批处理文件
将集成补丁的操作分几步编成批处理文件,用call命令调用,实现“依次给多个版本离线集成补丁、集成补丁列表变化时只需修改集成补丁操作批处理文件”。这些批处理文件包括:集成集成IE11必需的补丁和集成IE11批处理文件:Win7x64_hotfix\IE11\IE11.bat
批处理文件内容举例:
set ie11_hotfix_dir=%~dp0\IE11_hotfix
set ie11_install_dir=%~dp0\IE11_install
@REM 检查待集成文件是否存在
if not exist %ie11_hotfix_dir%\Windows6.1-KB2533623-*.msu goto ie11_hotfix_end
if not exist %ie11_hotfix_dir%\Windows6.1-KB2639308-*.msu goto ie11_hotfix_end
if not exist %ie11_hotfix_dir%\Windows6.1-KB2729094-*.msu goto ie11_hotfix_end
if not exist %ie11_hotfix_dir%\Windows6.1-KB2731771-*.msu goto ie11_hotfix_end
if not exist %ie11_hotfix_dir%\Windows6.1-KB2786081-*.msu goto ie11_hotfix_end
if not exist %ie11_hotfix_dir%\Windows6.1-KB2834140-*.msu goto ie11_hotfix_end
if not exist %ie11_hotfix_dir%\Windows6.1-KB2882822-*.msu goto ie11_hotfix_end
if not exist %ie11_hotfix_dir%\Windows6.1-KB2888049-*.msu goto ie11_hotfix_end
if not exist %ie11_hotfix_dir%\Windows6.1-KB2670838-*.msu goto ie11_hotfix_end
if not exist %ie11_install_dir%\IE-Win7.CAB goto ie11_hotfix_end
if not exist %ie11_install_dir%\ielangpack-zh-CN.CAB goto ie11_hotfix_end
if not exist %ie11_install_dir%\IE-Hyphenation-en.MSU goto ie11_hotfix_end
if not exist %ie11_install_dir%\IE-Spelling-en.MSU goto ie11_hotfix_end
@REM 开始集成集成IE11必需的补丁
Dism /image:%mount_dir% /Add-Package /PackagePath:%ie11_hotfix_dir%
@REM 开始集成IE11
Dism /image:%mount_dir% /Add-Package /PackagePath:%ie11_install_dir%\IE-Win7.CAB
Dism /image:%mount_dir% /Add-Package /PackagePath:%ie11_install_dir%\ielangpack-zh-CN.CAB
Dism /image:%mount_dir% /Add-Package /PackagePath:%ie11_install_dir%\IE-Hyphenation-en.MSU
Dism /image:%mount_dir% /Add-Package /PackagePath:%ie11_install_dir%\IE-Spelling-en.MSU
:ie11_hotfix_end复制代码
执行集成离线补丁的批处理文件:Win7x64_hotfix\hotfix\dism_exec.bat
如果补丁可以按任意顺序集成,可以使用集成整个文件夹内补丁的方式,集成命令格式:
Dism /image: /Add-Package /PackagePath:复制代码
批处理文件内容举例:
@REM 不想集成的补丁移动到backup文件夹
set backup_dir=backup_%random%
if not exist %backup_dir% md %backup_dir%
move windows6.1-kb2533552-*.* %backup_dir%
move windows6.1-kb2685811-*.* %backup_dir%
move windows6.1-kb2685813-*.* %backup_dir%
move windows6.1-kb3146706-*.* %backup_dir%
move windows6.1-kb3021917-*.* %backup_dir%
move windows6.1-kb3068708-*.* %backup_dir%
move windows6.1-kb3080149-*.* %backup_dir%
move windows6.1-kb2952664-*.* %backup_dir%
@REM 开始集成补丁
Dism /image:%mount_dir% /Add-Package /PackagePath:%~dp0复制代码
经测试,截至2016.12的补丁可以乱序集成,按这种方式编写的批处理文件,集成补丁变化时,不需要修改批处理文件。
如果补丁需按一定顺序集成,需逐一编写集成命令,集成命令格式:
Dism /image: /Add-Package /PackagePath:复制代码
批处理文件内容举例:
Dism /image:%mount_dir% /Add-Package /PackagePath:%~dp0%\windows6.1-kb2479943-x64_2a683f1c9acb8b3c1fb480c1ff07a275267030ec.msu
Dism /image:%mount_dir% /Add-Package /PackagePath:%~dp0%\windows6.1-kb2491683-x64_f33cff50cf92e0b8c0043f1ef3587661d600633e.msu
Dism /image:%mount_dir% /Add-Package /PackagePath:%~dp0%\windows6.1-kb2506014-x64_cc70f2accbfbae5e68f3c7aa3dba8877d1dc88a7.msu
…… ……(其它集成补丁命令)复制代码
该批处理文件内容如何生成,详见下文描述。
挂载wim文件、调用IE11.bat、调用dism_exec.bat和保存卸载wim文件的批处理文件:Win7x64_hotfix\hotfix_exec.bat
批处理文件内容举例(例子中将执行结果定向输出到“%logfile%.txt”中,旨在方便查看执行结果,执行完成后,打开“%logfile%.txt”对应的文本文件,查找“错误”关键字,如果找到,说明执行中出现错误):
批处理文件内容举例:
if not exist "%work_dir%\IE11\IE11.bat" goto hotfix_exit
if not exist "%work_dir%\hotfix\dism_exec.bat" goto hotfix_exit
@echo 准备挂载映像
@if exist temp.txt del temp.txt
Dism /Mount-Wim /WimFile:%wim_file% /Index:1 /MountDir:%mount_dir% >temp.txt
:mount_wimfile_wait
find "操作成功完成" temp.txt && goto mount_wimfile_ok
find "错误" temp.txt && goto unmount_wimfile
goto mount_wimfile_wait
:mount_wimfile_ok
@echo 开始给映像集成补丁
cd /d %work_dir%\IE11
call IE11.bat >%logfile%_ie11.txt
cd /d %work_dir%\hotfix
call dism_exec.bat >%logfile%.txt
cd /d %work_dir%
@echo 集成补丁完成。
:unmount_wimfile
@if exist temp.txt del temp.txt
Dism /UnMount-Wim /MountDir:%mount_dir% /Commit >temp.txt
:unmount_wimfile_wait
find "操作成功完成" temp.txt && goto unmount_wimfile_ok
find "错误" temp.txt && goto unmount_wimfile_err
goto unmount_wimfile_wait
:unmount_wimfile_ok
goto hotfix_exit
@REM 出错
:unmount_wimfile_err
@echo 卸载映像文件出错。
@REM 结束
:hotfix_exit复制代码
调用上述批处理文件,依次给各个版本集成补丁的批处理文件:Win7x64_hotfix\Hotfix_All.bat
批处理文件内容举例:
@cls
set work_dir=%~dp0
set wim_file_dir="%~d0\Win7x64\Wim卷导出"
set mount_dir="%~d0\WimFile_Mount_Dir"
@REM 切换到当前目录(使用管理员权限双击批处理文件执行时必需)
cd /d %work_dir%
if not exist %mount_dir% md %mount_dir%
@if exist error.txt del error.txt
@if exist time.txt del time.txt
@REM 给家庭基础版集成补丁
if exist "%wim_file_dir%\Homebasic.wim" goto Homebasic_1
echo 找不到%wim_file_dir%\Homebasic.wim>>error.txt
goto Homepremium_1
:Homebasic_1
echo %time%>>time.txt
set logfile=Homebasic
set wim_file=%wim_file_dir%\Homebasic.wim
call hotfix_exec.bat
@REM 给家庭高级版集成补丁
:Homepremium_1
if exist "%wim_file_dir%\Homepremium.wim" goto Homepremium_2
echo 找不到%wim_file_dir%\Homepremium.wim>>error.txt
goto Professional_1
:Homepremium_2
echo %time%>>time.txt
set logfile=Homepremium
set wim_file=%wim_file_dir%\Homepremium.wim
call hotfix_exec.bat
@REM 给专业版集成补丁
:Professional_1
if exist "%wim_file_dir%\Professional.wim" goto Professional_2
echo 找不到%wim_file_dir%\Professional.wim>>error.txt
goto Ultimate_1
:Professional_2
echo %time%>>time.txt
set logfile=Professional
set wim_file=%wim_file_dir%\Professional.wim
call hotfix_exec.bat
@REM 给旗舰版集成补丁
:Ultimate_1
if exist "%wim_file_dir%\Ultimate.wim" goto Ultimate_2
echo 找不到%wim_file_dir%\Ultimate.wim>>error.txt
goto hotfix_end
:Ultimate_2
echo %time%>>time.txt
set logfile=Ultimate
set wim_file=%wim_file_dir%\Ultimate.wim
call hotfix_exec.bat
echo %time%>>time.txt
:hotfix_end
@REM 集成完成后休眠
@REM rundll32.exe powrProf.dll,SetSuspendState
@pause复制代码
建立好上述批处理文件后,执行“Win7x64_hotfix\Hotfix_All.bat”,集成补丁的过程如下:
传递当前文件夹“work_dir”、待集成补丁wim文件所在文件夹“wim_file_dir”、wim文件挂载文件夹“mount_dir”和待挂载wim文件“wim_file”参数给“hotfix_exec.bat”。
“hotfix_exec.bat”根据传递参数挂载wim文件,调用集成IE11的批处理文件“Win7x64_hotfix\IE11\IE11.bat”,调用集成其它补丁的批处理文件“Win7x64_hotfix\hotfix_exec.bat”,保存并卸载wim文件。
打开执行结果输出文件“%logfile%.txt”,如Ultimate.txt,查找关键字“错误”,如果没有找到,说明所有补丁集成正常结束,如果找到“错误”关键字,看看集成哪个补丁出错,根据错误做相应的处理。
2017-1-1 05:30 上传
下载附件 (58.56 KB)
当前需安装补丁中,只有KB2533552无法集成,这个补丁只能在装好的系统上安装。
2017-1-1 05:31 上传
下载附件 (75.59 KB)
生成执行逐一集成离线补丁的批处理文件“Win7x64_hotfix\hotfix\dism_exec.bat”的方法:
在“Win7x64_hotfix\hotfix”文件夹下执行
dir /b *.msu >dism_exec.bat复制代码上述命令把当前文件夹下所有“.msu”文件列表写入“dism_exec.bat”。
此处假设使用的都是msu文件格式补丁包,如果使用的都是cab文件格式的补丁包,上述命令改为:
dir /b *.cab >dism_exec.bat复制代码如果两种文件格式的补丁包都有,则执行
dir /b *.msu >dism_exec.bat
dir /b *.cab >>dism_exec.bat复制代码注意,第二个重定向符必须是“>>”,否则第一个命令执行的结果会被第二个命令覆盖。
用文件编辑器打开“dism_exec.bat”,其内容大致是这样:
2017-1-1 05:32 上传
下载附件 (25.41 KB)
通过批量替换,在每一行前面增加dism集成补丁命令。查找“windows6.1-”,替换为“Dism /image:%mount_dir% /Add-Package /PackagePath:%~dp0%\windows6.1-”。
2017-1-1 05:33 上传
下载附件 (83.18 KB)
替换完成后的文件大致是这样:
2017-1-1 05:33 上传
下载附件 (27.8 KB)
在不能集成、不想集成的补丁的集成命令前面加上“@REM ”将该行命令注释掉,这些补丁包括:
不可集成的补丁:KB2533552
据说容易引起蓝屏的补丁:KB2685811、KB2685813、KB2670838(集成IE11必需)、KB3146706
遥测(搜集用户信息)补丁:KB2952664、KB3021917、KB3068708、KB3080149
2017-1-1 05:33 上传
下载附件 (22.96 KB)
四、制作安装文件
集成补丁是个漫长的过程,在我这台机子上为一个版本集成截至2016年12月的补丁耗时一个小时左右,依次为四个版本集成补丁,总共耗时四个小时左右。补丁集成完成后,把四个版本分卷合并成保护四个版本的install.wim。如果在Windows 8以上系统上操作,可以用dism完成合并。
合并批处理文件举例:
@cls
@set work_dir=%~dp0
set wim_file_Homebasic=%work_dir%Wim卷导出\Homebasic.wim
set wim_file_Homepremium=%work_dir%Wim卷导出\Homepremium.wim
set wim_file_Professional=%work_dir%Wim卷导出\Professional.wim
set wim_file_Ultimate=%work_dir%Wim卷导出\Ultimate.wim
set wim_file_install=%work_dir%Wim卷合并\install.wim
dism /Export-Image /SourceImageFile:%wim_file_Homebasic% /SourceIndex:1 /DestinationImageFile:%wim_file_install%
dism /Export-Image /SourceImageFile:%wim_file_Homepremium% /SourceIndex:1 /DestinationImageFile:%wim_file_install%
dism /Export-Image /SourceImageFile:%wim_file_Professional% /SourceIndex:1 /DestinationImageFile:%wim_file_install%
dism /Export-Image /SourceImageFile:%wim_file_Ultimate% /SourceIndex:1 /DestinationImageFile:%wim_file_install%
@pause复制代码
如果在Windows 7上操作,可以用imagex完成合并。
合并批处理文件举例:
@cls
set work_dir=%~dp0
set wim_file_Homebasic=%work_dir%Wim卷导出\Homebasic.wim
set wim_file_Homepremium=%work_dir%Wim卷导出\Homepremium.wim
set wim_file_Professional=%work_dir%Wim卷导出\Professional.wim
set wim_file_Ultimate=%work_dir%Wim卷导出\Ultimate.wim
set wim_file_install=%work_dir%Wim卷合并\install.wim
imagex /export %wim_file_Homebasic% 1 %wim_file_install% "Windows 7 Homebasic"
imagex /export %wim_file_Homepremium% 1 %wim_file_install% "Windows 7 Homepremium"
imagex /export %wim_file_Professional% 1 %wim_file_install% "Windows 7 Professional"
imagex /export %wim_file_Ultimate% 1 %wim_file_install% "Windows 7 Ultimate"
@pause复制代码
合并完成后,用UltraISO、PowerISO等软件打开原ISO文件(本文举例使用“cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso”),用得到的install.wim替换原ISO里的“sources\install.wim”,保存成新ISO文件。
如果想使生成的ISO文件刻盘后可以在EFI BIOS上启动安装,还需替换光盘启动文件、增加EFI BIOS启动文件。
操作方法:
用UltraISO打开Windows 8以上系统ISO文件,保存启动文件。
2017-1-1 05:37 上传
下载附件 (52.17 KB)
提取ISO中“efi\boot”文件夹。
2017-1-1 05:37 上传
下载附件 (48.04 KB)
打开集成补丁后的ISO文件,把保存的引导文件添加进来。
2017-1-1 05:38 上传
下载附件 (54.41 KB)
把提取出来的“boot”文件夹添加到ISO文件“efi”文件夹中,保存ISO文件。
2017-1-1 05:38 上传
下载附件 (44.16 KB)
五、离线安装其它补丁
按上述方法集成补丁,用新安装文件安装系统后,仍扫描到一些补丁,这些补丁主要有几种:
必须在系统安装的补丁,如KB2533552;
不想集成的补丁;
新版.NET Framework及其补丁;
必须联网安装的补丁,如KB976932。
前三种都可以手动下载补丁,手动安装。
如果下载的是“msu”文件格式的补丁,用wusa命令安装,命令格式:
wusa [可选参数]复制代码命令举例:
wusa windows6.1-kb982018-v3-x64_7853a1c9c63611e17cd2c923704bf2e924bdfe7b.msu /quiet /norestart复制代码
如果下载的是“cab”文件格式的补丁,用dism命令安装,命令格式:
Dism /online /add-package /PackagePath:复制代码
命令举例:
Dism /online /add-package /PackagePath:%~dp0\windows6.1-kb2533552-x64_8cf0b38e43622766333ce70426241dc7fa996b4d.cab复制代码 可以参考“生成执行集成离线补丁的批处理文件“Win7x64_hotfix\hotfix\dism_exec.bat”的方法”一节的方法,把安装补丁的命令编成批处理文件。
以生成安装“msu”文件格式补丁包为例,生成安装补丁批处理文件的方法大致为:在补丁保存文件夹内执行
dir /b *.msu >other_hotfix.bat复制代码
打开“other_hotfix.bat”,批量替换“windows6.1-”为“wusa windows6.1-”,批量替换“.msu”为“.msu /quiet /norestart”。
在不想安装的补丁安装命令前面添加“@REM ”。
如果补丁安装有先后顺序要求,把需要先安装的补丁的安装命令行上移。
执行安装批处理文件(此处举例的other_hotfix.bat),安装完后重新启动系统。
重启后安装最新版.NET Framework及其补丁,当前最新版.NET Framework是4.6.2,该版本支持静默安装,安装命令为:
NDP462-KB3151800-x86-x64-AllOS-ENU.exe /q /norestart /lcid 2052复制代码
安装.NET Framework 4.6.2后,需安装ndp46-kb3205379,该补丁持静默安装,安装命令为:
ndp46-kb3205379-x64_ce1761769ac6d746e81392374e62ffc7125dabb6.exe /q /norestart /lcid 2052复制代码
可以将这两个安装命令做成批处理文件,内容为:
@cls
cd /d "%~dp0"
start /wait NDP462-KB3151800-x86-x64-AllOS-ENU.exe /q /norestart /lcid 2052
start /wait ndp46-kb3205379-x64_ce1761769ac6d746e81392374e62ffc7125dabb6.exe /q /norestart /lcid 2052
@pause复制代码
文中提及批处理文件下载:
链接: http://pan.baidu/s/1mi2lPGG 密码: 4yfn
相对路径“Windows 7 SP1\64位\集成截至2016.12.17补丁\集成补丁批处理文件”复制代码包含2个文件,一个只有只有批处理文件,另一个是补丁+批处理文件。下载其中一个,解压到任一分区根目录下面,按上文所述解压未集成最新补丁的系统ISO文件到响应目录,执行“Win7x64_hotfix\Hotfix_All.bat”即可完成补丁集成。如果想集成完成后休眠,该批处理文件末尾这句的注释“@REM ”删掉,即
@REM rundll32.exe powrProf.dll,SetSuspendState复制代码改为
rundll32.exe powrProf.dll,SetSuspendState复制代码
本帖所有资源下载链接:(见楼下)
本帖所有以后的所有更新放下面的2~4楼,防止编辑1楼内容后审核期间帖子不可见。
更多推荐
微软服务器离线补丁工具包,自己动手离线集成Windows 7 SP1最新补丁
发布评论