ISDone

DLL ISDone 0.6 final

Нет прав для скачивания

Hachapury

Участник
Всем привет!
У меня возникла проблема при распаковке архива исданом. Упаковал игру PrecompInside+SrepInside, и при попытке установить ее, прогресса в распаковке не наблюдается(стоит на 0%). Проверял на двух версиях исдана 0.6e и 0.6f - один и тот же эффект. Ещё пробовал распаковать одном инсталом(версию исдана не знаю), выбило следующее:
Произошла ошибка при распаковке: Заголовок архива поврежден!
Unarc.dll вернул код ошибки: -14
ERROR: archive structure corrupted (decompression of control block failed)

Как это исправить? Если я использую только SrepInside, то все нормально распаковывает, а если PrecompInside+SrepInside - то вот такая лажа.
 
Последнее редактирование:

Edison007

Ветеран
Модератор
Hachapury, можно сделать так... возьми файл precomp.exe из PrecompInside и замени им файл precomp.exe в IsDone
 

Hachapury

Участник
Edison007, делал и так и обратно - эффект один и тот же - стоит на 0%, и не думает что-либо распаковывать.
инстал даже папку для игры не создает
 

ProFrager

Знаток
Проверенный
Hachapury, какие-то файлы не соответствуют необходимым для распаковки. Требуется оригинальные precomp.exe и zlib1.dll (в 0.4 версии последняя не нужна) той же версии, что и паковал; packjpg_dll.dll и CLS-Precomp.dll из комплекта PrecompInside. Если требуется перепаковка jpg, то и оригинальная packjpg_dll.dll из комплекта прекомпа переименовывается в packjpg_dll1.dll и тоже добавляется в проект.
 

Hachapury

Участник
может здесь в чем-то проблема?
procedure CurStepChanged(CurStep: TSetupStep);
var Comps1,Comps2,Comps3, TmpValue:cardinal;
FindHandle1,ColFiles1,CurIndex1,tmp:integer;
ExecError:boolean;
InFilePath,OutFilePath,OutFileName:pAnsiChar;
begin
if CurStep = ssInstall then begin
WizardForm.ProgressGauge.Hide;
ISDoneCancel:=0;
ISDonePB:= ImgPBCreate(WizardForm.Handle, ExpandConstant('{tmp}\pbback.png'), ExpandConstant('{tmp}\pb.png'), ScaleX(230), ScaleY(160), ScaleX(350), ScaleY(16));
PercentLabel.Show;
CurrFileNameLabel.Show;
BtnSetEvent(hCancelBtn,BtnClickEventID,WrapBtnCallback(@CancelButtonOnClick, 1));

// Распаковка всех необходимых файлов в папку {tmp}.

ExtractTemporaryFile('unarc.dll');

#ifdef PrecompInside
ExtractTemporaryFile('CLS-precomp.dll');
ExtractTemporaryFile('packjpg_dll.dll');
ExtractTemporaryFile('packjpg_dll1.dll');
ExtractTemporaryFile('precomp.exe');
ExtractTemporaryFile('zlib1.dll');
#endif
#ifdef SrepInside
ExtractTemporaryFile('CLS-srep.dll');
#endif
#ifdef facompress
ExtractTemporaryFile('facompress.dll'); //ускоряет распаковку .arc архивов.
#endif
#ifdef records
ExtractTemporaryFile('records.inf');
#endif
#ifdef precomp
#if precomp == "0.38"
ExtractTemporaryFile('precomp038.exe');
#else
#if precomp == "0.4"
ExtractTemporaryFile('precomp040.exe');
#else
#if precomp == "0.41"
ExtractTemporaryFile('precomp041.exe');
#else
#if precomp == "0.42"
ExtractTemporaryFile('precomp042.exe');
#else
ExtractTemporaryFile('precomp038.exe');
ExtractTemporaryFile('precomp040.exe');
ExtractTemporaryFile('precomp041.exe');
ExtractTemporaryFile('precomp042.exe');
#endif
#endif
#endif
#endif
#endif
#ifdef unrar
ExtractTemporaryFile('Unrar.dll');
#endif
#ifdef XDelta
ExtractTemporaryFile('XDelta3.dll');
#endif
#ifdef PackZIP
ExtractTemporaryFile('7z.dll');
ExtractTemporaryFile('PackZIP.exe');
#endif

ExtractTemporaryFile('English.ini');

// Подготавливаем переменную, содержащую всю информацию о выделенных компонентах для ISDone.dll
// максимум 96 компонентов.
Comps1:=0; Comps2:=0; Comps3:=0;
#ifdef Components
TmpValue:=1;
if IsComponentSelected('text\rus') then Comps1:=Comps1+TmpValue; //компонент 1
TmpValue:=TmpValue*2;
if IsComponentSelected('text\eng') then Comps1:=Comps1+TmpValue; //компонент 2
TmpValue:=TmpValue*2;
if IsComponentSelected('voice\rus') then Comps1:=Comps1+TmpValue; //компонент 3
TmpValue:=TmpValue*2;
if IsComponentSelected('voice\eng') then Comps1:=Comps1+TmpValue; //компонент 4
// .....
// см. справку
#endif

#ifdef precomp
PCFVer:={#precomp};
#else
PCFVer:=0;
#endif
ISDoneError:=true;
if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, 128, @ProgressCallback) then begin
repeat
if ActiveLanguage = 'eng' then ChangeLanguage('English');
if not SrepInit('',512,0) then break;
if not PrecompInit('',128,PCFVer) then break;
if not FileSearchInit(true) then break;

if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data.arc'), ExpandConstant('{app}\'), '', false, '', '', ExpandConstant('{app}'), false) then break;

// далее находятся закомментированые примеры различных функций распаковки (чтобы каждый раз не лазить в справку за примерами)
(*
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\arc.arc'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\CODMW2.7z'), ExpandConstant('{app}\data1'), false, '') then break;
if not ISRarExtract ( 0, 0, ExpandConstant('{src}\data_*.rar'), ExpandConstant('{app}'), false, '') then break;
if not ISSRepExtract ( 0, 0, ExpandConstant('{app}\data1024_1024.srep'),ExpandConstant('{app}\data1024.arc'), true) then break;
if not ISPrecompExtract( 0, 0, ExpandConstant('{app}\data.pcf'), ExpandConstant('{app}\data.7z'), true) then break;
if not ISxDeltaExtract ( 0, 0, 0, 640, ExpandConstant('{app}\in.pcf'), ExpandConstant('{app}\*.diff'), ExpandConstant('{app}\out.dat'), false) then break;
if not ISPackZIP ( 0, 0, ExpandConstant('{app}\1a1\*'), ExpandConstant('{app}\1a1.pak'), 2, false ) then break;
if not ISExec ( 0, 0, 0, ExpandConstant('{tmp}\Arc.exe'), ExpandConstant('x -o+ "{src}\001.arc" "{app}\"'), ExpandConstant('{tmp}'), '...',false) then break;
if not ShowChangeDiskWindow ('Пожалуйста, вставьте второй диск и дождитесь его инициализации.', ExpandConstant('{src}'),'CODMW_2.arc') then break;

// распаковка группы файлов посредством внешнего приложения

