Как хранить файлы в EXE - PullRequest
       37

Как хранить файлы в EXE

33 голосов
/ 09 февраля 2009

Хорошо, поэтому я работаю над программированием своего собственного установщика на C #, и я хотел бы сделать что-то вроде размещения файлов в .exe, так что я могу сделать File.Copy (файл, filedir);

Или, если это невозможно, есть ли другой способ сделать то, что я пытаюсь сделать?

Ответы [ 4 ]

30 голосов
/ 09 февраля 2009

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

ProjectNamespace.Properties.Resources.MyFile

Тогда вы сможете записать встроенный ресурс на диск, используя:

System.IO.File.WriteAllBytes(@"C:\MyFile.bin", ProjectNamespace.Properties.Resources.MyFile);
9 голосов
/ 09 февраля 2009

Честно говоря, я бы посоветовал вам НЕ создавать свой собственный установщик. Есть много проблем с созданием установщиков. Даже крупные производители инсталляторов больше не создают своих собственных инсталляторов, они просто создают собственные пакеты MSI.

Используйте Mirosoft Installer (MSI). Это правильно. Сделайте для него свой собственный пользовательский интерфейс, но не воссоздайте и без того очень сложное колесо, которое существует.

ОБНОВЛЕНИЕ: Если вы просто делаете это для обучения, я бы не стал думать об этом как об "установщике". У вас может возникнуть соблазн взять свое «исследование» и использовать его когда-нибудь, и, честно говоря, вот как мы сталкиваемся с таким количеством проблем, когда выходят новые версии Windows. Люди создают свои собственные колеса с ошибочными предположениями.

То, что вы на самом деле пытаетесь сделать, называется «упаковкой», и вам действительно нужно хорошо ознакомиться с форматом исполняемого PE, потому что вы говорите об изменении структуры образа PE на диске.

Вы можете смоделировать это, поместив файлы в ресурсы, но это не совсем то, что делают установщики или самораспаковщики.

Вот ссылка на Самораспаковывающийся учебник , но его нет в C #.

Я не знаю достаточно о требованиях .NET PE, чтобы знать, можно ли сделать это с помощью исполняемого кода управляемого кода.

ОБНОВЛЕНИЕ 2: Это, вероятно, больше того, что вы ищете, он встраивает файлы в ресурс, но, как я уже сказал, это не совсем так, как это делают профессиональные установщики или самораспаковщики. Я думаю, что существуют разные ограничения на то, что вы можете встраивать в качестве ресурсов. Но это похоже на демонстрационную версию Self-Extractor , написанную на C #.

4 голосов
/ 09 февраля 2009

Я предполагаю, что здесь, но если вы пытаетесь сохранить ресурсы в своем приложении до компиляции, вы можете в Project Explorer, щелкнуть правой кнопкой мыши файл, который вы хотите добавить, выбрать свойства и изменить тип на Embedded Resource.

Затем вы сможете получить доступ к встроенным ресурсам, используя инструкции из этого КБ: http://support.microsoft.com/kb/319292

0 голосов
/ 28 апреля 2009

В случае, если вы просто хотите хранить несколько файлов в одном файловом хранилище (и извлекать файлы оттуда, взаимодействовать и т. Д.), Вы также можете проверить NFileStorage, .net хранилище файлов . написанный на 100% .NET C # со всеми включенными источниками. Он также поставляется с интерпретатором командной строки, который позволяет взаимодействовать из командной строки.

...