如何在应用程序中嵌入CHM文件

问题描述 投票:1回答:4

大家好,我刚刚完成了已经工作了一段时间的应用程序。可能是迄今为止我做过的最复杂的事情。因此,我认为我会去制作一个帮助文档,以向用户提供一些有关它的信息。

我已经创建了CHM文件,并设置了helpProvider,但是现在我的问题是如何在我的应用程序中包含该文件以及HHC(目录)文件。我觉得要求用户自己复制两个文件会很痛苦,所以我试图将它们存储为嵌入式资源,然后让应用程序将它们写到当前目录中。

当前,这是我正在使用的代码:

var data = Properties.Resources.RERHelp;
        using (var stream = new FileStream("RERHelp", FileMode.Create))
        {
            stream.Write(data, 0, data.Count() - 1);
            stream.Flush();
        }
        helpProvider1.HelpNamespace = Directory.GetCurrentDirectory() + "\\RERHelp\\RERHelp.chm";

这很好,但是这意味着我必须运行两次,一次将数据设置为Properties.Resources.RERHelp,另一次用于目录文件。有一个更好的方法吗?也许可以通过某种方式将CHM和HHC文件嵌入到应用程序中,并在不将其写入磁盘的情况下进行访问?如果这是不可能的(我认为这是不可能的),那么有比现在更好的方法吗?

感谢您的帮助!

最好的问候,

伊恩

c# embedded-resource chm
4个回答
1
投票

应用程序通常使用某种安装程序或zip存档。两种方法都允许用户接收应用程序帮助文件,而不必分别提供它们。


0
投票

哦,哇。原来我也不需要HHC文件。我以为是这样的,因为当我打开帮助对话框时,它会说找不到目录content.hhc文件。由于某种原因,我认为除了CHM之外,它还需要它。我最初只是制作了一种将资源传递给它的方法,以防止冗余,然后对CHM调用了一次,对HHC调用了一次,但是后来我注意到了这一点:

data.Count() - 1

我不确定为什么-1在那里,我找到的解决方案就是它了,所以我就把它留在那里了。当我删除该文件时,该程序运行并写出该文件,然后可以读取该文件以获取帮助文档,而不会抱怨缺少HHC。一切都很好。谢谢大家的建议!


0
投票

因此解决方案是:1)将chm文件复制到所需的项目文件夹2)在您的Visual C#解决方案资源管理器中,将现有项目添加到项目(您的chm文件)中。3)选择项目菜单,然后选择项目属性。4)添加现有资源。5)添加以下代码,然后连接到您的帮助菜单项。

   private void WORKING_HELP()
    {
        string filePath = Directory.GetCurrentDirectory() + "\\BlitzHelp.chm";

        try
        {
            //Check if already exists before making
            if (!File.Exists(filePath))
            {
                var data = Properties.Resources.BlitzHelp;
                using (var stream = new FileStream("BlitzHelp.chm", FileMode.Create))
                {
                    stream.Write(data, 0, data.Count());
                    stream.Flush();
                }
                MessageBox.Show("file made");
            }
        }
        catch
        {
            //May already be opened

        }

        Help.ShowHelp(this, filePath);
    }

0
投票

在您的项目属性-资源下,添加文件资源,即:textmag.chm。我将文件类型文本用于chm的

private void HelpToolStripMenuItem_Click(object sender, EventArgs e)
    {
        string helpFileName = "";
        try
        {
            helpFileName = System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, "Resources") + @"\TextMag.chm";
            Help.ShowHelp(this, helpFileName);

        }
        catch (Exception ex)
        {

            string xxx = ex.Message;
        }

    }

重要:在资源下的chm文件的属性中,“构建操作”必须为“内容”。

© www.soinside.com 2019 - 2024. All rights reserved.