Windows 的内置部署映像服务和管理 (DISM) 命令,又名 dism.exe,在处理 Windows 操作系统映像时有点像瑞士军刀。 在其众多功能中(例如添加可选的 Windows 功能和程序包、获取图像清单、执行图像清理等),DISM 包括一个 /Add-Package 选项。 此选项允许用户将 .cab 或 .msu 文件中的 Microsoft 目录更新安装到目标 Windows 映像。
.cab 是“Windows Cabinet”的缩写,这是一种压缩文件,用于存储 Windows 的数据和指令,可以更新设备驱动程序、系统文件等。 .msu 文件扩展名与 Microsoft 更新独立安装程序相关联。 通常,此安装程序使用 Windows Update Agent API 来安装更新包。 .cab 和 .msu 文件也可以使用 DISM 命令对 Windows 映像文件进行操作,这些文件可能是 .wim、.esd、.ffu 类型或 .vhd 或 .vhdx 类型的虚拟硬盘文件。
请注意,.msu 更新仅适用于离线图像,而更常见的 .cab 文件可应用于在线图像以更新正在运行的 Windows 安装。
[ 买家指南:如何选择合适的商务笔记本电脑 ]
为什么使用 DISM 而不是 Windows 更新?
好问题! 有时,DISM 提供了一种在 Windows 更新 (WU) 可能出现问题时安装更新的方法。 有时,Windows 更新可能只是拒绝工作,或者它可能会在特定更新时挂起或崩溃。 当 WU 本身可能无法执行时,DISM 提供了一种安装更新的简便方法。
使用 DISM 而不是 Windows 映像的其他原因包括:
使用 Microsoft Intune、Windows Autopilot 或 Systems Center Configuration Manager (SCCM) 管理用于大规模和/或远程部署的 Windows 映像。
将驱动程序或更新集成到标准 Windows 映像中以进行定制和特殊部署。
作为来自内部更新服务器的用户驱动更新的替代方案,可能在计划维护期间。 假期周末在大型组织中很流行这种事情,因为它们提供了额外的一天来解决意外问题,或者在无法解决此类问题时回滚到以前的状态。
从哪里获取 Windows 更新文件
Microsoft 更新目录是所有类型更新文件的最常见来源,包括 .cab 和 .msu。 通常,项目通过名称(例如 Realtek 音频驱动程序)或知识库 (KB) 文章编号访问。 因此,例如,KB4023057 是适用于 Windows 10 版本 1507 到 1803 的更新,旨在清理和修复可能阻止安装更新的 Windows 更新的任何问题。
图 1 显示了更新目录,其中包含一页 KB4023057 的结果的一部分。 单击右侧列中与目标操作系统匹配的文件版本的下载按钮以获取更新。
如果您单击图 1 中显示的最上面的 1803 项目的下载按钮,将出现一个下载窗口。 这提供了指向具有极长名称的相应 .cab 文件的链接:windows10.0-kb4023057-x64_58b2f8fd3da37d22fb99bd6aa6c3f69951e67429.cab
请注意,该名称包括 Windows 版本 (10.0)、KB 编号、位数(x64 表示 64 位)和全局唯一标识符 (GUID),并以压缩文件 (.cab) 扩展名结尾。 这使得该项目成为通过 DISM 命令进行更新的绝佳目标。
图 2 显示了这个所选项目的下载页面:
DISM /Add-Package 语法
DISM 命令在 Microsoft Docs 的 DISM 操作系统包…服务命令行选项页面中有完整的在线记录。 这只是 DISM 工具参考的一小部分,DISM 工具参考是另一个在线文档,值得为那些使用(和使用)Windows 图像的人添加书签和探索。
该手册列出了 /Add-Package 选项的抽象语法,如下所示:
Dism /Add-Package /PackagePath:<path_to_cabfile> [/IgnoreCheck] [/PreventPending]
/PackagePath 可以指向单个 .cab 或 .msu 文件、包含单个扩展 .cab 文件或单个 .msu 文件的文件夹,或者包含多个 .cab 或 .msu 文件的文件夹(您不能混合 但是,这两种类型)。 如果 /PackagePath 指向一个文件夹,该文件夹在其根目录下包含一个或多个 .cab 或 .msu 文件,则同样会递归检查任何子文件夹中是否存在此类文件。
/PreventPending 开关指示 DISM 在包或目标 Windows 映像有任何未完成的操作仍在等待时跳过安装包。 这是为了防止对可能不完整或完整的图像进行操作。
如前所述,您可以通过在用作 /PackagePath 选项输入的目录中包含多个 .cab 或 .msu 文件,在单个 DISM 命令中添加多个程序包。 通常,DISM 会检查每个包以确保它适用于目标映像。 如果包不适用于该映像,DISM 将发出一条错误消息。 /IgnoreCheck 开关可用于让 DISM 静默运行并跳过对每个程序包的适用性检查。
DISM /添加包示例
假设我正在运行 Windows 10 版本 1803 的 32 位实例。如果我想将 KB4023057 应用于该正在运行的图像,并且 .cab 文件已下载到路径 D:\Images,图 3 显示了该命令的内容 看起来像在命令提示符或 PowerShell 中。 但首先,为了清晰、理解和简洁,有一些重要的注意事项:
DISM 仅适用于管理权限,因此您必须登录到管理帐户并为您的命令行环境选择“以管理员身份运行”。
/Online 开关告诉 DISM 将程序包应用到当前运行的 Windows 映像。
我将 .cab 文件重命名为 KB4023057,这样我就可以将所有内容放入一行文本中。
图 3 显示了管理命令提示符窗口中的示例命令。
要以此格式运行命令,您必须确保没有待处理的 WU 事务。 确保这是真的最安全的方法是在运行任何 DISM /Add-Package 命令之前重新启动系统。
处理离线图像是一项专业练习。 在这里,我简单地说,离线图像代表可能“正在建设中”的图像,或者在图像库中维护的图像,用于部署和/或定制,以便以某种规模分发给用户——维护图像通常是不值得的 涉及的额外工作,除非您至少有几十个用户,如果不是数百个或更多,这些图像将提供给他们。 有关将 DISM /Add-Package 与脱机图像一起使用的更多信息,请参阅此 Microsoft 文档项目“使用 DISM 脱机添加或删除包”。
DISM /Add-Package 值得的常见情况
根据我自己的经验,我使用过 DISM /Add-Package 数十次甚至数百次。 在几乎所有此类情况下,这种使用都是由以下两种情况之一引起的:
Windows 更新无法正常工作,我无法下载或安装任何更新。
当我尝试使用 WU 安装某些特定更新时,它会挂起或崩溃。
在这两种情况下,下载 .cab 文件并使用 DISM /Add-Package 将在正在运行的 Windows 映像上成功安装更新。
如果它不起作用,这通常表示 Windows 存在更深层次的问题。 在极少数情况下,接下来我转向就地升级安装(请参阅我的 CW 故事“如何使用就地升级安装修复 Windows 10”)。 如果这不能缓解问题,那么我的同伴故事“如何通过 4 个步骤修复 Windows 10(和 11)”应该可以解决问题。