
简介CHMCompiled Help Manual是微软推出的一种帮助文件格式常用于软件帮助文档可将大量HTML页面压缩为单一文件便于分发和离线浏览但编译后的内容对普通用户并不直接可见。这份工具包面向开发者、文档维护者与研究人员专门解决CHM文件无法直接查看原始源代码的问题可将其还原为HTML、图片、样式表、JavaScript等组件方便后续编辑、翻译、检索或重新打包。下载包共4个文件容量仅2.19MB涵盖exe安装程序、htm说明文档、nfo信息文件与dat数据模块安装后通过图形界面即可打开CHM并导出所需内容。目前已有213人学习下载工具包附带的下载说明与使用提示可帮助用户快速了解安装流程与反编译要点尤其适合需要批量处理帮助文档的入门及中高级用户同时引导读者遵守版权法规避免对商业软件进行未经授权的拆解。 说实话我做文档处理这么多年接得最多的一类需求就是“这个 CHM 能不能拆开”。无论是想提取里面的图片素材还是想把老旧的帮助文档改成网页版甚至只是想批量转成 PDF第一步基本都是同一件事CHM 反编译。很多人一听到“反编译”就觉得高深其实放在 CHM 上真没那么玄乎底层就是个文件拆包加内容还原的事。这篇文章我把自己反复用过、踩过坑之后沉淀下来的完整流程、工具对比、实操记录和排错经验全部写出来。适合谁看凡是手头有 CHM 电子手册、课件、软件帮助文档想提取内容或二次加工的人这篇都能直接照着做。1. 动手之前CHM 里面到底是什么1.1 CHM 的真实面目CHM 的全称是 Compiled HTML Help说白了一个“把一堆网页打包成一个文件”的归档容器。Windows 平台上大量软件说明书、SDK 文档、企业内部培训教材都用这种格式表面上是一个孤零零的单文件实际内部是几十个甚至上百个 HTML 页面加上图片、CSS、JavaScript以及其他辅助资源。这里有个关键点决定了后续所有操作思路CHM 不是普通的 ZIP 压缩包。它使用的是微软私有定义的 ITSS 存储格式文件内容区域再用了 LZX 压缩算法做压缩所以用常规压缩软件直接改后缀名、双击打开往往只能看到乱码或者根本打不开。这也是为什么必须借助专门工具来“反编译”而不是简单解压。把思路理清了后面操作就很顺。反编译本质上做两件事第一把 ITSS 容器内部的目录结构解析出来第二将压缩过的二进制数据还原成原始 HTML、图片等独立文件。理解了这一步你就能明白为什么有的工具提取速度快但丢目录结构有的工具虽然慢一点但把导航信息也一并还原。1.2 反编译到底在解决什么问题我遇到过三种典型需求基本可以覆盖 90% 的 CHM 反编译场景。第一种是文档再编辑。CHM 是编译产物不等于源工程文件夹普通人拿不到原始 HTML 和图片就会寸步难行反编译就是把源工程里那一套文件重新“物归原主”。第二种是素材复用许多老产品文档里的架构图、流程图做得非常规范用反编译提取出来直接塞进新文档里效率极高。第三种是格式转换要把 CHM 转成 PDF 或挂到在线帮助站前提也是把 HTML 先提出来后续才好统一处理。还有一个很容易被忽略的隐藏价值理解 CHM 的目录结构。如果你恰好需要重新编译 CHM反编译产出的 .hhc 目录文件和 .hhk 索引文件就是现成的骨架省掉重写导航的时间。2. 工具该怎么选三套方案横向对比2.1 方案 A7-Zip 秒开秒提取最快最简单粗暴的方法是用 7-Zip。不需要额外装什么奇奇怪怪的软件电脑上有 7-Zip 就能干。操作方法也简单右键 CHM 文件选择“打开压缩包”或“打开方式”里选 7-Zip 文件管理器。你会看到里面呈现出类似 ZIP 目录的列表选中需要的文件点击“提取”按钮选一个输出目录就完事。这个方案最大的优势是速度和轻量。对于只需要拿几张图片、拷贝一个 HTML 文件的情况比任何专业工具都快。但它有明显的短板一是遇到中文文件名时时不时会出现乱码文件二是它只恢复文件本体不会生成 .hhc 和 .hhk 导航文件丢失了文档的目录结构信息。所以它适合“临时捞东西”不适合“整体搬迁”。2.2 方案 B微软官方 HTML Help Workshop 反编译如果要做完整反编译我最常用的工具是微软官方的 HTML Help Workshop简称 HHW。虽然它已经停止更新多年但作为 CHM 作者维护的原生工具对格式的兼容性最稳。流程非常简单打开 HHW 后点击菜单 File → Decompile弹出窗口里选择要反编译的 CHM 文件然后指定一个输出目录点 OK。整个过程快则几秒、慢则半分钟因为 CHM 一般都不算大实测等待时间完全可以接受。它比 7-Zip 强在两点第一中文文件名处理更准确乱码几率明显更低第二反编译完成之后输出目录里会自动生成一个以文档名命名的 .hhc 文件。这个文件的本质是一份树状目录结构描述有了它后续重新编译或者做在线目录映射都会轻松很多。如果是办公场景下的正经项目需求直接选这个方案基本不出错。2.3 方案 C只用 Windows 自带命令 hh -decompile还有一个很多人不知道的隐藏技能不用装任何软件Windows 自带的 hh.exe 就支持反编译。打开命令行执行类似下面的命令hh.exe -decompile C:\chm_output C:\doc\manual.chm把C:\chm_output换成你希望存放文件的目录把C:\doc\manual.chm换成实际 CHM 文件路径。系统会静默执行没有进度条也没有成功提示跑到指定目录看文件在不在就行。需要格外注意的是这个命令要求输出目录预先存在如果不提前建好命令不会有任何报错你会在目标目录里找不到任何新东西。另外路径如果包含空格记得给路径加英文双引号。这个方案适合临时应急比如在不能乱装软件的公司电脑上做快速提取效果也不错。对比项7-ZipHTML Help Workshophh.exe 命令是否需要安装需安装 7-Zip需安装微软工具无需安装系统自带是否生成 .hhc不生成自动生成不生成中文兼容性有时乱码比较稳定取决于系统编码操作速度最快几秒到半分钟极快静默执行适合场景临时提取素材完整反编译、二次编译无软件环境的应急处理3. 实操记录把一个 CHM 整体拆干净3.1 我的反编译完整现场为了把流程讲细我拿一份真实的 CHM 工程规格说明书做演示文件大概 6MB 左右内含 60 多个 HTML 页面。考虑到后面要改内容再重新打包我选择用 HHW 执行反编译。先新建一个文件夹manual_src打开 HHW依次点击 File → Decompile源文件选择工程规格说明书.chm输出目录指向manual_src点确定。整个过程不到 10 秒就结束了最后文件夹里出现了这样的目录结构manual_src/ ├── 工程规格说明书.hhc ├── 工程规格说明书.hhk ├── index.html ├── section01/ │ ├── overview.html │ ├── architecture.html │ └── images/ │ ├── arch.png │ └── flow.gif ├── section02/ │ └── api.html └── style/ ├── main.css └── highlight.js打开index.html页面正常显示CSS 生效图片能加载右侧的目录树也能通过 .hhc 正常展开。这说明反编译是完整的HTML 之间的相对路径都还保持原样。这就是官方工具的好处只要反编译成功整个站点结构是原封不动搬出来的。3.2 目录结构还原和文件归类技巧反编译完成后文件有时会显得杂乱尤其那些年代久远的 CHMHTML 和图片全堆在同一层特别考验人。我的习惯是第一时间把 .hhc 文件用文本编辑器打开。.hhc 的结构其实是一段带 HTML 标签的树形描绘每个LI里包含OBJECT描述标题和跳转地址。看懂这个文件就能快速掌握文档的组织逻辑。举个例子LIOBJECT typetext/sitemap param nameName value第一章 系统架构 param nameLocal valuechapter01/architecture.html /OBJECT看到Name是显示名Local是实际文件路径就能知道这个文档的层级关系了。如果某个文件在反编译产物中找不到但 .hhc 里有对应记录那多半是文件被遗漏在奇奇怪怪的隐藏目录里回 .hhc 里查一下路径再手动找能省很多事。3.3 从反编译到再次编译成 CHM遇到要修改文档内容再重新打包的情况反编译只是前半程。我继续用 HHW 演示再编译过程新建一个项目选择“使用现有文件创建”把刚才反编译出来的所有 HTML 和图片加入文件清单并把 .hhc 指定为项目的内容文件设置一个默认首页后点击编译。这里有一个细节值得单独写出来如果你需要用代码方式批量重建HHW 也支持命令行编译调用方式大致是C:\Program Files (x86)\HTML Help Workshop\hhc.exe project.hhp只要 .hhp 工程文件里写清楚了[FILES]和[OPTIONS]就可以打成一条脚本执行适合给几十个 CHM 做批量重建的场景。4. 反编译后的常见翻车现场与排查4.1 文件全提取出来但打开 HTML 是乱码这种情况最常见于老式简体中文 CHM。原因不复杂HTML 内部声明的编码与实际编码不一致或者工具在反编译时把字符集判断错乱。我的处理方式分两步第一步用 VSCode 或 Notepad 打开乱码文件看右下角显示的编码。第二步如果是 GB2312/GBK 被识别成西欧字符就把编码切换为“通过编码重新读取”选 GB2312 之后内容正常了再用“保存为 UTF-8”统一转码。对于批量文件更好的做法是用脚本扫描所有 HTML把meta charsetxxx统一替换成UTF-8再配合编辑器批量转码。注意转码之前务必备份一份原文件有些老文档里混了特殊字符转换过程中可能损坏。4.2 图片集体失踪页面全成了“破图”页面反编译出来了打开发现图片位置全是空的白框第一反应可能是图片没提取出来。其实绝大多数情况不是图片丢失而是存放路径变了。CHM 内部打包时图片通常被放在images/一类子目录里如果反编译工具没有完整重建目录结构图片可能会被平铺到根目录而 HTML 里仍然写的是相对路径images/xxx.png自然就加载不到。排查方法在输出目录里全局搜索图片文件名找到真实位置后手动移动文件让目录结构和 HTML 里的引用路径保持一致即可。4.3 hh.exe 反编译没反应目录里啥都没有这个场景我见过太多次。命令行一句话执行完没有任何报错输出目录却干干净净。原因通常在前面提到过目标目录未提前创建命令被静默忽略。另一个原因是路径中的空格没有加引号。正确方式是hh.exe -decompile C:\my output\manual C:\doc files\manual.chm如果确认这两点都没问题但仍然失败可以用 HHW 代替。hh.exe 的兼容性毕竟比不过专用工具老版本算法遇上压缩率高的 CHM 会出现抽取失败换个工具基本能解决。4.4 加密 CHM 无法反编译或提取内容不完整有些企业文档在编译时勾选了保护选项这类 CHM 反编译出来要么报错要么提取的文件不完整。遇到这种情况我建议先确认自己有没有这个文档的合法使用权限。如果本就是工作文档直接向上游要一份源工程文件或未加密版本往往比折腾反编译更省时间。对于受版权保护的内容不要尝试绕过加密走正规授权渠道才是正路。再补一个常见问题速查表日常已经帮了我不少忙现象原因解决方案文件名乱码工具字符集兼容性差换 HHW 重试HTML 打开乱码编码声明与实际不符用编辑器识别 GBK 后批量转 UTF-8图片显示不出来相对路径被破坏全局搜索图片名恢复目录结构hh.exe 无提示失败输出目录不存在或路径有空格先建目录给路径加引号页面样式丢失CSS 文件路径失效保持文件整体目录结构勿单拎文件部分文件提取失败文件被保护或压缩级别异常换工具或走正规授权路径5. 反编译之后还能干什么5.1 反编译的 HTML 批量转 PDF把 CHM 转成 PDF 是高频需求。反编译出 HTML 后有两条路特别顺。一是用浏览器的“打印为 PDF”功能适合页数少的文档二是用命令行工具批量处理适合几百页的大文档。用 wkhtmltopdf 举例在反编译输出目录执行一条循环命令就能把所有 HTML 转成独立 PDFfor file in *.html; do wkhtmltopdf $file ${file%.html}.pdf done转完之后如果想合并成一个 PDF再用 PDF 合并工具把这些文件拼起来全过程不需要在 CHM 格式本身折腾。这个方法比直接找“CHM 转 PDF”专用软件稳定得多因为普通的格式转换工具遇到特殊目录结构时容易崩。5.2 用反编译素材搭一个轻量在线帮助站反编译出来的本身就是一套完整 HTML 站点这意味着只要放上 Web 服务器就能访问。实际操作时把静态文件部署到 Nginx 或对象存储上再默认文档指向 index.html一套在线帮助系统就出来了。如果对目录树有要求可以通过脚本读取 .hhc 文件生成右侧树形导航结构的 JSON再配一个前端组件渲染出来。整个过程的核心数据源不是原 CHM而是反编译得到的 .hhc 文件这再次说明保留导航结构的重要性。我试过一次把 100 多节的内部文档转成在线站半天就能搞定。5.3 反编译后重新定制再打包反编译也能解决“改文档再打包”的问题。比如给旧资料加一个补丁说明、统一替换公司 LOGO、调整 CSS 里的品牌色这些操作直接在反编译出来的 HTML/CSS 文件上改就行改完之后再照着 3.3 节的方法重新编译成 CHM分发出去依然是一个独立文件和原来体验一致。我自己的习惯是把这个流程固化成一套固定脚本反编译 → 改文件 → 替换 CSS → 编译全程不碰手动操作。因为 CHM 编译是一个有标准的流程化过程脚本化之后几乎不会出幺蛾子。最后的实战建议把 CHM 反编译这个技能操练熟之后你会发现它的价值远不止于“拆文件”。很多日常工作本质都是格式转换和内容重组而 CHM 这一类“编译过的文档包”恰好卡在中间不上不下。学会反编译等于拿到了研究这类文档格式的钥匙后面无论是转 PDF、做在线文档、二次编译定制都有了稳固的切入点。我个人强烈建议新手从 7-Zip 开始感受一下拆包的感觉再用 HHW 走一遍全流程整体思路很快就能建立起来。踩过几次坑之后你也会发现这类格式问题难的不是方法而是开头那一下“往哪边使劲”的判断。本文还有配套的精品资源点击获取