Распаковка архива методом PZlib+Srep+Lzma

vint56

Ветеран
Проверенный
L-e-o-N у меня все работает делаю так pzlib 3 + msc +srep + lzma
 

Mickey1s

Ветеран
Модератор
L-e-o-N, юзай так:

[External compressor:msc]
header = 0
packcmd = msc c -v -f -tak=9s -mp3=1 -dxt=2 -ddsraw=0 -raw=2 $$arcdatafile$$.tmp $$arcpackedfile$$.tmp

[External compressor:pzlib]
header = 0
packcmd = pZLib e -m2 -t4 -b512k - -o - <stdin> <stdout>
unpackcmd = pZLib d -t75p - -o - <stdin> <stdout>

MSC_Unpack.exe вообще выкинь, для распаковки нужна dll только
 

L-e-o-N

Старожил
L-e-o-N, юзай так:

[External compressor:msc]
header = 0
packcmd = msc c -v -f -tak=9s -mp3=1 -dxt=2 -ddsraw=0 -raw=2 $$arcdatafile$$.tmp $$arcpackedfile$$.tmp

[External compressor:pzlib]
header = 0
packcmd = pZLib e -m2 -t4 -b512k - -o - <stdin> <stdout>
unpackcmd = pZLib d -t75p - -o - <stdin> <stdout>

MSC_Unpack.exe вообще выкинь, для распаковки нужна dll только
Не помогло, и кстати проблема не только в pzlib (только что пробовал прикрутить reflate и lzma2), тоесть любой алгоритм который работает как exe-шник не работает
 
Последнее редактирование:

NicTon

Новичок
Помогите, пожалуйста с простым скриптом для Inno Setup при использовании pZlib v3, метод сжатия M2 (pzlib+srep+lzma).

Архивируется/распаковывается "вручную" без проблем.

А в Inno Setup, либо выдаёт ошибку "заголовок архива повреждён", либо распаковка уходит в бесконечность!
Какие файлы в архиве есть он определяет - пишет мол распаковка такого-то файла, НО процесс распаковки так и не начинается.
Так же не работает кнопка "Отменить распаковку", приходится снимать процессы через Диспетчер задач, чтобы закрыть установщик.

Файлы arc.ini, arc.exe, pzib.exe, добавил, в Temp они извлекаются. Файлы srep.exe, CLS-srep.dll - менял на разные версии. Не помогает, либо вообще пишет, что не может извлечь из-за неизвестного типа сжатия.

Информацию в arc.ini - - менял, как написано в этой теме ранее, так и брал из pZib.

Код:
[External compressor: pzlib]
header = 0
packcmd = pZLib e -m2 -t4 $$arcdatafile$$.tmp -o $$arcpackedfile$$.tmp
unpackcmd = pZLib d -t4 - -o - <stdin> <stdout>
Распаковывать пробовал и так и так:

Код:
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Data-1.bin'),  ExpandConstant('{app}'), '', False, '{#Password}', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}'), notPCFonFLY {PCFonFLY} ) then Break;

if not ISExec(0, 0, 0, ExpandConstant('{tmp}\arc.exe'), ExpandConstant('x -o+ -cfg"{tmp}\arc.ini" -w"{app}" -hp"{#password}" -dp"{app}" "{src}\*.bin"'), ExpandConstant('{tmp}'), '...', False) then break;
Подскажите, пожалуйста, что и как нужно делать в чём проблема? Если можно простой пример скрипта для пробы и какую версию Inno Setup и pZlib и прочих библиотек вы используете?
 

ExPlayer

Старожил
NicTon,
1. в arc.ini:
Замени строчку "[External compressor: pzlib]" на эти:
Код:
[External compressor: pzlib]
header = 0
packcmd = pZLib e -m2 -t4 - -o - <stdin> <stdout>
unpackcmd = pZLib d -t4 - -o - <stdin> <stdout>
2. Распаковывать (через inno) так:
Код:
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Data-1.bin'),  ExpandConstant('{app}'), '', False, '{#Password}', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}'), notPCFonFLY {PCFonFLY} ) then Break;
3. Отмена установки:
Код:
1) Убивать процесс при отмены установки
procedure CancelButtonOnClick(Sender: TObject);
begin
  SuspendProc;
  if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then ISDoneCancel:=1;
  Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM pZLib.exe', '', SW_HIDE, ewWaitUntilTerminated, i);
  ResumeProc;
end;
2) Убивать процесс при ошибке
  if (CurStep=ssInstall) and ISDoneError then
  begin
  Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM pZLib.exe', '', SW_HIDE, ewWaitUntilTerminated, i);
  end;
  if (CurStep=ssPostInstall) and ISDoneError then begin
    Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
  end;
end;
Всё это уже было написано на первой странице темы. И на сколько я знаю уже есть cls для pzlib.
 

KEHTYXA_CAH

Мимокрокодил
Вы меня извините за дикость, но я никак не могу понять, зачем нужен pZLIB.exe, что с ним делать, и как им пользоваться, объясните пожалуйста.
 

dixen18

Ветеран
KEHTYXA_CAH, Как видно из названия - пзлиб нужен для декомпрессии файлов, сжатых методами ZLIB, Deflate и тд. и последующего сжатия фриарком. По скорости разжатия и восстановления он гораздо быстрее прекомпа и рифлейта.
Как им пользоваться, можно узнать в самом exe файле
 

KEHTYXA_CAH

Мимокрокодил
KEHTYXA_CAH, Как видно из названия - пзлиб нужен для декомпрессии файлов, сжатых методами ZLIB, Deflate и тд. и последующего сжатия фриарком. По скорости разжатия и восстановления он гораздо быстрее прекомпа и рифлейта.
Как им пользоваться, можно узнать в самом exe файле
Но принцип тот же как и у прекомпа?
 

Pipocooling

Участник
вышел новы cls с поддержкой ползунка, может кто сможет интегрировать его в скрипт isdone final ?
пример в архиве
 

Вложения

Pipocooling

Участник
vint56, попробовал, при установке прогресс не идет, но в папке временных файлов распаковывается архив и установка длится вечно, даже отменить нельзя
 

Pipocooling

Участник
vint56, нашел причину проблемы, из-за того что архив был сжат через 4x4:b100mb:lzma, бeз 4x4 все отлично распаковалось, так и не понял почему с 4x4 такие проблемы.
 

dixen18

Ветеран
Что-то в последнее время ни одной игры не могу нормально пожать через пзлиб...Пресловутая ошибка CRC в четырех играх вылезает (Последняя попытка была на игре mxgp3 the official motocross videogame)...Кто-нибудь нашел вариант как этого избежать?
ЗЫ. Советуют понизить параметр t100p хотя бы наполовину...Попробую

Помогло)) Использовал такие параметы для сжатия
[External compressor ; pZlib]
header = 0
packcmd = pZLib e -m2 -x -s -t50p - -o - <stdin> <stdout>
 
Последнее редактирование:
Сверху