本帖最后由 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,然后查找更新。
请勿使用多线程下载工具下载论坛附件!
请勿使用多线程下载工具下载论坛附件!
请勿使用多线程下载工具下载论坛附件!
用文本捕捉软件,如TextCatch、HyperSnap 6.xx版,捕捉补丁列表上的文字。
请勿使用多线程下载工具下载论坛附件!
根据KB编号,用IE在http://www.catalog.update.microsoft.com/Search.aspx上搜索、下载补丁。
请勿使用多线程下载工具下载论坛附件!
请勿使用多线程下载工具下载论坛附件!
二、准备集成所需文件 在任一分区根目录下建立工作文件夹。
请勿使用多线程下载工具下载论坛附件!
把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:<install.wim文件完整路径> /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 <install.wim文件完整路径> <版本分卷索引号> <导出分卷保存完整路径>
复制代码 将导出分卷的命令编成批处理文件,方便以后使用。
批处理文件举例: - @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:<wim文件挂载文件夹> /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:<wim文件挂载文件夹> /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,查找关键字“错误”,如果没有找到,说明所有补丁集成正常结束,如果找到“错误”关键字,看看集成哪个补丁出错,根据错误做相应的处理。
请勿使用多线程下载工具下载论坛附件!
当前需安装补丁中,只有KB2533552无法集成,这个补丁只能在装好的系统上安装。
请勿使用多线程下载工具下载论坛附件!
生成执行逐一集成离线补丁的批处理文件“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”,其内容大致是这样:
请勿使用多线程下载工具下载论坛附件!
通过批量替换,在每一行前面增加dism集成补丁命令。查找“windows6.1-”,替换为“Dism /image:%mount_dir% /Add-Package /PackagePath:%~dp0%\windows6.1-”。
请勿使用多线程下载工具下载论坛附件!
替换完成后的文件大致是这样:
请勿使用多线程下载工具下载论坛附件!
在不能集成、不想集成的补丁的集成命令前面加上“@REM ”将该行命令注释掉,这些补丁包括:
不可集成的补丁:KB2533552
据说容易引起蓝屏的补丁:KB2685811、KB2685813、KB2670838(集成IE11必需)、KB3146706
遥测(搜集用户信息)补丁:KB2952664、KB3021917、KB3068708、KB3080149
请勿使用多线程下载工具下载论坛附件!
四、制作安装文件 集成补丁是个漫长的过程,在我这台机子上为一个版本集成截至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文件,保存启动文件。
请勿使用多线程下载工具下载论坛附件!
提取ISO中“efi\boot”文件夹。
请勿使用多线程下载工具下载论坛附件!
打开集成补丁后的ISO文件,把保存的引导文件添加进来。
请勿使用多线程下载工具下载论坛附件!
把提取出来的“boot”文件夹添加到ISO文件“efi”文件夹中,保存ISO文件。
请勿使用多线程下载工具下载论坛附件!
五、离线安装其它补丁 按上述方法集成补丁,用新安装文件安装系统后,仍扫描到一些补丁,这些补丁主要有几种:
必须在系统安装的补丁,如KB2533552;
不想集成的补丁;
新版.NET Framework及其补丁;
必须联网安装的补丁,如KB976932。
前三种都可以手动下载补丁,手动安装。
如果下载的是“msu”文件格式的补丁,用wusa命令安装,命令格式:
命令举例:
- wusa windows6.1-kb982018-v3-x64_7853a1c9c63611e17cd2c923704bf2e924bdfe7b.msu /quiet /norestart
复制代码
如果下载的是“cab”文件格式的补丁,用dism命令安装,命令格式:
- Dism /online /add-package /PackagePath:<cab补丁>
复制代码
命令举例:
- Dism /online /add-package /PackagePath:%~dp0\windows6.1-kb2533552-x64_8cf0b38e43622766333ce70426241dc7fa996b4d.cab
复制代码 可以参考“生成执行集成离线补丁的批处理文件“Win7x64_hotfix\hotfix\dism_exec.bat”的方法”一节的方法,把安装补丁的命令编成批处理文件。
以生成安装“msu”文件格式补丁包为例,生成安装补丁批处理文件的方法大致为: 执行安装批处理文件(此处举例的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.com/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楼内容后审核期间帖子不可见。
|