无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 130|回复: 5

[原创] WimPatch - WIM增量更新工具 (WinPE)

  [复制链接]
发表于 9 小时前 | 显示全部楼层 |阅读模式
本帖最后由 834772509 于 2025-11-19 14:23 编辑

WimPatch 是一个高效的 Windows 映像文件 (WIM) 补丁工具,用于创建和应用 WIM 文件的增量补丁,高效且安全地管理 WIM 文件的增量更新。

功能特性
  • 补丁创建: 比较两个 WIM 映像文件并生成增量补丁
  • 补丁应用 : 将生成的补丁应用到基础映像文件,还原为更新后的映像
  • 补丁合并 : 将多个增量补丁合并为一个综合补丁
  • 补丁信息 : 查看补丁文件的详细信息,支持 XML 格式输出
  • 差分优化 : 支持 Zstd 和 BSDiff 两种差分算法,最大限度减小补丁包体积。
  • 国际化支持 : 内置中英文语言支持
  • 高性能 : 使用 Rust 语言开发,确保内存安全和运行时的高效率与可靠性。

使用说明

WimPatch 是一个命令行工具,提供以下子命令:

创建补丁
创建增量补丁文件,用于将更新后的 WIM 文件应用到基础 WIM 文件。
  1. WimPatch.exe create --base <基础WIM文件> --target <更新后的WIM文件> --out <输出补丁文件> --version <版本号> [选项]
复制代码
  • 必须指定 --version版本参数(遵循 SemVer规范),此参数来确定链式补丁的应用顺序。强烈建议每次生成新补丁时,递增版本号
  • 路径中包含空格的文件,需要用双引号括起来。
  • 未指定索引时,默认应用所有镜像。
  • 补丁包中的文件差异数据默认使用Zstd算法进行存储压缩,以在压缩效率和速度之间取得最佳平衡。
  • 当使用 --storage bsdiff 时,--preset 参数将被忽略,因为 BSDiff 存储类型不支持压缩算法。
参数说明:

参数
短参数
描述
默认值
  --base
  -b
  基础 WIM 文件路径,指定用于创建增量补丁的基础 WIM 文件,通常是未更新的 WIM 文件。
  必需
  --target
  -t
  更新后的 WIM 文件路径,指定包含更新内容的 WIM 文件,用于与基础 WIM 文件进行比较,生成增量补丁。
  必需
  
  --out
  -o
  输出补丁文件路径,指定生成的增量补丁文件的存储位置。
  必需
  --version
  -v
  补丁文件版本,必须是有效的 SemVer 格式(如 1.0.0)。
  
  必需
  --author
  -a
  补丁文件作者,用于标识创建该补丁的用户或团队。
  
  unknown
  --name
  -n
  补丁文件名称,用于标识补丁文件,默认自动生成(格式:基础镜像文件名-patch-v版本号)。
  
  自动生成
  --description
  -d
  补丁文件描述,用于说明补丁的作用和影响。
  无
  --index
  -i
  WIM 文件中的镜像索引(指定此参数时,会同时应用于基础和目标文件,此参数与单独指定基础/目标索引的参数互斥)。
  -
  --base-index
  无
  基础 WIM 文件中的镜像索引(必须与--target-index同时指定,与--index互斥)。
  -
  --target-index
  无
  更新后的 WIM 文件中的镜像索引(必须与--base-index同时指定,与--index互斥)。
  
  -
  --compress
  -c
  补丁WIM文件压缩算法: None, Xpress, Lzx 。
  Lzx
  --storage
  -s
  补丁文件的存储类型:• Full:完整存储,速度快但文件大;
   •  Zstd:Zstd算法差异存储,平衡大小和速度;
   •  Bsdiff:Bsdiff算法差异存储,文件最小但速度慢。
  
  Zstd
  --preset
  -p
  压缩预设级别:
   •  Fast:快速压缩,处理速度快但压缩率较低;
  • Medium:中等压缩,平衡速度和压缩率;
  • Best:最佳压缩,高压缩率但处理速度较慢;
  • Extreme:极限压缩,最高压缩率但处理速度最慢。
  
  Medium
  --exclude
  -e
  从补丁文件中排除的文件路径,可多次指定参数。
  
  无
示例:
  1. WimPatch.exe create -b "D:\base-v1.0.0.wim" -t "D:\base-v1.1.0.wim" -o "D:\base-patch-v1.1.0.wim" -v 1.1.0 -a "FirTech" -n "1.0.0(patch01)" -d "更新系统默认配置文件和壁纸资源。调整了休眠模式的默认计时器设置。"
复制代码

应用补丁

应用补丁

应用补丁

应用补丁到基础 WIM 文件,生成更新后的 WIM 文件。
  1. WimPatch.exe apply --base <基础WIM文件> --patch <补丁文件> --target <目标WIM文件> [选项]
复制代码
  • 未指定索引时,默认应用所有镜像。
参数说明:
参数
短参数
描述
默认值
  --base
  -b
  原始WIM镜像文件路径
