下载了一份接口文档,压缩包解开是个 .chm 文件,双击打开右边一片空白,状态栏写着「已取消该网页的导航」。换台电脑打开又正常。这不是文件坏了,是 Windows 对来源不明的 CHM 多了一层拦截。

CHM 到底是什么

Compiled HTML Help,微软在上世纪九十年代推的联机帮助格式。把一堆 HTML、图片、索引项打包成一个文件,内部用 LZX 压缩,再配一个目录树和全文搜索。那个年代的软件文档、离线版开发手册、工业设备说明书基本都是这个格式。

空白页怎么解决

文件从网络下载后会带一个「来自其他计算机」的标记,Windows 对带标记的 CHM 限制脚本执行,导航就失败了。右键文件看属性,常规选项卡最下面如果有解除锁定,勾上确定,再打开就正常。这是最常见的解法,不用改注册表。

还有几种打不开的情况

路径里有中文或特殊字符时,老版本 hh.exe 会解析失败,把文件挪到纯英文目录再试。双击没反应,用命令行指定打开:hh.exe 加文件路径。文件本身损坏的话,7-Zip 可以直接解开 CHM,把里面的 HTML 提取出来用浏览器看。

提取内容比修打开方式更实用

CHM 里的页面都是独立 HTML,加一个 hhc 目录文件,用 7-Zip 解压后能看到完整的目录结构。想转成 PDF 或者放进内部知识库,走提取这条路更快。页面之间的链接是相对路径,整个目录一起搬才不会断链,只拷单个 html 会丢样式和图片。

安全上留个心眼

CHM 支持内嵌脚本和 ActiveX,历史上被当作过攻击载体。来路不明的 CHM,尤其是邮件附件里的,别急着解除锁定打开。先解压看里面有没有 exe、js、vbs 文件,有就别碰。正规厂商的文档不会有这些东西。

现在还用不用它

新项目基本不用了,在线文档站、Markdown 加静态生成才是主流。但老软件的帮助文件、部分财务系统的操作指南还停在 CHM 上,短期内绕不开。手上留一个 7-Zip 和一个浏览器,比装一堆阅读器管用。

转成现代格式的做法

解压得到 index.hhk 和 hhc 目录文件,用脚本读出目录树,再把每个 html 转成 Markdown,图片一起抽出来。这一步做完就能塞进 Git 仓库或者语雀之类的知识库,搜索和协作都比原来的 CHM 好得多。

取舍:只是自己看,解除锁定就够;要长期保存和检索,早点提取成 HTML 或 PDF,别指望十年后还有工具能正常打开它。