Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

ProjectNamespace.Properties.Resources.MyFile

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

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

Ответ 2

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

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

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

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

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

Здесь ссылка на Self-Extractor, но это не на С#.

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

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

Ответ 3

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

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

Ответ 4

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