必需
  --patch
  -p
  补丁文件路径
必需
  --target
  -t
  应用补丁后的输出镜像路径
必需
  --index
  -i
  基础 WIM 文件中的目标镜像索引(仅对该索引应用补丁。若不指定,将尝试匹配补丁包内所有卷)
  
匹配
  --exclude
  -e
  从补丁文件中排除的文件路径 (可以指定多个)
  

  --force
  -f
  强制应用补丁,跳过基础卷的内容校验。警告:可能导致映像损坏。
  

示例:
  1. WimPatch.exe apply -b "D:\base-v1.0.0.wim" -p "D:\base-patch-v1.1.0.wim" -t "D:\target-v1.1.0.wim"
复制代码

创建补丁

创建补丁

合并补丁

合并多个增量补丁文件为一个综合补丁文件。
  1. WimPatch.exe merge <补丁文件1> <补丁文件2> ... --out <输出补丁文件>
复制代码
参数说明:
参数
短参数
描述
默认值
--out
-o
输出合并后的补丁文件路径
必需
示例:
  1. WimPatch.exe merge "D:\base-patch-v1.1.0.wim" "D:\base-patch-v1.2.0.wim" -o "D:\base-patch-v1.2.0-merge.wim"
复制代码

查看补丁信息

显示补丁文件的详细信息。
●       显示补丁文件的版本、作者、名称、描述等信息
●       可选以 XML 格式输出详细信息
  1. WimPatch.exe info <补丁文件> [选项]
复制代码
参数说明:

参数
短参数
描述
默认值
--xml
-x
以XML格式输出补丁信息

示例:
  1. WimPatch.exe info "D:\base-patch-v1.1.0.wim"
复制代码
清理挂载点
清理无效的 WIM 挂载点。
  1. WimPatch.exe clean
复制代码
全局选项
参数
短参数
描述
默认值
--buffer-size
指定缓冲区大小(单位:字节)
65536
--debug
调试模式,输出调试信息到控制台
--language
设置程序语言 (en, zh-cn, zh-tw, ja-jp)
自动识别
--scratchdir
指定临时目录路径,用于存储中间文件和挂载点
系统临时目录
技术说明补丁
创建/应用工作原理
WimPatch 使用 Windows 映像 API (WIMGAPI) 来处理 WIM 文件。
创建补丁 (Create) 流程:
1. 挂载基础镜像: 挂载基础 WIM 文件中的指定镜像卷(只读)。
2. 挂载目标镜像: 挂载更新后的 WIM 文件中的指定镜像卷(只读)。
3. 对比文件差异: 遍历两个挂载点,对比文件内容、属性和元数据,并调用 Zstd/BSDiff 算法计算文件级的二进制差异(Delta)。
4. 生成补丁数据: 将步骤 3 生成的所有差异数据和元信息压缩,写入到输出补丁文件 (`.wim`) 中。
5. 卸载清理: 卸载并清理基础镜像和目标镜像的挂载点。

应用补丁 (Apply) 流程:
1. 准备可写基线: 将原始基础 WIM 文件中的目标镜像复制到临时目录,并以读写(ReadWrite)模式挂载。
2. 挂载补丁: 挂载待应用的补丁文件(只读)。
3. 应用差异: 遍历补丁文件中的数据,将补丁差异数据应用到步骤 1 中挂载的可写基础镜像上。
4. 提交更改: 将所有已应用的更改和文件差异提交(Commit)到挂载点对应的临时 WIM 文件中。
5. 卸载清理: 卸载基础镜像的临时副本和补丁文件的挂载点。
6. 导出目标 WIM:将步骤 4 提交后的临时 WIM 文件(即已打好补丁的镜像)导出到用户指定的目标 WIM 文件位置。

注意事项
1. 操作 WIM 文件可能需要管理员权限
2. 处理大型 WIM 文件时,建议确保有足够的磁盘空间和内存
3. 命令行环境:请通过命令行(CMD/PowerShell)启动程序。从资源管理器直接双击运行时,程序将自动退出。

许可证
Apache License 2.0

下载
WimPatch-V1.0.0.zip (1.52 MB, 下载次数: 28)
 楼主| 发表于 9 小时前 | 显示全部楼层
本帖最后由 834772509 于 2025-11-15 18:39 编辑

占楼备用,说下应用场景:假设WinPE更新了部分配置和软件,无需全量更新PE发布,可使用本工具创建增量更新补丁,然后对PE的wim文件打补丁即可。
回复

使用道具 举报

发表于 8 小时前 | 显示全部楼层
感谢分享!
回复

使用道具 举报

发表于 4 小时前 | 显示全部楼层
感谢楼主辛苦提供分享!
回复

使用道具 举报

发表于 4 小时前 来自手机 | 显示全部楼层
这想法以前有过,本地处理更新,可能环境更复杂,比直接整体下载可能更容易失败。点赞
回复

使用道具 举报

发表于 3 小时前 | 显示全部楼层
下回来学习试用下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-11-19 23:38

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表