DISM /Add-Package 底层完整原理(对比 wusa 核心差异);DISM /Add-Package 支持哪些类型离线包;离线 WIM 镜像专属特殊 / 另类补丁注入方案汇总;将软件集成到 Windows 映像中并进行静默安装,可以使用 DISM 和适当的安装程序命令。下面是具体的步骤和示例命令。

PS C:\WINDOWS\system32> dism /?

部署映像服务和管理工具
版本: 10.0.26100.5074


DISM.exe [dism_options] {Imaging_command} [<Imaging_arguments>]
DISM.exe {/Image:<path_to_offline_image> | /Online} [dism_options] {servicing_command} [<servicing_arguments>]

描述:

  DISM 枚举、安装、卸载、配置和更新 Windows 映像中的功能和程序包。可以使用的命令取决于提供的映像以及映像是处于脱机还是运行状态。


FFU 命令:

  /Capture-Ffu            - 将物理磁盘映像捕获到新的 FFU 文件中。
  /Apply-Ffu              - 应用 .ffu 映像。
  /Split-Ffu              - 将现有 .ffu 文件拆分成多个只读已拆分 FFU 文件。
  /Optimize-Ffu           - 优化 FFU 文件,使其其可应用于不同大小的存储
。

WIM 命令:

  /Apply-CustomDataImage  - 冻结自定义数据映像中包含的文件。
  /Capture-CustomImage    - 将自定义设置捕获到 WIMBoot 系统上的增量 WIM 文件中。捕获的目录包括所有子文件夹和数据。
  /Get-WIMBootEntry       - 显示指定磁盘卷的WIMBoot 配置项。
  /Update-WIMBootEntry    - 更新指定磁盘卷的 WIMBoot 配置项。
  /List-Image             - 显示指定映像中的文件和文件夹的列表。
  /Delete-Image           - 从具有多个卷映像的 WIM 文件删除指定的卷映像。
  /Export-Image           - 将指定映像的副本导出到其他文件。
  /Append-Image           - 将其他映像添加到 WIM 文件中。
  /Capture-Image          - 将驱动器的映像捕获到新的 WIM 文件中。捕获的目录包含所有子文件夹和数据。
  /Get-MountedWimInfo     - 显示有关安装的 WIM 映像的信息。
  /Get-WimInfo            - 显示有关 WIM 文件中的映像的信息。
  /Commit-Wim             - 保存对安装的 WIM 映像的更改。
  /Unmount-Wim            - 卸载安装的 WIM 映像。
  /Mount-Wim              - 从 WIM 文件安装映像。
  /Remount-Wim            - 恢复孤立的 WIM 安装目录。
  /Cleanup-Wim            - 删除与损坏的已安装 WIM映像关联的资源。

通用映像处理命令:

  /Split-Image            - 将现有 .wim 文件拆分为多个只读拆分 WIM (SWM) 文件。
  /Apply-Image            - 应用一个映像。
  /Get-MountedImageInfo   - 显示有关安装的 WIM 和 VHD 映像的信息。
  /Get-ImageInfo          - 显示有关 WIM、VHD 或 FFU 文件中映像的信息。
  /Commit-Image           - 保存对装载的 WIM 或 VHD 映像的更改。
  /Unmount-Image          - 卸载已装载的 WIM 或 VHD 映像。
  /Mount-Image            - 从 WIM 或 VHD 文件装载映像。
  /Remount-Image          - 恢复孤立的映像装载目录。
  /Cleanup-Mountpoints    - 删除与损坏的已安装映像关联的资源。

映像规格:

  /Online                 - 以正在运行的操作系统为目标。
  /Image                  - 指定脱机 Windows 映像的根目录的路径。

DISM 选项:

  /English                - 用英文显示命令行输出。
  /Format                 - 指定报告输出格式。
  /WinDir                 - 指定 Windows 目录的路径。
  /SysDriveDir            - 指定名为 BootMgr 的系统加载程序文件的路径。
  /LogPath                - 指定日志文件路径。
  /LogLevel               - 指定日志(1-4)中所示的输出级别。
  /NoRestart              - 取消自动重新启动和重新启动提示。
  /Quiet                  - 取消除错误消息之外的所有输出。
  /ScratchDir             - 指定暂存目录的路径。

若要获得有关这些 DISM 选项及其参数的详细信息,请在紧挨着 /? 之前指定一个选项。

  示例:
    DISM.exe /Mount-Wim /?
    DISM.exe /ScratchDir /?
    DISM.exe /Image:C:\test\offline /?
    DISM.exe /Online /?

DISM /Add-Package 底层完整原理(对比 wusa 核心差异)

一、整体架构定位

DISM(Deployment Image Servicing and Management)是直接对接 CBS 组件栈的底层运维工具,完全绕过 WUA(Windows Update Agent)中间层;
  • wusa:用户层工具,依赖 wuapi.dll COM 接口中转指令;
  • DISM:镜像 / 在线系统底层服务工具,直接调用 cbsapi.dll 原生组件 API,无 WUA 会话开销。
执行链路分层:
plaintext
CMD/PowerShell → dism.exe → CBS API(cbsapi.dll) → CBS引擎(cbs.dll) → TrustedInstaller(TiSvc) → WinSxS/系统文件

二、两大工作模式底层分支:在线系统 / 离线 WIM 镜像

模式 1:在线系统(/Online,当前运行 Windows)

命令示例:
cmd
DISM /Online /Add-Package /PackagePath:D:\patch\kbxxxx.cab
  1. 权限校验
     
    必须管理员提权,直接请求 CBS 事务句柄,不需要启动wuauserv(Windows Update 服务可禁用,DISM 照常运行)。
  2. 包预处理
     
    直接读取.cab原始组件包,解析内部*.mum组件清单、*.cat签名,不支持 MSU 封装包(MSU 是 WUA 专属格式,内含 WUA 元数据,DISM 无法解析 update.xml)。
  3. 直接创建 CBS 事务
     
    调用cbsapi.dll::CreateSession开启组件安装事务,跳过 WUA 的更新会话缓存、SoftwareDistribution 数据库校验。
  4. TrustedInstaller 执行写入
     
    和 wusa 共享同一底层执行引擎 TiSvc,依托 KTM 内核事务管理器实现原子更新,失败自动回滚 WinSxS 组件。
  5. 收尾
     
    直接写入%windir%\Logs\CBS\CBS.log,无独立自定义日志参数;不提供 wusa 专属的精细化重启弹窗 / 倒计时控制,仅返回状态码由脚本自行处理重启逻辑。

模式 2:离线 WIM 镜像(/Image:WIM 挂载路径,wusa 完全不支持)

命令示例:
cmd
DISM /Image:D:\mount_win11 /Add-Package /PackagePath:D:\patch\kbxxxx.cab
这是 DISM 独有的底层能力,wusa 无任何对应功能:
  1. 离线挂载 WIM 只读镜像到本地临时目录;
  2. 完全不启动 TrustedInstaller 服务,直接调用离线 CBS 库解析镜像内 WinSxS 仓库;
  3. 在挂载目录内完成组件注入、版本替换、注册表离线写入;
  4. 卸载镜像后保存修改,打包生成带预集成补丁的成品系统镜像。
     
    底层关键区别:离线模式无运行中系统、无 TiSvc 服务、无内核事务,仅做静态文件与组件清单修改。

三、DISM /Add-Package 与 wusa.exe 底层链路对比

环节 DISM /Add-Package wusa.exe
上层入口 dism.exe,调用 cbsapi.dll 原生 API wusa.exe,调用 wuapi.dll COM 中间层
是否依赖 WUA ❌ 完全绕过,wuauserv 可停止 ✅ 强依赖 wuauserv、wuapi.dll
支持包格式 原生 CAB 组件包,不识别 MSU 仅 MSU,不能直接读取 CAB
离线 WIM 镜像操作 ✅ 原生核心功能 ❌ 不支持,只能操作开机运行系统
KB 号直接卸载 ❌ 无/kb参数,必须指定 CAB / 包名 ✅ 支持wusa /uninstall /kb:xxxx
重启控制能力 仅返回错误码,无弹窗 / 倒计时参数 ✅ 内置/warnrestart/promptrestart等全套策略
元数据来源 仅读取 CAB 内mum组件清单 读取 MSU 内update.xml(WUA 专用元数据)
离线镜像执行环境 无需操作系统运行,可在 PE 下操作 必须进入完整 Windows 系统运行
缓存数据库 不读写SoftwareDistribution 读取 WUA 补丁缓存数据库校验安装记录

四、关键底层技术细节

1. 无 WUA 层带来的特性

  1. 不受 WUA 单会话锁限制:可并行执行 DISM 镜像注入任务;在线系统仍受 CBS 单事务锁约束(同一时间只能 1 个组件操作);
  2. 不受 Windows Update 服务故障影响:wuauserv 损坏、SoftwareDistribution 缓存崩溃时,DISM 仍可修复系统补丁;
  3. 无法读取 WUA 专属补丁信息:不能识别 MSU 内的补丁分类、KB 友好名称,仅识别底层组件包 ID。

2. 包解析逻辑差异

  • MSU(wusa 专属)= CAB 组件包 + WUA 元数据 (update.xml/properties.txt) + 封装头;
  • DISM 仅识别纯 CAB 组件包,无解析 MSU 封装结构的代码;
     
    若要 DISM 安装 MSU 内补丁,必须先用 wusa 解压 MSU,提取内部 CAB 文件。

3. 组件事务共享底层引擎

在线系统场景下,DISM 和 wusa 最终都会下发事务到 CBS + TrustedInstaller,共用:
  • WinSxS 组件仓库;
  • WRP Windows 资源保护机制;
  • KTM 内核事务回滚;
  • CBS.log 统一底层日志输出。
     
    二者区别仅在于上层调用链路,底层文件替换逻辑完全一致。

4. PE 环境专属底层优势

Windows 预安装环境(PE)无 WUA 服务、无完整 wusa 运行依赖,只能使用 DISM:
 
PE 下通过 DISM 挂载 WIM、注入补丁、驱动、语言包,是系统部署流水线核心工具;wusa 在 PE 中无法启动。

五、典型底层适用边界

  1. 选 DISM /Add-Package
    • 离线封装 WIM 系统镜像,预集成批量补丁;
    • PE 环境离线部署、修复系统;
    • Windows Update 服务损坏,无法使用 wusa/wuauclt 在线更新;
    • 批量注入驱动、语言包、功能组件(非单纯安全更新);
    • 仅持有原始 CAB 补丁包,无 MSU 封装文件。
  2. 选 wusa.exe
    • 内网离线 MSU 补丁静默安装,需要人性化重启弹窗;
    • 需要按 KB 编号一键卸载故障更新;
    • 脚本需要简易的日志、倒计时重启控制;
    • 仅拥有微软官网下载的标准 MSU 离线包。

六、完整执行数据流(DISM 在线模式)

plaintext
管理员终端 → dism.exe
        ↓ 直接调用 cbsapi.dll(无wuapi.dll参与)
CBS 会话管理器 cbs.dll
        ↓ 发起组件安装事务请求
TrustedInstaller(TiSvc) 高权限服务
        ↓ KTM内核事务 + WRP文件保护校验
WinSxS组件仓库 / System32 / 注册表写入
日志统一输出至:%windir%\Logs\CBS\CBS.log

一、DISM /Add-Package 支持哪些类型离线包

1. 核心支持包格式(.cab 组件包)

(1)Windows 更新组件 CAB 包(安全 / 累积补丁)

微软官网 MSU 内部解压出来的原生更新 CAB,内含*.mum组件清单、*.cat数字签名,是 DISM 最常用输入。
  • 示例:windows11.0-kb5039299-x64.cab
  • 限制:不直接支持 MSU 文件,MSU 封装了 WUA 专属元数据,DISM 无法解析,需先用 wusa 解压提取内部 CAB。

(2)SSU(服务堆栈更新)、LCU 累积更新 CAB

系统前置堆栈补丁、月度累积更新底层 CAB 包,在线 / 离线镜像均可注入。

2. 功能类离线包

  1. 语言包(LP.cab)
     
    系统界面语言、语音识别语言包,用于预装多语言镜像;
  2. 按需功能包(FOD.cab)
     
    例如.NET Framework、记事本、画图、RSAT 域管理工具等可选 Windows 功能;
  3. 驱动程序 CAB 包
     
    硬件厂商封装的驱动离线 CAB,可批量注入 WIM 镜像。

3. 特殊配套包

  • 修复类组件包:SFC 底层依赖的基础组件 CAB,用于修复损坏 WinSxS 仓库;
  • 企业定制自定义组件包:基于 CBS 规范打包的内部业务组件 CAB。

不支持格式

.msu.exe.zip.iso,仅识别符合 CBS 规范的标准 CAB。

二、DISM /Add-Package 与 wusa 优缺点对比

DISM /Add-Package

✅ 优点

  1. 跳过 WUA 层,不依赖 Windows Update 服务
     
    wuauserv 损坏、SoftwareDistribution 缓存故障时仍可执行修复,无 WUA 会话锁限制(镜像模式可并行);
  2. 唯一支持离线 WIM 镜像注入
     
    可在 PE 环境挂载离线系统镜像批量预集成补丁,wusa 完全无此能力;
  3. 包类型更广:支持语言包、FOD 功能包、驱动包,不止系统安全更新;
  4. 批量性能更强:单次命令可传入文件夹路径,自动遍历所有 CAB 批量安装;
  5. 系统修复能力强:可修复 CBS/WinSxS 底层组件损坏(/RestoreHealth配套)。

❌ 缺点

  1. 仅支持 CAB,不识别官网下载的 MSU 包,需要额外解压;
  2. 无友好静默重启控制参数,无倒计时 / 弹窗提示,只能脚本自行处理重启逻辑;
  3. 不支持按 KB 编号一键卸载,必须指定完整包路径;
  4. 无独立自定义日志文件,只能统一输出到CBS.log
  5. 语法门槛更高,不适合简单单机自动化场景;
  6. 无图形交互界面,全程命令行,报错可读性差。

wusa.exe

✅ 优点

  1. 原生支持微软官方.msu离线包,直接双击或命令行使用,无需解压;
  2. 全套精细化重启策略:/norestart//warnrestart//promptrestart//forcerestart,适配无人值守脚本;
  3. 独有/uninstall /kb:xxxx,无需原安装包即可卸载故障补丁;
  4. 支持/log自定义独立日志,方便运维审计排错;
  5. 语法简单,适合内网单机、域客户端批量推送脚本;
  6. 自带 GUI 弹窗,普通用户可手动操作,可视化进度。

❌ 缺点

  1. 强依赖 WUA(wuauserv 服务),服务异常则完全失效;
  2. 不支持离线 WIM 镜像、PE 环境,仅能在已启动运行的 Windows 系统使用;
  3. 仅能处理系统更新补丁,不支持语言包、驱动、FOD 功能组件;
  4. 受 WUA 单会话锁限制,同一时间只能运行一个 wusa 进程;
  5. 无法处理纯 CAB 包,必须封装为 MSU 才能使用。

选型速记

  • 离线镜像封装、PE 部署、修复 WUA 故障、批量注入驱动 / 语言包 → DISM
  • 内网单机 MSU 补丁、脚本静默运维、快速回滚 KB 更新、需要人性化重启提示 → wusa

三、DISM /Add-Package 使用完整命令教程

前置要求

  1. 必须管理员身份运行 CMD/PowerShell;
  2. 离线包为标准 CBS CAB 文件;
  3. 离线镜像操作需先挂载 WIM 到本地空目录。

1. 在线系统(当前运行 Windows)安装补丁

单 CAB 包安装

cmd
DISM /Online /Add-Package /PackagePath:"D:\patches\kb5039299.cab"

批量安装文件夹内所有 CAB

cmd
DISM /Online /Add-Package /PackagePath:"D:\patches\"
参数说明:文件夹路径下所有.cab会按依赖顺序自动串行安装。

安装后自动检测重启需求

命令执行结束会返回0成功、3010需重启,脚本可通过返回码判断:
batch
@echo off
DISM /Online /Add-Package /PackagePath:D:\patches\
if %errorlevel% equ 3010 shutdown /r /t 10 /c "补丁安装完成,即将重启"

2. 离线 WIM 镜像注入补丁(DISM 独有能力)

步骤 1:挂载 WIM 镜像

cmd
:: 创建挂载目录
md D:\mount_win11
:: 挂载索引1的系统镜像
DISM /Mount-Wim /WimFile:D:\win11_24h2.wim /Index:1 /MountDir:D:\mount_win11

步骤 2:注入 CAB 补丁

cmd
DISM /Image:D:\mount_win11 /Add-Package /PackagePath:D:\patches\

步骤 3:保存修改并卸载镜像

cmd
DISM /Unmount-Wim /MountDir:D:\mount_win11 /Commit

3. 附加实用参数

  • /IgnoreCheck:忽略版本校验,强制安装(慎用,易导致组件损坏)
  • /PreventPending:跳过存在待重启事务时的安装,避免冲突
     
    示例:
cmd
DISM /Online /Add-Package /PackagePath:D:\kb.cab /PreventPending

4. 日志排查

所有安装日志统一存放:
plaintext
%windir%\Logs\CBS\CBS.log
无自定义日志路径参数,如需单独记录可重定向输出:
cmd
DISM /Online /Add-Package /PackagePath:D:\patch.cab >> D:\dism_install.log

5. 卸载配套命令(DISM /Remove-Package)

需传入完整包名,不支持 KB 简写:
cmd
DISM /Online /Remove-Package /PackageName:Package_for_RollupFix~31bf3856ad364e35~amd64~~22621.3880.1.8

Windows 在线系统 + 离线 WIM 镜像 补丁注入全方法汇总(常规 + 特殊另类方案)

总览分层

  1. 标准官方原生工具(DISM /wusa)
  2. 离线镜像专属特殊方案
  3. 在线运行系统另类注入 / 修复方案
  4. PE 离线应急另类补丁部署
  5. 企业批量自动化特殊旁路方案

一、标准官方正统方案(基础必掌握)

1. DISM /Add-Package(唯一同时支持在线 + 离线镜像)

在线系统(开机运行 Windows)

cmd
:: 单CAB
DISM /Online /Add-Package /PackagePath:D:\patch\kbxxxx.cab
:: 批量目录所有CAB
DISM /Online /Add-Package /PackagePath:D:\patch_folder

离线 WIM 镜像

cmd
DISM /Mount-Wim /WimFile:D:\win11.wim /Index:1 /MountDir:D:\mount
DISM /Image:D:\mount /Add-Package /PackagePath:D:\patch_folder
DISM /Unmount-Wim /MountDir:D:\mount /Commit
限制:仅支持 CAB,不识别 MSU;依赖 CBS 组件规范。

2. wusa.exe(仅在线运行系统,无法操作 WIM)

cmd
:: MSU静默安装
wusa D:\patch\kbxxxx.msu /quiet /norestart
:: KB号卸载(独有能力)
wusa /uninstall /kb:xxxxxx /quiet
限制:不能处理离线镜像、仅 MSU 包、依赖 WUA 服务。

3. Windows Update 在线自动安装(仅在线系统)

wuauclt /detectnow、设置 - Windows 更新、PowerShell Install-WindowsUpdate,仅联网环境可用。

二、离线 WIM 镜像专属 特殊 / 另类补丁注入方法

方案 1:MSU 转 CAB 后 DISM 注入(绕过 MSU 不兼容问题)

MSU 本质是封装包,先解压提取内部 CAB,再给 DISM 使用。

解压命令(CMD)

cmd
md D:\msu_extract
expand -f:* D:\patch\kbxxxx.msu D:\msu_extract
提取目录内后缀.cab文件即为 DISM 可注入补丁包,再用/Add-Package写入镜像。

方案 2:WIM 挂载后手动替换 WinSxS(极特殊,应急专用)

适用场景:微软无对应 CAB、仅单文件修复补丁,标准包损坏。
  1. 挂载 WIM 到D:\mount
  2. 从正常同版本系统提取对应 dll/sys 驱动文件
  3. 直接覆盖D:\mount\Windows\WinSxS对应版本目录
  4. 手动修改component registry离线注册表:D:\mount\Windows\System32\config\SOFTWARE
     
    ⚠️ 高风险:极易破坏组件版本依赖,仅用于实验室紧急修复,生产禁用。

方案 3:OSCDIMG + 自定义预植入补丁(镜像封装流水线)

另类无挂载注入,制作安装 ISO 时预部署补丁:
  1. 在 ISO 源根目录创建$OEM$\$1\Patch存放 MSU/CAB
  2. 编写cmdlines.txt,系统首次部署自动执行 wusa/DISM
txt
[Commands]
"cmd /c wusa C:\Patch\kbxxxx.msu /quiet /norestart"
  1. OSCDIMG 重新打包 ISO,安装系统时自动预装补丁,无需手动挂载 WIM。

方案 4:FFU 磁盘镜像离线打补丁(替代 WIM 的磁盘级镜像)

DISM 原生支持 FFU 全磁盘镜像,无需解压 WIM,直接对整块系统镜像注入补丁:
cmd
DISM /Capture-FFU /ImageFile:D:\os.ffu /CaptureDir:D:\mount
DISM /Image:D:\mount /Add-Package /PackagePath:D:\patch
适用工控、嵌入式设备整盘镜像批量更新,属于小众另类镜像方案。

方案 5:Hyper-V VHD/VHDX 离线挂载注入(虚拟机镜像特殊方案)

不用提取 WIM,直接挂载虚拟磁盘:
  1. 磁盘管理附加 VHDX 到本地盘符(如 Z:)
  2. DISM 指定离线路径注入补丁:
cmd
DISM /Image:Z:\ /Add-Package /PackagePath:D:\patch
适合批量虚拟机模板更新,跳过 WIM 导出 / 导入步骤。

三、在线运行系统 特殊另类补丁注入 / 修复方案

方案 1:DISM /RestoreHealth 旁路在线拉取补丁修复(无本地离线包)

另类方式:不手动导入 CAB,直接从微软服务器下载缺失组件补丁修复系统:
cmd
# 官方源
DISM /Online /Cleanup-Image /RestoreHealth
# 本地离线源修复(备用CAB仓库,另类离线修复)
DISM /Online /Cleanup-Image /RestoreHealth /Source:D:\patch_folder /LimitAccess
/LimitAccess禁止联网,仅使用本地补丁仓库修复损坏 CBS,无需逐个安装 KB。

方案 2:PowerShell Windows Update Module 静默批量(替代 wusa)

底层同样调用 WUA COM,另类脚本方案,支持查询 + 安装一体化:
powershell
Install-Module PSWindowsUpdate
Get-WindowsUpdate -Install -AcceptAll
# 本地MSU批量静默安装(封装调用wusa)
Get-ChildItem D:\patch\*.msu | ForEach-Object {wusa $_.FullName /quiet /norestart}

