2

从 2001 年开始,我显然在 HTMLHelp 中遇到了这个错误。(他们还没有修复它,但至少他们记录了它。)

“BUG:HTMLHelp() 打开错误的帮助文件” http://support.microsoft.com/kb/267962/en-us

他们建议的“修复”是让我重命名我的 CHM 文件。但我真的不想那样做。

这里有更多关于它的信息:“相同的 CHM 打开错误” http://kb.helpwaregroup.com/ms-html-help/hh-faq#TOC-The-Same-CHM-Opens-Bug

“最简单的解决方法是在打开每个 CHM 之前调用 HHCtrl.OCX 库上的 FreeLibrary() 然后 LoadLibrary()。

仅当您的应用程序使用 LoadLibrary 动态加载 HH API (HHCtrl.OCX) 时,第二个解决方案才有效。用 VB 等语言编写的静态加载 API 的应用程序将无法做到这一点。”

我的程序是 .Net,我正在使用 System.Windows.Form.Help.ShowHelp()。是否有可能通过某种方式卸载 HHCtrl.OCX 来作弊,例如使用 p/Invoke?还有其他建议吗?

编辑:

详细说明:HTMLHelp 中存在一个已知问题,Microsoft 已在 2001 年承认该问题,但从未着手修复。

就我而言,我有两个帮助文件,“... \Danish\Help.chm”和“... \English\Help.chm”。我的程序根据用户选择的语言打开一个或另一个。问题是,如果用户显示帮助信息,然后切换语言,然后再次按 F1,程序会尝试打开另一个帮助文件,但帮助支持代码会重新打开之前打开的帮助文件。

有一个已知的解决方法,但对我来说,它似乎只适用于 C++ 程序,而我的程序是 .Net。所以我问是否有人知道如何将这种变通方法或其他修复方法应用于.Net 程序。

4

1 回答 1

0

这可能有点激烈,但我最终要做的是在我想显示 CHM 帮助文件时启动一个新的 Windows 进程。小进程程序是一个 WinForms 程序,但它不显示它的表单。它只包含“Help.ShowHelp(this, chmFileName);” 在其构造函数中声明。(文件名作为参数传递给小帮助文件处理程序。)

作为一个不幸的副作用,即使用户关闭了帮助窗口,该过程仍然存在。但是我确实在开始一个新进程之前终止了该进程,并且当我的主程序关闭时。

于 2014-01-23T00:14:04.927 回答