某网友遇到的一个问题,更新过程中作死关机了,之后每次开机都显示正在配置更新已完成7%请勿关闭计算机,等上1个多小时都不会变化。


有PE但进不去,否则PE里用dism++删除离线系统挂起的补丁可以轻松解决。

没有别的电脑和U盘,不过好在能进恢复环境命令提示符,之后用命令提示符应该能解决。恢复环境的账户密码默认是本地账户密码,如果不记得默认留空。


进恢复环境命令提示符后,首先执行dir c:\windows,确认系统盘盘符。

执行后有结果的话系统盘就是C盘,否则把命令里的C改成D E F继续测试。

确定系统盘是C盘后,可以执行命令撤销挂起补丁:
dism /image:c:\ /cleanup-image /revertpendingactions

错误87,从映像中还原挂起的操作时出错,看提示怀疑是暂存目录空间不足。于是执行命令:
mkdir c:\temp 再方向键切出之前命令修改,执行:
dism /image:c:\ /cleanup-image /revertpendingactions /scratchdir:c:\temp 虽然没有报目录大小不足,但还是错误87。

那只能尝试用dism命令卸载挂起补丁了。先执行:
cd /d c:\windows\system32 因为恢复环境里没有findstr命令,离线系统里有。之后再执行:
dism /image:c:\ /get-packages /format:table|findstr /c:"挂起"


于是先执行:
dism /image:c:\ /get-packages /format:table 从结果中拖选复制“挂起”用于粘贴。

结果出来了但因为命令窗口太大拍照看不全,所以将结果输出到c:\1.txt,再用notepad c:\1.txt打开查看可以换行:


结果是一堆安装挂起和卸载挂起的补丁。这要一个个用命令删不知道要删到什么时候。累积性补丁安装重启后配置补丁过程关机就会这样。如果有PE的话,dism++勾选删除很快完成,可惜没有。

虚拟机里模拟安装累积性补丁,在重启配置更新时故意关机进恢复环境,测试后找到批量删除方法。

执行下面命令,看是不是能只显示挂起的补丁包名,是的话就可以直接批量删除了,否则要用delims tokens参数筛选结果:
for /f %i in ('dism /image:c:\ /get-packages /format:table^|findstr /c:"挂起"') do echo %i

刚好显示的都是包名,则修改下命令批量删除,执行命令前我已经虚拟机测试过方法可行了。以下命令只有一行。
for /f %i in ('dism /image:c:\ /get-packages /format:table^|findstr /c:"挂起"') do dism /image:c:\ /remove-package /packagename:"%i" /scratchdir:c:\temp

命令可能要执行十来分钟,执行过程有下图错误的可以不用理会,执行完重启进正常系统就行了。

重启后,可能会蓝色界面自动重启一两次。

之后正在准备Windows等一会就能进桌面了。

完事进入桌面后备份下用户文件夹里的重要文件,用系统镜像升级安装修复下,避免组件存储损坏导致后续离奇的系统故障。

所以说有条件的话准备个U盘PE,系统出问题时修复起来也方便。如果可以最好是能联网的PE,如FirPE、优启通等。