方案 3:SFC + 离线补丁仓库联动修复(组件损坏专用另类组合)

SFC 依赖 WinSxS 正常组件,当组件缺失时,先用 DISM 注入全套补丁仓库,再执行 SFC 校验:
cmd
DISM /Online /Add-Package /PackagePath:D:\all_patch
sfc /scannow
适合系统文件大面积损坏、wusa/DISM 单独执行报错场景。

方案 4:任务计划程序延迟补丁安装(另类分步部署)

批量安装多补丁时,拆分执行避开业务高峰:
  1. 编写批处理存放至本地
  2. 计划任务凌晨自动调用 wusa/DISM 安装补丁
  3. 安装完成后延时重启,规避生产业务中断。

方案 5:注册表旁路卸载 / 强制替换补丁(高危另类)

直接修改 CBS 注册表HKLM\COMPONENTSComponent Based Servicing,强制标记补丁已安装 / 卸载,仅用于补丁数据库严重损坏应急,生产严禁使用。

四、PE 环境离线应急 另类补丁部署(无完整 Windows 系统)

PE 无 WUA 服务,wusa 完全失效,仅能使用以下特殊方案:
  1. DISM 挂载本地硬盘分区注入
     
    PE 下识别本地系统盘(如 X:),直接离线注入 CAB 补丁:
    cmd
    DISM /Image:X:\ /Add-Package /PackagePath:D:\pe_patch
  2. PE 内置一键补丁脚本
     
    定制 PE 镜像,内置补丁包 + 自动 DISM 批处理,开机自动扫描本地系统并打补丁,用于批量故障电脑离线修复。
  3. 离线组件还原包:完整 WinSxS 备份覆盖,另类整体修复,不单独注入 KB 补丁。

五、企业批量自动化 旁路特殊方案

1. WSUS 离线导出补丁(批量仓库另类源)

WSUS 服务器导出全套更新缓存,拷贝至内网离线终端作为 DISM /Source修复源,不用单独下载每个 MSU/CAB。

2. MDT/SCCM 任务序列自动补丁注入(部署流水线专用)

MDT 封装阶段自动调用 DISM 给 WIM 注入补丁;系统部署后自动运行 wusa 安装剩余更新,一体化流水线,属于企业专用另类自动化方案。

3. 域 GPO 登录脚本批量推送 MSU

组策略下发批处理,客户端开机后台静默执行 wusa,无需人工操作,适合上千终端内网批量更新。

4. PXE 网络离线补丁分发(无 U 盘介质另类方案)

PE 通过 PXE 启动,从 TFTP 服务器加载 CAB 补丁,远程给局域网所有电脑离线注入补丁,工控机房无介质批量运维。

六、各方案能力对比(在线 / 离线镜像支持一览)

方案 在线运行系统 离线 WIM/FFU/VHD 镜像 支持 MSU 支持 CAB 特殊适用场景
DISM /Add-Package 全场景标准方案
wusa.exe 内网单机、KB 卸载
MSU 解压 + DISM 间接支持 镜像需要微软官方 MSU 补丁
ISO 预植入 ✅(新装系统) 自定义系统安装镜像
VHD 离线挂载 DISM 虚拟机模板批量更新
PE 下 DISM 本地盘注入 ✅(离线修复) 系统崩溃无法进桌面修复
DISM /RestoreHealth 离线源 CBS 组件损坏修复
PowerShell PSWindowsUpdate 批量运维脚本

七、高危另类方案风险提醒 ⚠️

  1. 手动修改 WinSxS、离线 CBS 注册表:极易触发 0x800f081f 组件损坏、系统无法启动;
  2. /IgnoreCheck强制安装不匹配补丁:破坏版本依赖,蓝屏、功能异常概率极高;
  3. 直接覆盖系统文件替代正规补丁注入:WRP 资源保护拦截,重启自动回滚。

离线 WIM 镜像专属特殊 / 另类补丁注入方案汇总

所有方法仅针对未部署、可挂载的 wim 系统镜像,wusa 完全无法使用,分为「实用特殊旁路方案」「镜像流水线另类预部署」「底层应急极端方案」三大类,附操作流程、适用场景、风险标注。

一、基础特殊旁路:MSU 转 CAB 注入(解决 DISM 不支持 MSU 痛点)

原理

微软官网仅提供 MSU 离线包,DISM 原生仅识别 CAB;先解压 MSU 剥离 WUA 专属元数据,提取内部标准 CBS CAB 包再注入镜像,是运维最常用的特殊折中方案。

完整操作流程

  1. 解压 MSU 提取原生 CAB
cmd
md C:\msu_temp
expand -f:* D:\patch\windows11-kb5041015-x64.msu C:\msu_temp
  1. 筛选目录内.cab后缀文件(排除 xml、txt 元数据)
  2. 挂载 WIM 镜像并注入
cmd
DISM /Mount-Wim /WimFile:D:\source.wim /Index:1 /MountDir:D:\mount
DISM /Image:D:\mount /Add-Package /PackagePath:C:\msu_temp
DISM /Unmount-Wim /MountDir:D:\mount /Commit

适用场景

仅持有 MSU、无单独 CAB 补丁,需要给离线镜像预装月度累积更新 / SSU 堆栈补丁。

优缺点

✅ 兼容微软官方下载源、无第三方工具、版本校验完整;
 
❌ 多补丁需批量解压,增加流水线步骤。

二、镜像封装流水线另类方案(无需反复挂载 WIM,ISO 层级预植入)

方案 1:目录预植入补丁 + cmdlines.txt 首次开机自动安装

核心逻辑

不修改 WIM 内部组件,在系统安装 ISO 源文件里增加$OEM$目录,补丁随系统安装复制到本地磁盘,系统部署完成第一次开机自动静默执行 wusa 安装,属于「后置注入」另类思路。
  1. ISO 源根目录创建目录结构
plaintext
\$OEM$\$1\OfflinePatch  存放所有msu补丁
\$OEM$\cmdlines.txt     自动执行脚本
  1. cmdlines.txt 内容
txt
[Commands]
"cmd /c for %%i in (C:\OfflinePatch\*.msu) do wusa %%i /quiet /norestart"
  1. OSCDIMG 重新打包 ISO 镜像

特点

  • 无需挂载、修改、提交 WIM,大幅缩短镜像制作时间;
  • 仅作用于全新装机场景,已捕获的 WIM 模板无法生效;
  • 依赖目标系统完整启动,不修复镜像底层组件依赖。

方案 2:应答文件 Unattend.xml 同步注入补丁(Windows Setup 自动部署)

原理

Windows 安装程序应答文件配置Microsoft-Windows-Deployment组件,在 OOBE 阶段自动调用 DISM 安装本地 CAB 补丁,和搭配使用。
 
在 unattend.xml 中添加同步命令:
xml
<SynchronousCommand wcm:action="add">
  <Order>1</Order>
  <CommandLine>DISM /Online /Add-Package /PackagePath=C:\OfflinePatch\cabs</CommandLine>
</SynchronousCommand>

适用场景

企业 MDT 批量部署、标准化装机流水线,镜像保持纯净,补丁动态后置安装。

方案 3:FFU 磁盘镜像替代 WIM 批量打补丁(嵌入式工控另类镜像格式)

DISM 原生支持 FFU 全磁盘镜像,无需拆分为 WIM,直接对整块系统磁盘镜像离线注入补丁,工控、零售终端专用。
cmd
:: 挂载FFU镜像
DISM /Mount-FFU /ImageFile:D:\device.ffu /MountDir:D:\ffu_mount
:: 批量注入补丁
DISM /Image:D:\ffu_mount /Add-Package /PackagePath:D:\cab_folder
:: 保存修改
DISM /Unmount-FFU /MountDir:D:\ffu_mount /Commit

