尝试从故障排除或SafeMode控制台访问cmd ,然后运行以下命令:
dism.exe /image:C:\ /cleanup-image /revertpendingactions
场景:
我的一台Windows Server 2012 R2 Standard服务器同时安装了大量的更新程序+200(所以很遗憾,我不知道哪个引起了这个问题)。
问题:
重新启动后,服务器卡在启动启动屏幕上,显示“正在更新系统8%”。 我尝试了以下
- 等待几个小时
- 重新启动
- 以安全模式重新启动(服务器启动时立即按F8访问此启动选项)
- 使用“最近一次的正确configuration”重新启动(服务器启动时立即按F8访问此启动选项)
以上都没有奏效。
解决scheme:
- 重新启动服务器,按F8访问高级启动选项
- select选项“修复您的计算机”
- 在“选项”屏幕中,select“ 疑难解答”>“命令提示符”
- 服务器启动到X驱动器的有限命令提示符。
- 获取所有可用驱动器的列表,input“ wmic logicaldisk get name ”。 这是非常重要的,因为在修复环境中,驱动器映射经常发生变化,即当我改变到C驱动器时发现它是空的。 实际上,系统驱动器已映射到E驱动器。 没有明显的方法可以告诉,只需要更改每个驱动器映射运行一个Dir命令。 (要知道,您可以cd到上面列出的每个驱动器,并检查是否有Windows相关的目录。)
- 导航到\ Windows \ Winsxs文件夹。 一旦在这里,您需要find所有名为pending.xml *的文件,并通过将.OLD添加到文件名的末尾来重命名它们。 (在我的服务器,我有两个pending.xml和pending.xml.random_number – 我添加.OLD到这两个的结尾)。 原因是在这其中之一有一个腐败是问题的原因。 ren pending.xml pending.xml.old
- 如果你有很多带有名字和一系列数字的文件,你可以在命令行中使用以下命令: for / r%i in(pending.xml *)do move%i%i.old
- 在\ Windows \ Winsxs文件夹中创build一个新的空白pending.xml文件; echo> pending.xml
- 接下来是运行一个DISM命令从图像中删除/恢复所有挂起的操作,在我们的情况下,这些更新尝试安装。 但是,在此之前,您必须创build临时文件的临时文件夹来存储。如果您没有完成此步骤,您将得到一个3017错误 ,它指出临时文件夹的默认临时位置太小。 在\ Windows目录中创build临时文件夹; mkdir \ windows \ scratch
- 运行以下命令(注意我的系统驱动器已映射到E驱动器); DISM / Image:E:\ / Cleanup-Image / RevertPendingActions / scratchdir:E:\ Windows \ Scratch
- 完成后,将\ windows \ SoftwareDistribution重命名为SoftwareDistributionOLD; 任E:\ windows \ SoftwareDistribution SoftwareDistributionOLD
- 最后,运行sfc / scannow – 系统文件检查工具来修复丢失或损坏的系统文件
- 重新启动服务器。 启动启动屏幕应显示一两分钟的旋转点,然后正常启动。 在我的例子中,它然后报告更新无法安装,因此恢复已安装的。 然后再强制重新启动。
- 在这个阶段,服务器已经准备好安装更新,但是这次只能做几个来定位错误的更新。
它也适用于我。 我的服务器在7%重启后挂起。 F8命令提示符,然后wmic logicaldisk获取名称,然后dism.exe / image:D:\ / cleanup-image / revertpendingactions在我的情况下,有问题的图像是“D:”。
F8命令提示符
接着
wmic logicaldisk get name
接着
dism.exe /image:C:\ /cleanup-image /revertpendingactions
为我工作。 在我的情况下,有问题的图像是“ D: ”。