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

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

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

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

ProjectNamespace.Properties.Resources.MyFile 

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

 System.IO.File.WriteAllBytes(@"C:\MyFile.bin", ProjectNamespace.Properties.Resources.MyFile); 

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

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

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

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

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

Вот ссылка на учебник Self-Extractor , но это не в C #.

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

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

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

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

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