在C#中打开CHM(帮助文件)

11

我正在尝试在C#中打开帮助文件(chm扩展名)。

File.Open(@"//help.chm",FileMode.Open, FileAccess.Read, FileShare.Read);

FileStream fileStream = new FileStream(@"c:\help.chm", FileMode.Open);

不起作用 :(


它无法打开文件,或者出现错误:UNC路径应该是\server\share的形式。 - Bodo
第一条语句中的文件名似乎不正确,但第二条语句应该可以正常工作,除非文件被锁定、不存在或您没有访问该文件的权限。 - fardjad
打开文件后,您必须从FileStream对象中读取内容。我不确定,但似乎您想要ShellExecute文件,如果是,则这与fileStream对象完全无关。请考虑使用“System.Diagnostics.Process”类。 - fardjad
我正在尝试按照http://www.csharp-examples.net/filestream-open-file/的方式进行操作。那么打开此帮助文件的最简单方法是什么? - Bodo
1
@fardjad:你能把你的评论写成答案吗? - ChrisWue
显示剩余5条评论
7个回答

27
你可以使用 -
System.Windows.Forms.Help.ShowHelp(Control, String)

假设你正在一个表单/控件中

Help.ShowHelp(this, "file://c:\\helpfiles\\help.chm");

ShowHelp方法还提供了重载函数,可以转到编译的HTML帮助文件中特定主题和帮助页面。

在MSDN上阅读System.Windows.Forms.Help.ShowHelp

反编译CHM文件

只需在命令提示符中执行以下命令即可。

hh.exe -decompile <target-folder-for-decompiled-content> <source-chm-file>

例如:

hh.exe -decompile C:\foo\helpchmextracted help.chm
执行上述命令后,您应该在C:\foo\helpchmextracted文件夹中找到反编译内容。

如何在同一窗体中显示帮助? - VJOY

6
        string helpFileName = @"c:\help.chm";
        if (System.IO.File.Exists(helpFileName))
        {
            Help.ShowHelp(this, helpFileName );                
        }

如果这不起作用,请尝试

        if (System.IO.File.Exists(helpFileName))
        {
            System.Diagnostics.Process.Start(helpFileName);              
        }

2
根据请求,我在答案中添加了我的评论:
第一条语句中的文件名似乎不正确,但是第二条语句应该可以工作,除非文件被锁定、不存在或者您没有访问该文件的权限。如果您想要ShellExecute该文件,则应使用 System.Diagnostics.Process 类,但是如果您想要提取 CHM 的内容,因为它是编译和格式化的,所以不能像普通文本文件那样读取。请参阅以下链接: 使用 C# 反编译 CHM (帮助) 文件 CHM 帮助文件提取器

1

好的,第二行应该没问题,如果文件不存在,它应该会抛出一个异常。你需要更具体地说明你所说的“它不起作用”是什么意思。


1
 Help.ShowHelp(this, AppDomain.CurrentDomain.BaseDirectory+"\\test.chm", HelpNavigator.Topic, "Welcome.htm");

欢迎是chm文件中欢迎页的id。

1

System.Diagnostics.Process.Start(@"c:\help.chm");


请阅读 http://stackoverflow.com/help/how-to-answer 并改进您的回答。尝试解释您的代码与问题有何不同之处。 - Ricardo Pontual

0

只需简单地执行此操作

Help.ShowHelp(ParentForm, "chmFile.chm", "link.htm");


这里有一个注释。使用这种方法,您可以打开特定主题的帮助,这很好。但是,此方法将锁定chm文件,直到关闭可执行文件为止。无论您是否关闭chm文件,该文件都将永久锁定。如果需要更新chm文件,则最好使用Process.Start方法。您将不再能够打开特定主题,但至少,如果需要,您可以更新文件。在我的情况下,我必须通过下载新版本来更新帮助文件。如果我之前已经打开了帮助文件,我将无法再次更新它。 - Alexandru Dicu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接