Версия для печати темы

Нажмите сюда для просмотра этой темы в оригинальном формате

CTPAX-X _ Статьи _ Delphi. Создание проги с архивом во чреве

Автор: Siberian GRemlin Oct 10 2007, 04:14

Как засунуть DLL себе во внутрь ЕХЕ мы уже разбирали. А вот как засунуть себе в ЕХЕ, допустим архив RAR, чтобы потом его извлечь (используя unrar.dll). Т.е. нужен самораспаковывающийся архив + который выполняет ещё потом действия с файлами, реестром и т.д. и т.п. -- можно конечно сделать стандартный и впихать в него свой ЕХЕ, который будет выполнять действия с файлами после распаковки, но это не катит, т.к. любой может архив вскрыть и достать содержимое, да и к тому же иногда нужно залесть в реестр перед установкой и проверить есть ли на компе та или иная игра, а потом уже предложить пользователю изменить\указать путь к ней и т.д. и т.п., т.е. в идеале на выходе нужно получить ЕХЕ, внутри у которой unrar.dll (проблем вроде нет с этим) и запароленный RAR архив (не более 20 Мб) и извлекать из него прямо из ЕХЕ, без выдирания его во временную папку... самараспаковывающиеся RAR архивы как-то же спокойно открываются как обычный RAR...

Автор: -=CHE@TER=- Oct 10 2007, 04:19

Если UNRAR.DLL не поддерживает распаковку из памяти (типа потоков Streams и т.д.) - то, видимо, без создания временного файла - никак. Во всяком случае у меня идей нет.

Автор: jTommy Oct 10 2007, 16:11

Да, unrar.dll работает только с файлами.

Есть три решения:

  1. В SFX архивах RAR есть скриптовый язык. Вроде не хилый. Я писал скрипты только для DOS версии Про WIN версию ничего не скажу, но думаю, что работа с реестром там должна быть.
  2. Обратить внимание на http://www.7-zip.org/sdk.html.
  3. Или использовать zlib, ucl или еще какую-нить библиотеку. Единственная проблема (во всяком случае для меня), как узнать где начинаются наши данные и как сделать так, чтобы они не загружались в память при запуске инсталлятора.

Автор: Grom PE Oct 10 2007, 16:48

Вообще unrar.dll должен воспринимать любой правильный exe с дописанным к нему в конец rar'ом как архив.