我已经创建了一个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文件嵌入到应用程序中,并在不将它们写入磁盘的情况下访问它们?如果那是不可能的,我认为不是这样,有没有比我现在更好的方式呢?
感谢您的帮助!
最诚挚的问候,
伊恩
答案 0 :(得分:1)
应用程序通常使用某种安装程序或zip存档。这两种方法都允许用户接收应用程序和帮助文件,而无需单独提供。
答案 1 :(得分:1)
在项目属性-资源下,添加文件资源,即: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文件的属性中,“构建操作”必须为“内容”。
答案 2 :(得分:0)
data.Count() - 1
我不知道为什么那个 - 1在那里,我找到了解决方案,所以我就把它留在那里。当我删除它时,程序运行,写出该文件,然后可以阅读它以获取帮助文档,而不会丢失丢失的HHC的投诉。一切都很好。感谢大家的建议!
答案 3 :(得分:0)
所以解决方案是:
1)将chm文件复制到所需的项目文件夹
2)在Visual C#解决方案资源管理器中将现有项添加到项目(您的chm文件)
3)选择Project菜单,然后选择项目属性
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);
}