优势

无需拆分分区、适配加密磁盘镜像;缺点:FFU 体积远大于 WIM,PC 桌面场景极少使用。

三、虚拟机镜像专属另类:VHD/VHDX 离线挂载注入(跳过 WIM 导出步骤)

原理

直接挂载 Hyper-V/VirtualBox 虚拟磁盘文件,将虚拟磁盘盘符作为 DISM 离线镜像路径注入补丁,不用先捕获成 WIM 文件,适合虚拟机模板批量更新。

操作步骤

  1. 磁盘管理 → 附加 VHDX,分配本地盘符(例:Z:)
  2. 直接对虚拟磁盘离线注入 CAB 补丁
cmd
DISM /Image:Z:\ /Add-Package /PackagePath:D:\patches
  1. 分离 VHDX,完成虚拟机模板更新

细分延伸:差分 VHD 链式批量更新

多台虚拟机共享父 VHD,仅给父磁盘离线打补丁,所有差分子盘自动继承更新,大幅减少重复操作,云桌面机房专用特殊方案。

四、PE 离线应急特殊注入方案(系统崩溃、无法启动场景)

方案 1:PE 下直接挂载本地硬盘分区注入补丁

无需操作 WIM,针对已经部署、无法进系统的终端,PE 环境识别系统盘盘符后直接离线修复底层补丁缺失:
cmd
:: X: 为本地故障电脑系统盘
DISM /Image:X:\ /Add-Package /PackagePath:D:\pe_cab_patches

方案 2:定制 PE 内置补丁仓库一键批量修复

自定义 PE 镜像,内置完整补丁 CAB 仓库 + 自动批处理,PE 启动后自动扫描所有硬盘 Windows 目录,批量注入缺失更新,用于机房批量故障机离线修复。

五、底层极端应急另类方案(高风险,仅实验室 / 故障抢救使用)

方案 1:手动替换 WinSxS 组件 + 离线注册表修复(无标准 CAB 包时使用)

适用场景:无对应官方补丁包,仅单文件驱动 / 系统 dll 损坏,标准注入工具无法修复。
  1. 正常同版本系统提取完好组件文件夹,复制到挂载目录D:\mount\Windows\WinSxS对应版本路径;
  2. 加载离线注册表配置单元:
cmd
reg load HKLM\OFFLINE_SOFTWARE D:\mount\Windows\System32\config\SOFTWARE
  1. 手动修改Component Based Servicing组件版本记录,更新组件依赖清单;
  2. 卸载注册表配置单元,提交 WIM 修改。
     
    ⚠️ 重大风险:极易破坏 CBS 组件依赖,导致镜像部署后蓝屏、更新报错 0x800f081f,生产环境严禁使用

方案 2:离线组件仓库源修复(DISM /RestoreHealth 离线镜像模式)

非常规/Add-Package安装,直接用完整补丁仓库修复镜像内损坏的 WinSxS 组件库,一次性补齐所有缺失更新,无需逐个 KB 注入:
cmd
DISM /Image:D:\mount /Cleanup-Image /RestoreHealth /Source:D:\full_cab_repo

适用场景

老旧镜像长期未更新、组件库大面积缺失,批量补齐全部前置补丁、累积更新。

六、企业自动化流水线特殊衍生方案

方案 1:MDT 任务序列 WIM 离线补丁注入(批量封装专用)

MDT 工作流内置离线服务步骤,自动挂载 WIM、读取共享服务器补丁目录、批量注入 CAB,完成后自动提交并生成新镜像,全程无人值守,域环境千台终端标准化镜像专用。

方案 2:PXE 网络离线补丁分发(无 U 盘介质批量更新 WIM)

PXE 启动 PE,通过 TFTP 从内网服务器加载 CAB 补丁仓库,远程读取存储服务器上的 WIM 镜像批量注入,机房无移动介质运维另类方案。

方案 3:WSUS 离线导出补丁仓库作为镜像注入源

WSUS 服务器导出全量更新缓存,拷贝为本地源目录,DISM 直接读取仓库批量注入镜像,不用单独下载每个 KB 补丁。

七、各特殊方案能力与风险对照表

注入方案 是否需要挂载 WIM 支持 MSU 适用场景 风险等级
MSU 解压提取 CAB 注入 ✅ 是 间接支持 官方 MSU 补丁离线镜像预装
+ cmdlines.txt 后置安装 ❌ 否 ✅ 原生支持 全新 ISO 装机流水线 极低
VHD/VHDX 虚拟磁盘离线注入 ✅ 挂载虚拟盘 虚拟机模板批量更新
FFU 磁盘镜像批量打补丁 ✅ 挂载 FFU 工控嵌入式设备镜像
PE 本地硬盘离线修复注入 ✅ 挂载物理系统盘 已部署故障系统抢救
手动修改 WinSxS + 离线注册表 ✅ 深度挂载 无官方补丁极端应急 极高
DISM /RestoreHealth 离线仓库修复 ✅ 是 镜像组件大面积缺失

八、选型快速建议

  1. 标准镜像预装月度更新 → MSU 解压 CAB + DISM /Add-Package
  2. 不想频繁修改 WIM、快速制作装机 ISO → 后置 wusa 方案
  3. 虚拟机模板批量更新 → VHDX 离线挂载注入
  4. 工控 / 嵌入式设备 → FFU 镜像补丁注入
  5. 批量企业自动化封装 → MDT 任务序列离线注入
  6. 系统崩溃无法启动、离线抢救 → PE 下 DISM 挂载本地系统盘修复
  7. 无官方补丁、单文件底层修复(仅应急)→ 手动 WinSxS 替换(不推荐生产)

 


DISM 集成软件到 Windows 映像 + 静默安装完整实操指南

一、核心方案区分

两种主流集成方式,适用场景完全不同:
  1. 离线注入(DISM /Add-ProvisionedAppxPackage):微软商店 UWP/APPX 软件,离线挂载 WIM 直接预装,无安装程序;
  2. 离线部署第三方 EXE/MSI(DISM + 应答文件 / 自定义脚本):传统桌面软件(EXE、MSI 安装包),通过部署映像服务 + 自动应答文件实现系统首次开机静默安装;
  3. 在线部署(DISM /Online):已装好的 Windows 系统内静默批量安装软件,不修改原始映像。
你需求:集成到 Windows 映像、静默安装第三方软件 → 采用「挂载 WIM 离线 + 写入 SetupComplete.cmd 开机静默脚本」标准方案。

二、前置准备

  1. 介质文件
    • 原版 Windows ISO 提取 install.wim(路径示例:D:\ISO\sources\install.wim
    • 软件安装包(MSI 优先,EXE 需支持静默参数)
    • 空挂载目录:D:\MountWIM
    • 存放软件资源目录:D:\SoftSource
  2. 权限要求:全程以管理员身份打开 CMD/PowerShell
  3. 静默安装参数规范
    • MSI 通用静默:msiexec /i 软件.msi /qn /norestart
    • EXE 通用静默参考:
      • Inno 安装包:xxx.exe /verysilent /norestart
      • NSIS 安装包:xxx.exe /S /norestart
      • InstallShield:xxx.exe /s /v"/qn /norestart"

三、完整分步操作(离线 WIM 映像预装软件)

步骤 1:使用 DISM 挂载 Windows 映像

cmd
# 创建挂载目录
md D:\MountWIM
# 挂载install.wim,索引1代表第一个系统版本(专业版/企业版,可dism /get-wiminfo查看索引)
DISM /Mount-Wim /WimFile:D:\ISO\sources\install.wim /Index:1 /MountDir:D:\MountWIM
查看映像索引命令:
cmd
DISM /Get-WimInfo /WimFile:D:\ISO\sources\install.wim

步骤 2:复制软件安装包到离线映像内部

将所有静默安装包放入挂载后的系统目录,推荐路径 C:\SoftSetup
cmd
md D:\MountWIM\Windows\Setup\Scripts\SoftSetup
# 拷贝所有安装程序进映像
xcopy D:\SoftSource\* D:\MountWIM\Windows\Setup\Scripts\SoftSetup\ /E /H /Y

步骤 3:创建自动静默安装脚本 SetupComplete.cmd

该脚本在系统部署完成、首次进桌面前自动执行,实现无人工静默安装,文件路径固定:
 
D:\MountWIM\Windows\Setup\Scripts\SetupComplete.cmd
脚本示例内容(记事本编辑,保存 ANSI 编码):
cmd
@echo off
:: 关闭部署完成重启提示
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update" /v AUOptions /t REG_DWORD /d 2 /f

:: ========== 1.MSI软件静默安装示例 ==========
msiexec /i C:\SoftSetup\7z2301-x64.msi /qn /norestart
msiexec /i C:\SoftSetup\Notepad++.msi /qn /norestart

:: ========== 2.EXE静默安装示例 ==========
:: 7-Zip EXE安装包(Inno)
C:\SoftSetup\7zSetup.exe /verysilent /norestart
:: InstallShield封装软件
C:\SoftSetup\DriverTool.exe /s /v"/qn /norestart"

:: ========== 清理安装包(可选,释放C盘空间) ==========
rd /s /q C:\SoftSetup

:: 自动重启系统
shutdown /r /t 5 /c "软件安装完成,即将重启"
exit /b 0

步骤 4:(可选)注入驱动 / 系统补丁(配套 DISM 常用命令)

cmd
# 离线集成驱动
DISM /Image:D:\MountWIM /Add-Driver /Driver:D:\Drivers /Recurse
# 离线集成Windows更新补丁
DISM /Image:D:\MountWIM /Add-Package /PackagePath:D:\WindowsUpdateKB

步骤 5:保存修改、卸载映像

1)保存更改,保留挂载目录(后续可再次修改)

cmd
DISM /Commit-Wim /MountDir:D:\MountWIM

2)提交修改并卸载挂载(最终生成成品 install.wim)

cmd
DISM /Unmount-Wim /MountDir:D:\MountWIM /Commit

废弃挂载、放弃所有修改(出错回滚用)

cmd
DISM /Unmount-Wim /MountDir:D:\MountWIM /Discard

四、方案 2:MSI 软件直接 DISM 离线预安装(适用于 MSIX/MSI 专用)

仅针对支持脱机注入的 MSI 应用,无需脚本,直接 DISM 注入映像:
cmd
DISM /Image:D:\MountWIM /Add-ProvisionedAppxPackage /PackagePath:D:\SoftSource\xxx.msix /SkipLicense

五、方案 3:在线 DISM(已部署系统内静默批量装软件,不修改镜像)

针对已装好的 Windows,在线执行静默安装,无需挂载 WIM:
cmd
# 在线执行MSI静默安装
DISM /Online /Execute /Command:"msiexec /i D:\Tools\software.msi /qn /norestart"
# 批量执行脚本
DISM /Online /Execute /Command:"D:\Tools\InstallAllSoft.bat"

六、关键注意事项 ⚠️

  1. 脚本编码SetupComplete.cmd 必须 ANSI 编码,UTF-8 会导致中文乱码、脚本执行失败;
  2. 静默参数校验:提前在真机测试安装包静默命令,确认无弹窗、无交互;
  3. 权限限制:离线映像内脚本默认本地系统权限,足够安装全局软件;
  4. WIM 体积控制:若不需要保留安装包,脚本末尾添加删除目录命令减小镜像;
  5. 多版本索引:多合一镜像需确认/Index参数对应正确系统版本,避免改错镜像;
  6. 企业批量部署:配合autounattend.xml应答文件,可同步设置系统用户名、序列号、分区、时区。

七、autounattend.xml 配套扩展(企业标准化部署)

若需要全自动无人值守装系统 + 预装软件,在应答文件中指定自动脚本路径,核心节点片段:
xml
<settings pass="oobeSystem">
  <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <SetupComplete>
      <Command>%WINDIR%\Setup\Scripts\SetupComplete.cmd</Command>
    </SetupComplete>
  </component>
</settings>

PS C:\Users\Administrator> Dism /Mount-Wim /?

部署映像服务和管理工具  版本: 10.0.26100.1150


 Dism /Mount-Wim /Mount-Wim /WimFile:<path_to_WIM_file>  [/Index:<image_index> | /Name:<image_name>]
 Dism /Mount-Wim   /MountDir:<target_mount_directory> [/ReadOnly] [/EA]

  将 WIM 文件安装到指定的目录,以便该文件可用于提供服务。
  使用 /ReadOnly 将装载的映像设置为具有只读权限。
  使用 /EA 借助扩展属性进行装载。
  具有多个映像的文件需要指定 /Index 或 /Name。

    示例:
      DISM.exe /Mount-Wim /WimFile:C:\test\images\myimage.wim /index:1   /MountDir:C:\test\offline

      DISM.exe /Mount-Wim /WimFile:C:\test\images\myimage.wim /index:1   /MountDir:C:\test\offline /ReadOnly


PS C:\Users\Administrator> dism /image /?

部署映像服务和管理工具   版本: 10.0.26100.1150


 dism /Image:<path_to_offline_image>

  这是脱机 Windows 映像的根目录的路径。此选项必须与服务命令一起使用。

    示例:
      DISM.exe /Image:C:\test\offline /Get-Packages


PS C:\Users\Administrator> dism /unmount-wim /?

部署映像服务和管理工具
版本: 10.0.26100.1150


 dism /Unmount-Wim /MountDir:<target_mount_directory> {/Commit | /Discard}
  [/EA]

  卸载 WIM 文件。使用 /Commit 保存更改或使用 /Discard
  放弃更改。
  使用 /EA 保存扩展属性。

    示例:
      DISM.exe /Unmount-Wim /MountDir:C:\test\offline /commit

      DISM.exe /Unmount-Wim /MountDir:C:\test\offline /discard


  C:\Users\Administrator> expand /?
Microsoft (R) 文件扩展实用程序   版权所有 (c) Microsoft Corporation。保留所有权利。

展开一个或多个压缩文件。

EXPAND [-R] Source Destination
EXPAND -R Source [Destination]
EXPAND -I Source [Destination]
EXPAND -D Source.cab [-F:Files]
EXPAND Source.cab -F:Files Destination

 EXPAND  -R            重命名展开的文件。
 EXPAND  -I            重命名展开的文件但忽略目录结构。
EXPAND   -D            显示来源中的文件列表。
EXPAND   Source        源文件规格。可使用通配字符。
 EXPAND  -F:Files      从 .CAB 文件展开的文件的名称。
 EXPAND  Destination   目标文件 | 路径规格。目标可以是目录。如果来源是多个文件且没有指定 -r,目标则必须是目录。


Windows ® Installer. V 5.0.26100.1150
 
msiexec /Option <Required Parameter> [Optional Parameter]
 
安装选项
</package | /i> <Product.msi>
安装或配置产品
/a <Product.msi>
管理安装 - 在网络上安装产品
/j<u|m> <Product.msi> [/t <Transform List>] [/g <Language ID>]
公布产品 - m 公布到所有用户,u 公布到当前用户
</uninstall | /x> <Product.msi | ProductCode>   卸载产品
显示选项
/quiet
安静模式,无用户交互
/passive
无人参与模式 - 只显示进度栏
/q[n|b|r|f]
设置用户界面级别
n - 无用户界面
b - 基本界面
r - 精简界面
f - 完整界面(默认值)
/help  帮助信息
重新启动选项
/norestart  安装完成后不重新启动
/promptrestart  必要时提示用户重新启动
/forcerestart  安装后始终重新启动计算机
日志选项
/l[i|w|e|a|r|u|c|m|o|p|v|x|+|!|*] <LogFile>
i - 状态消息
w - 非致命警告
e - 所有错误消息
a - 操作的启动
r - 操作特定记录
u - 用户请求
c - 初始用户界面参数
m - 内存不足或致命退出信息
o - 磁盘空间不足消息
p - 终端属性
v - 详细输出
x - 额外调试信息
+ - 扩展到现有日志文件
! - 每一行刷新到日志
* - 记录所有信息,除了 v 和 x 选项
/log <LogFile>
与 /l* <LogFile> 相同
更新选项
/update <Update1.msp>[;Update2.msp]  应用更新
/uninstall <PatchCodeGuid>[;Update2.msp] /package <Product.msi | ProductCode>  删除产品的更新
修复选项
/f[p|e|c|m|s|o|d|a|u|v] <Product.msi | ProductCode> 修复产品
p - 仅当文件丢失时
o - 如果文件丢失或安装了更旧的版本(默认值)
e - 如果文件丢失或安装了相同或更旧的版本
d - 如果文件丢失或安装了不同版本
c - 如果文件丢失或较验和与计算的值不匹配
a - 强制重新安装所有文件
u - 所有必要的用户特定注册表项(默认值)
m - 所有必要的计算机特定注册表项(默认值)
s - 所有现有的快捷键方式(默认值)
v - 从源运行并重新缓存本地安装包
设置公共属性
[PROPERTY=PropertyValue]
 
请查阅 Windows (R) Installer SDK 获得有关命令行语法的其他文档。
 
版权所有 (C) Microsoft Corporation. 保留所有权利。此软件的部分内容系基于 Independent JPEG Group 的工作。

C:\Users\Administrator>start /?
启动一个单独的窗口以运行指定的程序或命令。

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
      [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
      [/MACHINE <x86|amd64|arm|arm64>][command/program] [parameters]

    "title"     在窗口标题栏中显示的标题。
    path        启动目录。
    B           启动应用程序,但不创建新窗口。应用程序已忽略 ^C 处理。除非应用程序启用 ^C 处理,否则 ^Break 是唯一可以中断该应用程序的方式。
    I           新的环境将是传递给 cmd.exe 的原始环境,而不是当前环境。
    MIN         以最小化方式启动窗口。
    MAX         以最大化方式启动窗口。
    SEPARATE    在单独的内存空间中启动 16 位 Windows 程序。
    SHARED      在共享内存空间中启动 16 位 Windows 程序。
    LOW         在 IDLE 优先级类中启动应用程序。
    NORMAL      在 NORMAL 优先级类中启动应用程序。
    HIGH        在 HIGH 优先级类中启动应用程序。
    REALTIME    在 REALTIME 优先级类中启动应用程序。
    ABOVENORMAL 在 ABOVENORMAL 优先级类中启动应用程序。
    BELOWNORMAL 在 BELOWNORMAL 优先级类中启动应用程序。
    NODE        将首选非一致性内存结构(NUMA)节点指定为十进制整数。
    AFFINITY    将处理器关联掩码指定为十六进制数字。进程被限制在这些处理器上运行。将 /AFFINITY 和  /NODE 结合使用时,会对关联掩码进行不同的解释。指定关联掩码,就将 NUMA节点的处理器掩码向右移位以从零位开始一样。进程被限制在指定关联掩码和 NUMA 节点之间的那些通用处理器上运行。如果没有通用处理器,则进程被限制在指定的 NUMA 节点上运行。
    WAIT        启动应用程序并等待它终止。
    MACHINE     指定应用程序进程的系统架构。

    command/program
                如果它是内部 cmd 命令或批文件,则该命令处理器是使用 cmd.exe 的 /K 开关运行的。这表示运行命令之后,该窗口将仍然存在。

                如果它不是内部 cmd 命令或批处理文件,则它就是一个程序,并将作为一个窗口化应用程序或 控制台应用程序运行。

    parameters  这些是传递给 command/program 的参数。

注意: 在 64 位平台上不支持 SEPARATE 和 SHARED 选项。

通过指定 /NODE,可按照利用 NUMA 系统中的内存区域的方式创建进程。例如,可以创建两个完全通过共享内存互相通信的进程以共享相同的首选 NUMA 节点,从而最大限度地减少内存延迟。只要有可能,它们就会分配来自相同 NUMA 节点的内存,并且会在指定节点之外的处理器上自由运行。

    start /NODE 1 application1.exe
    start /NODE 1 application2.exe

这两个进程可被进一步限制在相同 NUMA 节点内的指定处理器上运行。在以下示例中,application1 在节点的两个低位处理器上运行,而 application2在该节点的其后两个处理器上运行。该示例假定指定节点至少具有四个逻辑处理器。请注意,节点号可更改为该计算机的任何有效节点号,而无需更改关联掩码。

    start /NODE 1 /AFFINITY 0x3 application1.exe
    start /NODE 1 /AFFINITY 0xc application2.exe

如果命令扩展被启用,通过命令行或 START 命令的外部命令调用会如下改变:

将文件名作为命令键入,非可执行文件可以通过文件关联调用。
    (例如,WORD.DOC 会调用跟 .DOC 文件扩展名关联的应用程序)。
    关于如何从命令脚本内部创建这些关联,请参阅 ASSOC 和FTYPE 命令。

执行的应用程序是 32 位 GUI 应用程序时,CMD.EXE 不等应用程序终止就返回命令提示符。如果在命令脚本内执行,该新行为则不会发生。

如果执行的命令行的第一个符号是不带扩展名或路径修饰符的字符串 "CMD","CMD" 会被 COMSPEC 变量的数值所替换。这防止从当前目录提取 CMD.EXE。

如果执行的命令行的第一个符号没有扩展名,CMD.EXE 会使用PATHEXT 环境变量的数值来决定要以什么顺序寻找哪些扩展名。PATHEXT 变量的默认值是:

        .COM;.EXE;.BAT;.CMD

    请注意,该语法跟 PATH 变量的一样,分号隔开不同的元素。

查找可执行文件时,如果没有相配的扩展名,看一看该名称是否与目录名相配。如果确实如此,START 会在那个路径上调用Explorer。如果从命令行执行,则等同于对那个路径作 CD /D。


将软件集成到 Windows 映像中并进行静默安装,可以使用 DISM 和适当的安装程序命令。下面是具体的步骤和示例命令。

1. 准备工作

  • 确保你有一个已挂载的 Windows 映像。
  • 确保你有软件的安装程序,并且支持静默安装。

2. 挂载映像

首先,挂载你的 WIM 文件(如果还没有挂载的话):

bashCopy Code
Dism /Mount-Wim /WimFile:"C:\Path\To\YourImage.wim" /index:1 /MountDir:"C:\Path\To\Mount"

3. 集成软件

假设你有一个可执行的安装程序,例如 setup.exe,并且它支持静默安装。可以使用 Dism 命令的 Add-Package 选项集成软件包(如 .msu.cab 文件)。如果是 .exe 文件,通常需要使用 cmd 进行静默安装。

示例命令:

bashCopy Code
Dism /Image:"C:\Path\To\Mount" /Add-Package /PackagePath:"C:\Path\To\YourSoftware.cab"

4. 静默安装软件

如果你的软件是一个可执行文件,并且支持静默安装,可以在映像中创建一个脚本以在第一次登录时安装。通常会将安装命令添加到 FirstLogonCommands 中。

示例 Unattend.xml 中的静默安装命令:

xmlCopy Code
<FirstLogonCommands>
    <SynchronousCommand wcm:action="add">
        <Order>1</Order>
        <CommandLine>"C:\Path\To\YourSoftware\setup.exe" /silent</CommandLine>
        <Description>Install YourSoftware silently</Description>
    </SynchronousCommand>
</FirstLogonCommands>

5. 卸载映像

完成所有操作后,记得卸载映像并提交更改:

bashCopy Code
Dism /Unmount-Wim /MountDir:"C:\Path\To\Mount" /Commit

注意事项

  • 静默安装参数:每个安装程序的静默安装参数可能不同,具体请参考该软件的文档。
  • 测试:建议在虚拟机上测试集成和安装过程,以确保没有问题。
  • 权限:确保在以管理员身份运行命令提示符时执行这些命令。

使用 DISM 命令的 Add-Package 选项来集成软件包(如 .msu.cab 文件)非常简单。以下是具体的示例和步骤。

1. 准备工作

确保你有一个已挂载的 Windows 映像,并且你要集成的包(如 .msu.cab 文件)已准备好。

2. 挂载映像

如果还没有挂载映像,请先挂载它:

bashCopy Code
Dism /Mount-Wim /WimFile:"C:\Path\To\YourImage.wim" /index:1 /MountDir:"C:\Path\To\Mount"

3. 集成软件包

假设你有一个 .cab 文件,例如 example.cab,可以使用以下命令将其集成到映像中:

bashCopy Code
Dism /Image:"C:\Path\To\Mount" /Add-Package /PackagePath:"C:\Path\To\example.cab"

集成 .msu 文件

如果你有一个 .msu 文件,首先需要将其提取为 .cab 文件,因为 DISM 不支持直接集成 .msu 文件。可以使用以下命令进行提取:

bashCopy Code
Expand -F:* "C:\Path\To\example.msu" "C:\Path\To\Extracted"

然后使用提取出的 .cab 文件进行集成:

bashCopy Code
Dism /Image:"C:\Path\To\Mount" /Add-Package /PackagePath:"C:\Path\To\Extracted\example.cab"

4. 卸载映像并提交更改

完成后,记得卸载映像并提交更改:

bashCopy Code
Dism /Unmount-Wim /MountDir:"C:\Path\To\Mount" /Commit

其他注意事项

  • 检查状态:在集成软件包后,可以使用以下命令检查映像的状态:

    bashCopy Code
    Dism /Image:"C:\Path\To\Mount" /Get-Packages
  • 多个包:可以一次性添加多个包,只需重复 Add-Package 命令或列出多个路径。

  • 错误处理:如果遇到错误,请检查日志文件,通常位于 C:\Windows\Logs\DISM\dism.log


在 Windows 映像中集成 .exe.msi 软件包并进行静默安装,可以使用 DISM 和适当的命令行参数。以下是步骤和示例。

1. 准备工作

确保你有以下内容:

  • 一个已挂载的 Windows 映像。
  • 软件的安装程序,例如 .exe 或 .msi 文件。

2. 挂载映像

如果尚未挂载映像,请使用以下命令挂载它:

bashCopy Code
Dism /Mount-Wim /WimFile:"C:\Path\To\YourImage.wim" /index:1 /MountDir:"C:\Path\To\Mount"

3. 集成 .msi 软件包

可以使用 DISM 直接集成 .msi 软件包。假设你有一个名为 example.msi 的文件:

bashCopy Code
Dism /Image:"C:\Path\To\Mount" /Add-Package /PackagePath:"C:\Path\To\example.msi"

4. 集成 .exe 软件包

对于 .exe 文件,通常需要使用静默安装参数。你不能直接用 DISM 集成 .exe 文件,因此建议使用批处理文件或脚本在首次登录时执行安装。

示例静默安装命令:

假设你的 .exe 文件支持 /silent/quiet 选项,你可以在 Unattend.xml 文件中添加该命令:

xmlCopy Code
<FirstLogonCommands>
    <SynchronousCommand wcm:action="add">
        <Order>1</Order>
        <CommandLine>"C:\Path\To\YourSoftware\setup.exe" /silent</CommandLine>
        <Description>Install YourSoftware silently</Description>
    </SynchronousCommand>
</FirstLogonCommands>

5. 卸载映像并提交更改

完成后,记得卸载映像并提交更改:

bashCopy Code
Dism /Unmount-Wim /MountDir:"C:\Path\To\Mount" /Commit

其他注意事项

  • 静默安装参数:不同的安装程序可能有不同的静默安装参数,请参考该程序的文档。
  • 测试:在虚拟机中测试映像和安装流程,以确保一切正常。

静默安装软件的命令通常取决于安装程序的类型和开发者。以下是一些常见的静默安装命令示例,适用于不同类型的安装程序:

1. MSI 安装包

对于使用 Windows Installer 的 MSI 包,可以使用 msiexec 命令:

cmdCopy Code
msiexec /i "C:\Path\To\YourSoftware.msi" /quiet /norestart

2. EXE 安装程序

许多 EXE 安装程序支持静默安装参数,常见的包括:

  • InstallShield 安装程序
cmdCopy Code
setup.exe /s /v"/qn"
  • NSIS 安装程序
cmdCopy Code
setup.exe /S
  • Inno Setup 安装程序
cmdCopy Code
setup.exe /VERYSILENT /NORESTART

3. Chocolatey 包管理器

如果你使用 Chocolatey 安装软件,可以使用以下命令:

cmdCopy Code
choco install packagename -y

4. Scoop 包管理器

使用 Scoop 安装软件时,可以使用:

cmdCopy Code
scoop install packagename

5. PowerShell 脚本

在 PowerShell 中,你也可以进行静默安装,例如:

powershellCopy Code
Start-Process "C:\Path\To\YourSoftware.exe" -ArgumentList "/silent" -NoNewWindow -Wait

6. 自定义安装程序

一些自定义的安装程序可能有自己的静默参数,通常可以在它们的文档中找到,例如:

cmdCopy Code
setup.exe --quiet

在使用静默安装命令时,请务必查阅特定软件的文档,以确定适用的参数。不同的安装程序有不同的静默选项,确保使用正确的参数可以避免安装失败。


一些常见安装程序和它们的静默安装命令的进一步说明:

7. MSI 安装选项

对于 MSI 文件,除了 /quiet 选项外,还可以使用以下选项:

  • /passive:提供用户界面,但不需要用户交互。
  • /l*v "C:\Path\To\logfile.txt":生成安装日志。

示例:

cmdCopy Code
msiexec /i "C:\Path\To\YourSoftware.msi" /passive /norestart /l*v "C:\Path\To\install.log"

8. 常见 EXE 安装参数

  • WiX Toolset
cmdCopy Code
setup.exe /quiet /norestart
  • Zipped 安装程序:有些程序会解压到临时目录,通常需要首先解压。

9. 利用 SCCM 或 MDT

如果在企业环境中使用 System Center Configuration Manager (SCCM) 或 Microsoft Deployment Toolkit (MDT),可以使用以下方式进行静默安装:

  • 在部署脚本中添加:
cmdCopy Code
start /wait setup.exe /silent

10. 特定应用的静默安装命令

  • Google Chrome
cmdCopy Code
ChromeSetup.exe --silent --install
  • Mozilla Firefox
cmdCopy Code
Firefox Setup.exe -silent -install
  • 7-Zip
cmdCopy Code
7z920-x64.exe /S

11. 查看所有支持的参数

很多安装程序可以通过 /help/? 来查看支持的命令行参数:

cmdCopy Code
setup.exe /help

cmdCopy Code
setup.exe /?

静默安装命令的关键是理解不同安装程序的参数。始终建议在尝试批量部署之前,先在测试环境中验证命令。


 

posted @ 2024-10-26 03:00  suv789  阅读(1873)  评论(0)    收藏  举报