Здравствуйте! А поподробнее, что и как менять, что за что отвечает? Использовать ли эти "инструменты", и "тот метод" что в архиве той темы или скачивать какие-то другие?
И самое главное, как потом это распаковать, как "вручную", так и в Inno Setup?
Простой пример скрипта и алгоритмов сжатия можете показать?
Спасибо.
arc.ini - [External compressor: pzlib] - Объявление алгоритма
header = 0 - честно говоря сам не знаю зачем этот параметр, но он ставится в каждом внешнем алгоритме
packcmd = pzlib e -m2 -x -s -r9 -t100p -st100p -ct100p - -o - <stdin> <stdout> - Команда упаковки:
e - encode, -m2 - детект deflate streams -x детект reflate и zlib (нужны библиотеки hif2raw_dll.dll, raw2hif_dll.dll), -s - обрабатывает дополнительные данные reflate -r9 - девятка это уровень обработки данных reflate (можно задать любой до 9) -t100p -указывает что для обработки будут использованы 100% ядер процессора (если не указать букву р, то число будет указывать количество потоков для обработки), -st100p -задает количество потоков для сканирования, -ct100p -задает количество потоков для прекомпрессора, - -o - <stdin> <stdout> -задает режим без временных файлов (обработка будет идти совместно с упаковкой данных в архив и обработкой другими алгоритмами), при этом reflate не будет обращатся к жесткому диску, за счет чего упаковка будет проходить быстрее
unpackcmd = pzlib d -t100p - -o - <stdin> <stdout> - команда распаковки (нужно включить в arc.ini который используется isdone), d- decode, остальное уже расписано выше.
Я прикрепил архив к предыдущему моему сообщению, там лежит последняя версия reflate, вместе со своими библиотеками
Когда вы используете команду упаковки (что то вроде arc.exe a ... -msrep+lzma:ultra ... data.bin packetdata/*)
srep и lzma являются такими же алгоритмами и чтобы использовать pzlib все что нужно это дописать pzlib так: -mpzlib+srep+lzma:ultra.
Что касается Inno Setup то распаковка будет идти также через isarcextract.Нужно изменить:
- В секцию [Files] нужно добавить:
- Source: Files\pzlib.exe; DestDir: {tmp}; Flags: dontcopy
- Source: Files\arc.ini; DestDir: {tmp}; Flags: dontcopy (если не существует)
- Source: Files\hif2raw_dll.dll; DestDir: {tmp}; Flags: dontcopy
- Source: Files\Include\raw2hif_dll.dll; DestDir: {tmp}; Flags: dontcopy
- В место распаковки библиотек (обычно в скрипте находится непосредственно перед распаковкой архивов)
- ExtractTemporaryFile('pzlib.exe');
- ExtractTemporaryFile('arc.ini')если не существует)
- ExtractTemporaryFile('hif2raw_dll.dll');
- ExtractTemporaryFile('raw2hif_dll.dll');
- И обеспечить нормальную работу инсталятора в случае отмены установки, или возникновения ошибки:
- Найти код: if (CurStep=ssPostInstall) and ISDoneError then begin (обычно находится после распаковки архивов)
- В следующую строку добавить код: Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM pzlib.exe', '', SW_HIDE, ewWaitUntilTerminated, ISDoneCancel);
- В всех ISArcExtract нужно задать путь к arc.ini
- if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data.bin'), ExpandConstant('{app}\'), '', false, 'пароль архива(если нет то пустая строка)', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}'), notPCFonFLY{PCFonFLY}) then break;