【问题标题】:How do you compile a HTML Help Workshop project inside a Docker container?如何在 Docker 容器中编译 HTML Help Workshop 项目?
【发布时间】:2019-06-29 09:06:40
【问题描述】:

当我尝试在安装了 Visual Studio 构建工具的 mcr.microsoft.com/windows/servercore:1809 容器中编译 HTML Help Workshop 项目时收到此错误。

PS C:\> & 'C:\Program Files (x86)\HTML Help Workshop\hhc.exe' test.hhp
HHC5010: Error: Cannot open "c:\test.chm". Compilation stopped.

即使是这个最小的测试项目也无法编译,并输出相同的错误。

[OPTIONS]
Compiled file=C:\test.chm

[FILES]

我注意到 Build Tools 并没有安装所有文件 ls 'C:\Program Files (x86)\HTML Help Workshop',所以我也尝试在我的桌面上用我的 HTML Help Workshop 版本替换它,但这也没有用。

我想知道是否有办法在 Docker 中编译 HTML Help Workshop 项目。

【问题讨论】:

    标签: docker html-help-workshop


    【解决方案1】:

    我不敢相信!!!!我让它与mcr.microsoft.com/windows:1903一起工作!所以总而言之,HTML Help Workshop 在 Windows Servercore 中不起作用,但在 Windows 容器中起作用。

    如果您想使用 HTML Help Workshop,这里有一个 dockerfile 示例:

    FROM mcr.microsoft.com/windows:1903
    
    ADD https://aka.ms/vs/16/release/vs_buildtools.exe vs_buildtools.exe
    RUN .\vs_buildtools.exe --quiet --norestart --nocache --wait \
        --add Microsoft.VisualStudio.Component.VC.ATLMFC
    RUN del vs_buildtools.exe
    

    在容器内使用此命令编译帮助项目:

    "C:\Program Files (x86)\HTML Help Workshop\hhc.exe" path\toProject.hhp
    

    注意:这仅适用于英语帮助文件。与 Servercore 不同,Microsoft 不会发布具有本地化 Windows 版本的容器,而且我还没有找到在 Docker 容器中更改系统区域设置的方法。其他语言的帮助项目使用上述方法会导致编码错误。

    【讨论】:

      【解决方案2】:

      要使其与 servercore:1809 或 ltsc2019 一起使用,您必须将 dll itss.dllitircl.dll 添加到容器 syswow64 文件夹并使用 regsrv32 注册。

      这些文件可以在您的 Windows-10 安装中的 windows\syswow64 文件夹中找到。

      #add missing dlls to run html help workshop on ltsc2019 container
      COPY .\itss.dll C:\Windows\SysWOW64\itss.dll
      COPY .\itircl.dll C:\Windows\SysWOW64\itircl.dll
      
      RUN C:\Windows\SysWOW64\regsvr32.exe C:\Windows\SysWOW64\itss.dll
      RUN C:\Windows\SysWOW64\regsvr32.exe C:\Windows\SysWOW64\itircl.dll
      
      

      【讨论】: