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

Ray Kazumi

Пользователь
Возникла небольшая проблема, помогите пожалуйста.

Батник:
Код:
@echo off
arc.exe a -w.\ -ep1 -dses --dirs -s; -lc- -di -i2 -r "-hppassword" -mpzlib+srep+lzma:a1:mfbt4:d200m:fb273:mc10000:lc8 "data1.bin" "D:\Mafia III\archive1\*"
pause
Arc.ini
Код:
[External compressor: pzlib]
header = 0
packcmd = pZLib e -m2 -t4 - -o - <stdin> <stdout>
unpackcmd = pZLib d -t4 - -o - <stdin> <stdout>

[External compressor:srep]
;options = l%d (minimal match length, default=512)
header = 0
packcmd = srep -a1 -mem256m -m5f -l256 $$arcdatafile$$.tmp $$arcpackedfile$$.tmp
unpackcmd = srep -d $$arcpackedfile$$.tmp $$arcdatafile$$.tmp
Выдает ошибку при распаковке:


P.S pZlib v2. (Ссылка)
 

Timick

Старожил
Извлекаешь файлы в Temp директорию? Вот так:
Код:
ExtractTemporaryFile('arc.ini');
ExtractTemporaryFile('pZlib.exe');
А архивы как извлекаешь? Вот так нужно:
Код:
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Data-1.bin'),  ExpandConstant('{app}'), '', False, '{#Password}', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}'), notPCFonFLY {PCFonFLY} ) then Break;
 

dixen18

Пользователь
Еще можно попробовать сменить версию SREP..У меня почему-то распаковывается только с версией 3,93..Ниже - то что на скрине у автора темы
 

ExPlayer

Пользователь
@Timick спасибо за подсказку :)

Только при нажатии на "Отмена" инсталлятор ставится на паузу и отмену не делает. Можно это как-то решить?
 

vint56

Ветеран
Проверенный
Код:
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;
 

SBalykov

Старожил
А архивы как извлекаешь? Вот так нужно:
Код:
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;
 

Pipocooling

Пользователь
Подскажите почему вышеуказанные методы не работают с файлами игры The Talos Principle, что надо в инишнике добавить чтоб pzlib глубже копал ?
 

dixen18

Пользователь
Pipocooling,
К сожалению PZLIB плохо понимает ZIP-потоки...можно сменить метод -m2 на -m1..мне так помогло в игре CoD Black Ops правда конечное сжатие не дало того результата, который выходит в случае использования рифлейта
Сам хотел бы знать параметры пзлиба для zip'ов
 

Pipocooling

Пользователь
dixen18, -m1 не дал никаких результатот, хотя у того же сейтера в репаке использует The Talos Principle, и версия там походу другая, размер эзешника отличается от того что на паблике
 

dixen18

Пользователь
Pipocooling, Последняя версия - третья (hotfix). 32 и 64 битные
 

Pipocooling

Пользователь
dixen18, я не про версию игры а про версию pZLib.exe, в его репаке используетзя pZLib но он отличается от pZLib v2, которым не получается разжать файлы игры :)
 

dixen18

Пользователь
Pipocooling, Дак и я про версию PZLIB - она уже v3
pZLib version 3 is created by Razor12911

Вот ссылка на архив, если кому надо..Версия финальная по словам Разора
https://yadi.sk/d/_2rTLwdS37qaPi
 
Последнее редактирование:

Pipocooling

Пользователь
dixen18, спасибо огромное, а я то думал v2 последняя)))

а для чего файлы 2-dll файла и как их использовать ? если можно поделись батником и инишником

зы, если ужать через 64 битную версию, с 32-битным пзлиб можно будет распаковать ?
 
Последнее редактирование:

Hunter

Пользователь
Возникла небольшая проблема, помогите пожалуйста.

Батник:
Код:
@echo off
arc.exe a -w.\ -ep1 -dses --dirs -s; -lc- -di -i2 -r "-hppassword" -mpzlib+srep+lzma:a1:mfbt4:d200m:fb273:mc10000:lc8 "data1.bin" "D:\Mafia III\archive1\*"
pause
Arc.ini
Код:
[External compressor: pzlib]
header = 0
packcmd = pZLib e -m2 -t4 - -o - <stdin> <stdout>
unpackcmd = pZLib d -t4 - -o - <stdin> <stdout>

[External compressor:srep]
;options = l%d (minimal match length, default=512)
header = 0
packcmd = srep -a1 -mem256m -m5f -l256 $$arcdatafile$$.tmp $$arcpackedfile$$.tmp
unpackcmd = srep -d $$arcpackedfile$$.tmp $$arcdatafile$$.tmp
Выдает ошибку при распаковке:


P.S pZlib v2. (Ссылка)

ИЗМЕНИ ФАЙЛ Arc.ini ТАКИМ ОБРАЗОМ

Arc.ini
Код:
[External compressor: pzlib]
header = 0
packcmd = pZLib e -m2 -t4 $$arcdatafile$$.tmp -o $$arcpackedfile$$.tmp
unpackcmd = pZLib d -t4 - -o - <stdin> <stdout>
 

vint56

Ветеран
Проверенный
Hunter, а ты в скрипт добавил файлы для распаковки
 
Последнее редактирование:

ExPlayer

Пользователь
Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM pZLib.exe', '', SW_HIDE, ewWaitUntilTerminated, i);
ругается на "i": Unknown identifier.

Где её объявлять и чему она должна равняться?
Это код ошибки. Можешь изменить его, например "ErrorCode". Тип переменной - Integer
Спасибо :)
 
Сверху