簡體   English   中英

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

[英]How to embed CHM file in application

大家好,我剛剛完成了一個我已經工作了一段時間的應用程序。 可能是我迄今為止制作的最復雜的一個。 因此,我想我會 go 並制作幫助文檔,為用戶提供一些信息。

我已經創建了一個 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 文件,並在不將它們寫入磁盤的情況下訪問它們? 如果這是不可能的,我認為不是,有沒有比我現在更好的方法來解決 go?

謝謝你的幫助!

此致,

伊恩

在您的項目屬性 - 資源下,添加一個文件資源,即: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文件的屬性中,Build Action必須是Content。

應用程序通常使用安裝程序,或某種形式的 zip 存檔。 這兩種方法都允許用戶接收應用程序幫助文件,而無需單獨提供它們。

所以一個解決方案是:
1)將您的chm文件復制到所需的項目文件夾
2)在您的 Visual C# 解決方案資源管理器中,將現有項目添加到項目(您的 chm 文件)。
3) Select 項目菜單然后項目屬性。
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);
    }

哦,哇。 原來我也不需要 HHC 文件。 我假設我這樣做了,因為當我打開幫助對話框時,它會說它找不到目錄.hhc 文件。 我認為出於某種原因,除了 CHM 之外,它還需要它。 我最初只是做了一個方法來傳遞資源以防止冗余,並為 CHM 調用了一次,為 HHC 調用了一次,但后來我注意到了這一點:

data.Count() - 1

我不確定為什么 - 1 在那里,我找到的解決方案有它,所以我把它留在那里。 當我刪除它時,程序運行,寫出該文件,然后可以閱讀它以獲取幫助文檔,而不會抱怨缺少 HHC。 一切都很好。 謝謝大家的建議!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM