HTMLHelp加载错误的CHM文件可能需要解决的问题?

时间:2012-08-03 03:08:02

标签: .net chm

我从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)时才有效。用静态加载API的VB等语言编写的应用程序无法做到这一点。“

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

编辑:

详细说明:HTMLHelp中存在一个已知问题,微软已于2001年承认,但从未解决过这个问题。

在我的情况下,我有两个帮助文件,“... \ Danish \ Help.chm”和“... \ English \ Help.chm”。我的程序会打开一个或另一个,具体取决于用户选择的语言。问题是如果用户显示帮助信息,然后切换语言,然后再次点击F1,程序会尝试打开另一个帮助文件,但帮助支持代码会重新打开以前打开的帮助文件。

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

1 个答案:

答案 0 :(得分:0)

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

作为一个不幸的副作用,即使在用户关闭帮助窗口之后,该过程依然存在。但是我确实在开始新程序之前杀死了这个过程,当我的主程序正在关闭时。