Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

SFX-архив в Delphi. Методы создания.

10K
16 октября 2005 года
MaxIkar
11 / / 16.10.2005
Как в Delphi можно сделать что-то навроде SFX-архива, т.е. сделать
exe-шный файл, а потом до него из другой проги дописывать что-то
(по-моему, это что-то называется overlay). Как организовать это
дописывание и чтение exe-шкой этих данных?
5
16 октября 2005 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by MaxIkar
Как в Delphi можно сделать что-то навроде SFX-архива, т.е. сделать
exe-шный файл, а потом до него из другой проги дописывать что-то
(по-моему, это что-то называется overlay). Как организовать это
дописывание и чтение exe-шкой этих данных?


Можно добавлять в акцепторный SFX-экзешник резидентный ресурс, который SFX и будет обрабатывать.

Добавление осуществляется
BeginUpdataResource
UpdateResource
EndUpdateResource

Загрузка осуществляется
FindResource
LoadResource

10K
16 октября 2005 года
MaxIkar
11 / / 16.10.2005
Цитата:
Originally posted by hardcase
Можно добавлять в акцепторный SFX-экзешник резидентный ресурс, который SFX и будет обрабатывать.

Добавление осуществляется
BeginUpdataResource
UpdateResource
EndUpdateResource

Загрузка осуществляется
FindResource
LoadResource


А можно ли поподробнее и по-русски =))
Как создать этот SFX-экзешник?
Если можно, краткий пример.

5
17 октября 2005 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by MaxIkar
А можно ли поподробнее и по-русски =))
Как создать этот SFX-экзешник?
Если можно, краткий пример.


Щас с утчечка скомпилил демку. :)
Посмотри. Правда там бага одна :o - в readme описана.

Ресурс пихаю BeginUpdateResource, UpdateResource, EndResource
Читаю ресурс с помощью стрима TResourceStream - он вызывает FindResource и LoadResource.

Я тут посмотрел как Раровский эСэФиКсЕр устроен - тоже вроде архив в нём как ресурс лежит

10K
22 октября 2005 года
MaxIkar
11 / / 16.10.2005
Спасибо!
У меня все работает, даже текст, загруженный из файла, нормально вносится.
Однако WinRAR'овские архивы, равно как и созданные Total Commander'ом SFX'ы отличаются двумя вещами:
- Модуль распаковки может быть запакован упаковщиком
- Среди ресурсов не видно того, что записывается.
- Если к модулю распаковки в тотале дописать архив zip (а в раре - его формата), просто дописать, т.е. в другой папке дать файлу имя sfx.exe и скопировать в папку с модулем, а при вопросе "Файл существует" нажать "дописать", ТО получится рабочий архив. Так что, по-видимому, там другой метод, т.е. там как-то дописывается информация в конец файла, а потом извлекается.
Может, есть мысли по поводу?
5
22 октября 2005 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by MaxIkar
Спасибо!
У меня все работает, даже текст, загруженный из файла, нормально вносится.
Однако WinRAR'овские архивы, равно как и созданные Total Commander'ом SFX'ы отличаются двумя вещами:
- Модуль распаковки может быть запакован упаковщиком
- Среди ресурсов не видно того, что записывается.
- Если к модулю распаковки в тотале дописать архив zip (а в раре - его формата), просто дописать, т.е. в другой папке дать файлу имя sfx.exe и скопировать в папку с модулем, а при вопросе "Файл существует" нажать "дописать", ТО получится рабочий архив. Так что, по-видимому, там другой метод, т.е. там как-то дописывается информация в конец файла, а потом извлекается.
Может, есть мысли по поводу?


Можно поступить также
1) Если Экзешник знает свой размер (такой, что получился срезу после компиляции), дописываем в конец экзешника то, что нам нужно. Экзешник открывает сам себя и из нужной позиции читает. Всё.

2) А если уж совсем безопасно, то кидаем в ресурс к экзешнику его физический размер. А дальше также как в 1)

Только я не знаю, как ОС или АнтиВирь отреагируют на такие манипуляции с исполняемым файлом.

10
22 октября 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by hardcase
1) Если Экзешник знает свой размер (такой, что получился срезу после компиляции), дописываем в конец экзешника то, что нам нужно. Экзешник открывает сам себя и из нужной позиции читает. Всё.


А можно просто забить. Как правило, размер непосредственно архива намного больше размера модуля распаковки (даже неупакованного). Поэтому достаточно искать с начала файла сигнатуру архива - она есть и у RAR, и у Ziр: откройте архив и посмотрите. Ну, а как программе распаковке определить путь к самой себе, думаю, знаете. Нет - в поиск!

10K
23 октября 2005 года
MaxIkar
11 / / 16.10.2005
Цитата:
Originally posted by Freeman
А можно просто забить. Как правило, размер непосредственно архива намного больше размера модуля распаковки (даже неупакованного). Поэтому достаточно искать с начала файла сигнатуру архива - она есть и у RAR, и у Ziр: откройте архив и посмотрите. Ну, а как программе распаковке определить путь к самой себе, думаю, знаете. Нет - в поиск!


Какими функциями можно в Delphi:
- Дописать до существующего файла что-то? Append?
- Найти в файле сигнатуру?
А сама прога не будет ругаться за такое извращение над нею?

10
23 октября 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by MaxIkar
Какими функциями можно в Delphi:
- Дописать до существующего файла что-то? Append?
- Найти в файле сигнатуру?


Это уже самостоятельное задание. Кто пищет программу - мы или ты? ;)

Цитата:

А сама прога не будет ругаться за такое извращение над нею?


Если открывать только на чтение - не будет.

5
24 октября 2005 года
hardcase
4.5K / / 09.08.2005
Цитата:
Originally posted by MaxIkar
Какими функциями можно в Delphi:
- Дописать до существующего файла что-то? Append?


Используй поток TFileStream для чтения и записи в файл. Как с ним развлекаться - RTFM :D

Цитата:
Originally posted by MaxIkar
- Найти в файле сигнатуру?


Если сигнатура архива - это строки текста вроде "this is the beginning of my archive" то можно послеовательно грузить в память 30-40КБ как стринг и искать в нём обычным Pos иои PosEx твою строку-сигнатуру. Есть одна тонксть:!!!: - в самом экзешнике эта сигнатура не должна быть явным образом прописана или объявлена как ресурс или константа, иначе мы найдём неправильную точку входа в архив X)- .

10
24 октября 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by hardcase
Есть одна тонксть:!!!: - в самом экзешнике эта сигнатура не должна быть явным образом прописана или объявлена как ресурс или константа, иначе мы найдём неправильную точку входа в архив X)- .


Необязательно. Если доподлинно известно, что сигнатура присутствует в виде ресурса или константы, можно искать второе ее вхождение.

К слову сказать, сигнатуры RAR и Zip - однобайтовые, а ресурсы Windows хранит в Unicode. Достаточно описать сигнатуры как resourcestring, чтобы они не находились при поиске.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог