c# 无法原生编译 chm,必须调用 windows 官方 hhc.exe;关键在于正确生成编码(如 encoding.default)、路径(相对路径、无盘符)和结构(含 options[infotypes] 等节)的 .hhp 工程文件。

直接说结论:C# 本身不提供原生 CHM 编译能力,HtmlHelp Workshop(即 hhc.exe)才是唯一可靠、被 Windows 官方支持的 CHM 编译器;C# 只能作为“调用方”或“内容生成器”,不能替代它。
CHM 编译必须依赖 hhc.exe,不是 .NET 功能
CHM 是微软定义的封闭二进制格式,其编译逻辑(如索引生成、关键字映射、HTML 压缩、HHK/HHK 文件解析)完全由 hhc.exe 实现。.NET 没有内置 API 能替代它——所有所谓“纯 C# CHM 生成库”要么是包装 hhc.exe,要么只生成中间 HTML 文件,最终仍需调用它。
-
hhc.exe来自旧版 HTML Help Workshop(微软已停止更新,但仍在 Win10/Win11 上正常运行) - 安装后路径通常是:
C:\Program Files (x86)\HTML Help Workshop\hhc.exe - 必须确保目标机器(或构建机)已安装该工具,否则 C# 进程调用会失败并抛出
System.ComponentModel.Win32Exception: The system cannot find the file specified
用 C# 调用 hhc.exe 编译 CHM 的关键步骤
核心是构造合法的 .hhp 工程文件,再用 Process.Start() 启动 hhc.exe。容易出错的点不在 C# 代码本身,而在 .hhp 结构和路径处理。
本文档主要讲述的是maven使用方法;Maven是基于项目对象模型的(pom),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven将你的注意力从昨夜基层转移到项目管理层。Maven项目已经能够知道 如何构建和捆绑代码,运行测试,生成文档并宿主项目网页。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
- 必须用
Encoding.Default或Encoding.GetEncoding(932)(日文系统)保存.hhp,否则中文路径/标题在hhc.exe中会乱码(UTF-8 不被识别) -
[FILES]下列出的 HTML 文件路径必须是相对路径(相对于.hhp所在目录),且不能含盘符或..\ - 调用时建议显式设置
ProcessStartInfo.WorkingDirectory为.hhp所在目录,避免路径解析错误 - 示例调用片段:
var start = new ProcessStartInfo("hhc.exe", "MyHelp.hhp") { WorkingDirectory = @"C:\help\src", UseShellExecute = false, RedirectStandardOutput = true }; var p = Process.Start(start);
生成 .hhp 文件比写 C# 更容易翻车
.hhp 看似简单,但字段顺序、空行、编码、注释位置都会导致 hhc.exe 静默失败或生成无索引/无搜索的 CHM。官方文档极简,实际要靠试错。
立即学习“前端免费学习笔记(深入)”;
- 必须包含且仅有一个
[OPTIONS]、[FILES]、[INFOTYPES](即使为空)节 -
Compiled file=必须是 CHM 输出路径,且不能与.hhp同名(比如MyHelp.hhp→MyHelp.chm) - 如果启用全文搜索(
Full-text search=Yes),必须同时提供[ALIAS]和[MAP]节,否则编译通过但搜索不可用 - 图标、默认页面、窗口定义等都需在
[OPTIONS]中显式声明,缺一不可(例如Default Window=main)
真正卡住人的从来不是 C# 怎么调用,而是 .hhp 里一个空格、一行多余注释、或路径用了正斜杠就让 hhc.exe 默默跳过整个章节。建议先手写一个最小可运行 .hhp 并成功编译,再用 C# 生成它。