FindHandle1:=ISFindFiles(0,ExpandConstant('{app}\*.ogg'),ColFiles1);
ExecError:=false;
while not ExecError and ISPickFilename(FindHandle1,ExpandConstant('{app}\'),CurIndex1,true) do begin
InFilePath:=ISGetName(0);
OutFilePath:=ISGetName(1);
OutFileName:=ISGetName(2);
ExecError:=not ISExec(0, 0, 0, ExpandConstant('{tmp}\oggdec.exe'), '"'+InFilePath+'" -w "'+OutFilePath+'"',ExpandConstant('{tmp}'),OutFileName,false);
end;
ISFindFree(FindHandle1);
if ExecError then break;
*)

ISDoneError:=false;
until true;
ISDoneStop;
end;
PercentLabel.Hide;
if not ISDoneError then CurrFileNameLabel.Caption:= SetupMessage(msgStatusRunProgram);
ImgPBDelete(ISDonePB);
WizardForm.CancelButton.Visible:=true;
WizardForm.CancelButton.Enabled:=false;
end;
if (CurStep=ssPostInstall) and ISDoneError then begin
ImgPBDelete(ISDonePB);
WizardForm.CancelButton.Enabled:=false;
CurrFileNameLabel.Caption:= ExpandConstant('{cm:ErorExtracted}');
Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
WizardForm.hide;
MainForm.Hide;
PostMessage(WizardForm.Handle, 18, 0, 0);
end;
end;

procedure DeinitializeSetup();
begin
DeinitializeSlideShow;
gdipShutdown;
end;
 

ProFrager

Знаток
Проверенный
Hachapury, там все стандартно. Единственное в самом начале скрипта еще должны быть раскомментированы #define PrecompInside и SrepInside. Попробуй распаковку в консоли провести, типа как в примере из комплекта любого из инсайдов, только добавь все необходимые дллки для обоих алгоритмов.
 

Snoopak96

Старожил
Hachapury, положи рядом с архивом unarc.exe, CLS-precomp.dll, packjpg_dll.dll, packjpg_dll1.dll, precomp.exe, zlib1.dll, CLS-srep.dll. Создай батник содержанием:
И посмотри что тебе напишет FA, если распакует нормально, значит просто намудрил в скрипте.
 
Последнее редактирование:

LexBell

Борода
Супер модератор
if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
в выделенном, подозреваю, должно быть tmp ?
 

LexBell

Борода
Супер модератор
где библиотека лежит
А при чем тут библиотека? :) распаковывается этот файл не в src, поскольку чаще всего это нереально, просто. значит и читаться болжен оттуда, куда распакован, разве нет? иначе, получаем вечный тестовый прогон :) (так я это дело и обнаружил :) )
 

ProFrager

Знаток
Проверенный
Gnom, все там нормально. Сначала проверяется наличие указанного файла рядом с библиотекой (вне зависимости от пути), если его там не оказалось, то библиотека встает в режим записи и сохраняет этот record.inf именно туда, куда ты указал, если укажешь {tmp}, то при завершении установки этот файл потрется инсталлером, так что оставь как было:). Подобный вопрос когда-то давно возникал у юзеров еще на руборде.
 
D

dvd4el

Гость
Ne0N, ISDone не хочет распаковывать архивы, созданные таким способом:
arc.exe a -ep1 -dses --dirs -s; -lc- -di -i2 -paaa -hp -r -msrep:m3f:a1:l256+lzma:512mb:normal:32:mc32:lc8:lp2+aes-256 data-a.bin packeddata\*
pause
 

ProFrager

Знаток
Проверенный
dvd4el,
vint56, и не будет) Булат писал об этом в теме фриарка на руборде, когда обсуждался баг unarc.dll с паролями.
 

vint56

Ветеран
Проверенный
Ne0Nя знаю я написал для dvd4el я читал в теме по фриарку
 

ProFrager

Знаток
Проверенный
ozerothik,
1) сейчас проверил и прекомп и среп и 2 раза 7з в одном инсталле, все нормально;
2) мыслей я читать не умею - что за "7зип не работает"?
3) у тебя такой тон, как будто я что-то вообще обязан делать.
 

GVS276

Старожил
Проверенный
Ne0N,
сейчас проверил и прекомп и среп и 2 раза 7з в одном инсталле, все нормально;
Тоже проверил, всё нормально пашет.
 
Последнее редактирование:

Krinkels

Он где то тут
Администратор
ozerothik
Что бы решить проблему нужно знать проблему. Банальное "7зип не работает" не подходит. Ты хотя бы объяснил что ты делаешь и как, вылазит ли какая то ошибка или нет.
А вообще на "7зип не работает" можно ответить: "Все дело в твоих кривых руках".
 
Сверху