【问题标题】:Open CHM (help file) in C#在 C# 中打开 CHM(帮助文件)
【发布时间】:2017-03-10 21:10:55
【问题描述】:

我正在尝试用 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 放到一个答案中吗?

标签: c# file chm


【解决方案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");

          【讨论】: