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

Posted

技术标签:

【中文标题】在 C# 中打开 CHM(帮助文件)【英文标题】:Open CHM (help file) in C# 【发布时间】:2011-08-30 22:41:18 【问题描述】:

我正在尝试用 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 你想从网络路径打开文件吗?那么它应该是@"\\ServerName\Path\FileName" 并且您必须获得授权并具有权限。 @fardjad:你能把你的 cmets 放到一个答案中吗? 【参考方案1】:

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

【讨论】:

【参考方案2】:

你可以使用 -

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文件夹中找到反编译的内容。

【讨论】:

如何在相同的win表单中显示帮助?【参考方案3】:

根据要求将我的 cmets 添加到答案中:

第一个语句中的文件名似乎不正确,但是第二个语句中的文件名似乎不正确 除非文件被锁定、不存在或您无权访问该文件,否则应该可以正常工作。如果要 ShellExecute 文件,则应使用 System.Diagnostics.Process 类,但如果要提取 CHM 的内容,由于已编译和格式化,因此无法像纯文本文件一样读取。 看看这些链接:

Decompiling CHM (help) files with C#

CHM Help File Extractor

【讨论】:

【参考方案4】:

这样做很简单

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

【讨论】:

这里有一条评论。通过使用这种方法,您可以打开特定主题的帮助。但是,此方法将锁定 chm 文件,直到您关闭可执行文件。关闭chm文件没关系,文件将被永远锁定。如果需要更新 chm 文件,最好使用 Process.Start 方法。您将无法再打开特定主题,但至少,您可以根据需要更新文件。就我而言,我必须通过下载新版本来更新帮助文件。如果我之前打开过帮助文件,我将无法再更新它。【参考方案5】:
        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);              
        

【讨论】:

【参考方案6】:
 Help.ShowHelp(this, AppDomain.CurrentDomain.BaseDirectory+"\\test.chm", HelpNavigator.Topic, "Welcome.htm");

欢迎是 chm 文件中欢迎年龄的 id

【讨论】:

【参考方案7】:

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

【讨论】:

请阅读***.com/help/how-to-answer 并改进您的答案。尝试解释为什么您的代码与问题不同。

以上是关于在 C# 中打开 CHM(帮助文件)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 c# WPF 打开 chm 文件中的特定页面

C# 使用 HelpProvider 控件调用帮助文件

VC++调用HtmlHelp打开chm帮助文档(附源码)

帮助文件格式的未来方向

电脑弹出不能打开文件secedit.chm怎么办?

.chm文件打不开或打开后内容无法显示