Как встроить файл CHM в приложение - PullRequest
1 голос
/ 23 мая 2011

Привет всем, я только что закончил приложение, над которым я работал некоторое время.Вероятно, самый сложный, который я сделал на сегодняшний день.В связи с этим я решил, что пойду и сделаю справочный документ, чтобы предоставить пользователям некоторую информацию о нем.

Я создал файл 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 в приложение и получить к ним доступ, не записывая их на диск?Если это невозможно, а я думаю, что это не так, есть ли лучший способ сделать это, чем я сейчас?

Спасибо за любую помощь!

ЛучшийС уважением,

Ян

Ответы [ 3 ]

1 голос
/ 23 мая 2011

Приложения обычно используют установщик или какой-либо zip-архив. Оба метода позволят пользователю получать приложения и файлы справки, не предоставляя их отдельно.

0 голосов
/ 30 июля 2015

Итак, решение:
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);
    }
0 голосов
/ 24 мая 2011

ОгоОказывается, мне не нужен файл HHC.Я предположил, что сделал, потому что, когда я открывал диалоговое окно справки, он говорил, что не может найти файл оглавления .hhc.Я предположил, по какой-то причине, что это необходимо в дополнение к CHM.Первоначально я просто создал метод передачи ресурсов, чтобы предотвратить избыточность, и вызвал его один раз для CHM и один раз для HHC, но затем я заметил этот бит:

data.Count() - 1

I'mне уверен, почему это - я был там, решение, которое я нашел, имело его, поэтому я просто оставил его там.Когда я удалил это, программа запустилась, выписала этот файл и затем смогла прочитать его для справочной документации без жалоб на отсутствующий HHC.Все хорошо.Спасибо всем за предложения!

...