繁体   English   中英

HTMLHelp编译器可从命令行完美运行,但不能从脚本或批处理文件运行

[英]HTMLHelp compiler works perfectly from command line but not run from a script or batch file

我正在尝试从脚本运行Windows帮助文件编译器( hhc.exe ),但是它显示出非常意外的行为。

当我使用hhc pathtohelpproject.hpp从cmd.exe运行它时,将按预期方式编译帮助文件。 但是,从具有相同工作目录的python调用完全相同的命令会导致程序返回0并且没有输出。

但这变得更加奇怪:我创建了一个批处理文件runhhc.bat

hhc "pathtohelpproject.hpp"

我通过调用call runhhc.batstart runhhc.batrunhhc.bat从python脚本runhhc.bat

所有这些都导致相同的行为。 但是,使用start runhhc.bat ,在hhc返回后cmd实例仍处于打开状态,因此我尝试再次手动输入命令,但没有成功。 但是,当我在新近手动打开的cmd中输入命令时,该命令也无效! 实际上,它只有在我关闭脚本打开的cmd后才开始起作用。

这种奇怪行为的解释可能是什么? 以及如何无论如何从脚本运行编译器?

完全取决于hhc.exe,仅此而已。 诀窍是在%ERRORLEVEL%运行后查看它。 尽管成功,它仍返回“ 1”。 如果hhc.exe运行与其他内容隔离开来,则可以在自定义命令中使用此命令警告用户虚假。 HHC.exe使用的是HHA.dll。 关于HHA.dll信息尚未发布。 Microsoft根据保密协议(NDA)将HHA接口信息授予已批准的帮助ISV。

D:\_working>"C:\Program Files (x86)\HTML Help Workshop\hhc" foobar.hhp
Microsoft HTML Help Compiler 4.74.8702

Compiling d:\_working\foobar.chm

...

Compile time: 0 minutes, 1 second
22      Topics
87      Local links
2       Internet links
0       Graphics

Created d:\_working\foobar.chm, 305,338 bytes
Compression decreased file by 53,639 bytes.

D:\_working>echo %errorlevel%
1

要解决此问题并继续,您需要在批处理文件中添加if not %errorlevel% 1 exit /B 1if not %errorlevel% 1 exit /B 1

@echo off
REM -----------------------------------------
REM batch file  is located in D:\_batch
REM HH project file is located in D:\_working
REM -----------------------------------------
cd ..\_working
echo '//--- HH Compiler start --------------------------------------
"C:\Program Files (x86)\HTML Help Workshop\hhc" foobar.hhp
echo '//--- HH Compiler end   --------------------------------------
echo '//--- errorlevel -------------------------------------------
echo %errorlevel%
echo '//------------------------------------------------------------
if not %errorlevel% 1 exit /B 1

和一个Python脚本调用此批处理:

print ("*******************************")
print ("We compile a CHM help file  ...")
print ("*******************************")
# First import the 'ctypes' module. ctypes module provides C compatible data types and allows calling functions in DLLs or shared libraries.
import ctypes  # An included library with Python install.
# ctypes.windll.user32.MessageBoxW(0, "Open CHM", "Your title", 1) # OK only
messageBox = ctypes.windll.user32.MessageBoxA
# documentation: https://msdn.microsoft.com/en-us/library/windows/desktop/ms645505(v=vs.85).aspx
returnValue = messageBox(None,"Compile Help Module (CHM) now?","CHM and Python",1) # 1=OK Cancel, 2=Cancel, Retry, Ignore

if returnValue == 1:
    print("Pressed OK")
    # How to compile a chm file in Python?
    # ---------------------------------
    import os   
    os.system("D:/_batch/run-hhc.bat")

elif returnValue == 2: 
    print("user pressed cancel button!")

在此处输入图片说明

您可能对从python脚本调用CHM感兴趣:

# How to open a chm file in Python?
# ---------------------------------
# os.system("hh.exe D:/UserData-QGIS-Python/Projekte/ConnectChm/CHM-example.chm")
import os 
os.system("hh.exe D:/UserData-QGIS-Python/Projekte/ConnectChm/CHM-example.chm::/garden/garden.htm") 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM