成功编译.chm文件后,HTML Help Workshop返回错误

Han*_* H. 5 cmd doxygen html-help-workshop

我现在面临一个相当有线失败后我成功编译.chm文件HTML Help Workshop中hhc.exe.

我用Doxygen创建了我的源代码文档.如果在doxygen文件中启用,则会创建DoxygenGENERATE_HTMLHELP:

如果GENERATE_HTMLHELP标记设置为YES,则doxygen会生成
另外三个HTML索引文件:index.hhp,index.hhc和index.hhk.index.hhp
是一个项目文件,可以在Microsoft的HTML帮助研讨会上阅读(请参阅:
http://www.microsoft.com/en-us/download/details.aspx?id = 211138 ).

之后的Doxygen创建这些文件,我想创建.chm文件HTML Help Workshop中.出于这个原因,我打电话hhc.exe给CMD.之后,我可以打开.chm文件,一切似乎都很好.但是如果我向CMD询问当前的情况errorlevel,它会输出:

"C:\Program Files (x86)\HTML Help Workshop\hhc.exe" index.hhp
Microsoft HTML Help Compiler 4.74.8702

Compiling C:\... folder path ...\index.chm

Compile time: 0 minutes, 0 seconds
37      Topics
346     Local links
12      Internet links
0       Graphics

Created C:\... folder path ...\index.chm, 88,740 bytes
Compression decreased file by 194,682 bytes.

echo %errorlevel%
1
Run Code Online (Sandbox Code Playgroud)

有没有人知道h ...在这里出了什么问题以及如何避免它成功编译但仍然返回错误的问题?我怎样才能找出问题所在而不是错误"1"?

问题是我的构建服务器(TFS2015)返回错误并且构建失败.

Mof*_*ofi 6

HTML Help Workshop安装了2个主要可执行文件:

  1. hhc.exe是HTML帮助编译器的控制台版本.
  2. hhw.exe是HTML帮助编译器的Windows GUI版本.

但HTML帮助项目(hhp)到编译HTML(chm)的编译不是由这两个可执行文件直接完成的.

两者都用于编译hha.dll- HTML帮助作者库 - 通过调用导出的函数HHA_CompileHHP.

该库的导出功能是:

  • EditHhCtrlObject
  • EditHhCtrlScript
  • FreeFilterDIB
  • HHA_CompileHHP
  • LoadFilterImage
  • LoadJpeg

据我所知,Microsoft尚未发布任何文档或这些函数的函数声明.

从一些快速测试hhc.exe来看,函数HHA_CompileHHP具有BOOL返回类型,即int成功返回TRUE,即值1,失败时FALSE,即值0.它看起来像hhc.exe使用此返回值而不将值反转为退出/返回代码.

因此,errorlevel1对成功和0失败.

我做的测试来验证我的假设:

  1. 使用不存在的项目文件名运行HTML帮助编译器:

    hhc.exe index_1.hhp
    
    Run Code Online (Sandbox Code Playgroud)

    无法打开index_1.hhp.

    退出代码分别errorlevel为0.打印此错误消息是hhc.exe因为可以在中找到错误消息hhc.exe.

  2. 在现有输出文件上设置只读文件属性index.chm并运行HTML帮助编译器:

    attrib +r index.chm & hhc.exe index.hhp & attrib -r index.chm
    
    Run Code Online (Sandbox Code Playgroud)

    HHC5010:错误:无法打开"C:...文件夹路径...\index.chm".编译停止了.

    退出代码分别errorlevel为0.打印此错误消息是hha.dll因为只能在此中找到此错误消息hha.dll.

  3. 重命名显式指定的*.htm文件index.hhp并运行HTML帮助编译器:

    ren "file.htm" "renamed file.htm" & hhc.exe index.hhp & ren "renamed file.htm" "file.htm"
    
    Run Code Online (Sandbox Code Playgroud)

    Microsoft HTML帮助编译器4.74.8702

    编译C:...文件夹路径...\index.chm

    HHC5003:错误:编译file.htm时编译失败.

    未编译以下文件:
    file.htm

    退出代码分别errorlevel为0.此错误消息也被打印,hha.dll因为此错误消息也只能在中找到hha.dll.

写入所有错误消息以处理STDOUT而不是STDERR,这是控制台应用程序的典型情况.从来没有分配过0或1的其他值,errorlevel这就是为什么我认为函数HHA_CompileHHP返回一个简单的布尔值.

结论:

必须像往常一样进行相反的操作来评估HTML帮助编译的成功/失败,例如在批处理文件中使用:

"%ProgramFiles(x86)%\HTML Help Workshop\hhc.exe" index.hhp
if not errorlevel 1 exit /B 1
Run Code Online (Sandbox Code Playgroud)

在HTML帮助项目文件(*.hhp文件)在第[OPTIONS]一个日志文件可以使用指定Error log file=...到其中所有输出由消息HHA_CompileHHP被写入附加地将它们打印到STDOUT.

但是在这种情况下,使用Doxygen生成*.hhp文件,将批处理文件中的STDOUT重定向到日志文件会更容易,尽管这也不是真的需要,因为很可能Team Foundation Server正在将消息捕获到日志中.(我没有安装Team Foundation Server.)