Добрый день
Никак не могу нормально в установщик поставить распаковку
Чем пакую:
Файлы всё в временную папку попадают но почему-то выбивает еррор
Никак не могу нормально в установщик поставить распаковку
Чем пакую:
Код:
arc.exe a -ep1 -r -ed -s; -w.\temp -mpzlib+srep+lzma2 "data.arc" "pack\*"
pause
Код:
[Files]
Source: ISDone\English.ini; DestDir: {tmp}; Flags: dontcopy
Source: ISDone\Russian.ini; DestDir: {tmp}; Flags: dontcopy
Source: ISDone\ISDone.dll; DestDir: {tmp}; Flags: dontcopy
Source: ISDone\unarc.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef pZLib
Source: IsDone\hif2raw_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: IsDone\raw2hif_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: IsDone\pZLib.exe; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef PrecompInside
Source: ISDone\CLS-precomp.dll; DestDir: {tmp}; Flags: dontcopy
Source: ISDone\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: ISDone\packjpg_dll1.dll; DestDir: {tmp}; Flags: dontcopy
Source: ISDone\precomp.exe; DestDir: {tmp}; Flags: dontcopy
Source: ISDone\zlib1.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef SrepInside
Source: ISDone\CLS-srep.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef MSCInside
Source: ISDone\CLS-MSC.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef facompress
Source: ISDone\facompress.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef precomp
Source: ISDone\precomp042.exe; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef unrar
Source: ISDone\Unrar.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef XDelta
Source: IsDone\XDelta3.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef PackZIP
Source: ISDone\7z.dll; DestDir: {tmp}; Flags: dontcopy
Source: ISDone\packZIP.exe; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef xtool
Source: IsDone\xtool.exe; DestDir: {tmp}; Flags: dontcopy
#endif
Source: IsDone\ztool\lzma2.exe; DestDir: {tmp}; Flags: dontcopy
Source: IsDone\ztool\ZTool.exe; DestDir: {tmp}; Flags: dontcopy
Source: IsDone\ztool\zlibwapi.dll; DestDir: {tmp}; Flags: dontcopy
Source: IsDone\ztool\raw2hif_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: IsDone\ztool\lzo2.dll; DestDir: {tmp}; Flags: dontcopy
Source: IsDone\ztool\libzstd.dll; DestDir: {tmp}; Flags: dontcopy
Source: IsDone\ztool\liblz4.dll; DestDir: {tmp}; Flags: dontcopy
Source: IsDone\ztool\hif2raw_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: IsDone\ztool\arc.ini; DestDir: {tmp}; Flags: dontcopy
[Code]
type
TCallback = function (OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
var
ISDoneError: boolean;
ISDoneCancel: Integer;
ISDoneProgressBar1, ISDoneProgressBar2: TImgPB;
PercentLabel1, PercentLabel2, CurFileNameLabel, ElapsedTimeLabel, RemainingTimeLabel, AllElapsedTimeLabel: Tlabel;
function WrapCallback(callback:TCallback; paramcount:integer):longword;
external 'wrapcallback@files:ISDone.dll stdcall delayload';
function ISArcExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath, ExtractedPath: AnsiString; DeleteInFile:boolean; Password, CfgFile, WorkPath: AnsiString; ExtractPCF: boolean ):boolean;
external 'ISArcExtract@files:ISDone.dll stdcall delayload';
function IS7ZipExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean;
external 'IS7zipExtract@files:ISDone.dll stdcall delayload';
function ISRarExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean;
external 'ISRarExtract@files:ISDone.dll stdcall delayload';
function ISPrecompExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean;
external 'ISPrecompExtract@files:ISDone.dll stdcall delayload';
function ISSRepExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean;
external 'ISSrepExtract@files:ISDone.dll stdcall delayload';
function ISxDeltaExtract(CurComponent:Cardinal; PctOfTotal:double; minRAM,maxRAM:integer; InName, DiffFile, OutFile: AnsiString; DeleteInFile, DeleteDiffFile:boolean):boolean;
external 'ISxDeltaExtract@files:ISDone.dll stdcall delayload';
function ISPackZIP(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString;ComprLvl:integer; DeleteInFile:boolean):boolean;
external 'ISPackZIP@files:ISDone.dll stdcall delayload';
function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):boolean;
external 'ShowChangeDiskWindow@files:ISDone.dll stdcall delayload';
function Exec2 (FileName, Param: PAnsiChar;Show:boolean):boolean;
external 'Exec2@files:ISDone.dll stdcall delayload';
function ISFindFiles(CurComponent:Cardinal; FileMask:AnsiString; var ColFiles:integer):integer;
external 'ISFindFiles@files:ISDone.dll stdcall delayload';
function ISPickFilename(FindHandle:integer; OutPath:AnsiString; var CurIndex:integer; DeleteInFile:boolean):boolean;
external 'ISPickFilename@files:ISDone.dll stdcall delayload';
function ISGetName(TypeStr:integer):PAnsichar;
external 'ISGetName@files:ISDone.dll stdcall delayload';
function ISFindFree(FindHandle:integer):boolean;
external 'ISFindFree@files:ISDone.dll stdcall delayload';
function ISExec(CurComponent:Cardinal; PctOfTotal,SpecifiedProcessTime:double; ExeName,Parameters,TargetDir,OutputStr:AnsiString;Show:boolean):boolean;
external 'ISExec@files:ISDone.dll stdcall delayload';
function SrepInit(TmpPath:PAnsiChar;VirtMem,MaxSave:Cardinal):boolean;
external 'SrepInit@files:ISDone.dll stdcall delayload';
function PrecompInit(TmpPath:PAnsiChar;VirtMem:cardinal;PrecompVers:single):boolean;
external 'PrecompInit@files:ISDone.dll stdcall delayload';
function FileSearchInit(RecursiveSubDir:boolean):boolean;
external 'FileSearchInit@files:ISDone.dll stdcall delayload';
function ISDoneInit(RecordFileName:AnsiString; TimeType,Comp1,Comp2,Comp3:Cardinal; WinHandle, NeededMem:longint; callback:TCallback):boolean;
external 'ISDoneInit@files:ISDone.dll stdcall';
function ISDoneStop:boolean;
external 'ISDoneStop@files:ISDone.dll stdcall';
function ChangeLanguage(Language:AnsiString):boolean;
external 'ChangeLanguage@files:ISDone.dll stdcall delayload';
function SuspendProc:boolean;
external 'SuspendProc@files:ISDone.dll stdcall';
function ResumeProc:boolean;
external 'ResumeProc@files:ISDone.dll stdcall';
function ProgressCallback(OveralPct, CurrentPct: integer; CurrentFile, TimeStr1, TimeStr2, TimeStr3: PAnsiChar): longword;
begin
if OveralPct<=1000 then ImgPBSetPosition(ISDoneProgressBar1, OveralPct);
PercentLabel1.Caption := IntToStr(OveralPct div 10) + '.'+chr(48 + OveralPct mod 10) + '%';
if CurrentPct<=1000 then ImgPBSetPosition(ISDoneProgressBar2, CurrentPct);
PercentLabel2.Caption := IntToStr(OveralPct div 10) + '.'+chr(48 + OveralPct mod 10) + '%';
CurFileNameLabel.Caption := ExpandConstant('{app}\') + CurrentFile;
ElapsedTimeLabel.Caption := ExpandConstant('{cm:ElapsedTime} ') + TimeStr2;
RemainingTimeLabel.Caption := ExpandConstant('{cm:RemainingTime} ') + TimeStr1;
AllElapsedTimeLabel.Caption:= ExpandConstant('{cm:AllElapsedTime} ') +TimeStr3;
Result:= ISDoneCancel;
ImgApplyChanges(WizardForm.Handle);
end;
procedure CancelButtonOnClick(Sender: TObject);
begin
SuspendProc;
if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then ISDoneCancel:=1;
ResumeProc;
end;
procedure IsDoneAddComponents();
begin
ISDoneProgressBar1:= ImgPBCreate(WizardForm.Handle, 'ProgressBarImgBack.png', 'ProgressBarImg.png', ScaleX(290), ScaleY(190), ScaleX(402), ScaleY(22));
ISDoneProgressBar2:= ImgPBCreate(WizardForm.Handle, 'ProgressBarImgBack2.png', 'ProgressBarImg2.png', ScaleX(290), ScaleY(270), ScaleX(402), ScaleY(22));
CurFileNameLabel:= TLabel.Create(WizardForm);
with CurFileNameLabel do begin
SetBounds(ScaleX(290), ScaleY(170), ScaleX(399), ScaleY(20));
AutoSize := False;
Parent := WizardForm;
Transparent:= True;
Font.Size := 9;
Font.Color := $555555;
Font.Style := [];
end;
PercentLabel1:= TLabel.Create(WizardForm);
with PercentLabel1 do begin
SetBounds(ScaleX(735), ScaleY(192), ScaleX(60), ScaleY(20));
AutoSize := False;
Parent := WizardForm;
Transparent:= True;
Font.Size := 10;
Font.Style := [fsBold];
Font.Color := $282828;
end;
PercentLabel2:= TLabel.Create(WizardForm);
with PercentLabel2 do begin
SetBounds(ScaleX(735), ScaleY(272), ScaleX(60), ScaleY(20));
AutoSize := False;
Parent := WizardForm;
Transparent:= True;
Font.Size := 10;
Font.Style := [fsBold];
Font.Color := $282828;
end;
ElapsedTimeLabel:= TLabel.Create(WizardForm);
with ElapsedTimeLabel do begin
SetBounds(ScaleX(290), ScaleY(385), ScaleX(300), ScaleY(20));
AutoSize := False;
Parent := WizardForm;
Transparent:= True;
Font.Size := 9;
Font.Color := $555555;
Font.Style := [];
end;
RemainingTimeLabel:= TLabel.Create(WizardForm);
with RemainingTimeLabel do begin
SetBounds(ScaleX(290), ScaleY(412), ScaleX(300), ScaleY(20));
AutoSize := False;
Parent := WizardForm;
Transparent:= True;
Font.Size := 9;
Font.Color := $555555;
Font.Style := [];
end;
AllElapsedTimeLabel:= TLabel.Create(WizardForm);
with AllElapsedTimeLabel do begin
SetBounds(ScaleX(290), ScaleY(412), ScaleX(300), ScaleY(20));
AutoSize := False;
Parent := WizardForm;
Transparent:= True;
Font.Size := 9;
Font.Color := $555555;
Font.Style := [];
end;
end;
procedure IsDoneHide();
begin
CurFileNameLabel.Hide;
PercentLabel1.Hide;
PercentLabel2.Hide;
ElapsedTimeLabel.Hide;
RemainingTimeLabel.Hide;
AllElapsedTimeLabel.Hide;
ImgPBVisibility(ISDoneProgressBar1, False);
ImgPBVisibility(ISDoneProgressBar2, False);
end;
procedure IsDoneShow();
begin
CurFileNameLabel.Show;
PercentLabel1.Show;
PercentLabel2.Show;
ElapsedTimeLabel.Show;
RemainingTimeLabel.Show;
ImgPBVisibility(ISDoneProgressBar1, True);
ImgPBVisibility(ISDoneProgressBar2, True);
end;
procedure IsDoneUnpack(CurStep: TSetupStep);
begin
if CurStep = ssInstall then begin
WizardForm.CancelButton.OnClick:= @CancelButtonOnClick;
ISDoneCancel:= 0;
ExtractTemporaryFile('unarc.dll');
ExtractTemporaryFile('Russian.ini');
ExtractTemporaryFile('English.ini');
ExtractTemporaryFile('lzma2.exe');
ExtractTemporaryFile('ZTool.exe');
ExtractTemporaryFile('zlibwapi.dll');
ExtractTemporaryFile('raw2hif_dll.dll');
ExtractTemporaryFile('lzo2.dll');
ExtractTemporaryFile('libzstd.dll');
ExtractTemporaryFile('liblz4.dll');
ExtractTemporaryFile('hif2raw_dll.dll');
ExtractTemporaryFile('arc.ini')
#ifdef facompress
ExtractTemporaryFile('facompress.dll');
#endif
#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 MSCInside
ExtractTemporaryFile('CLS-MSC.dll');
#endif
#ifdef records
ExtractTemporaryFile('records.inf');
#endif
#ifdef precomp
ExtractTemporaryFile('precomp042.exe');
#endif
#ifdef unrar
ExtractTemporaryFile('Unrar.dll');
#endif
#ifdef xtool
// ExtractTemporaryFile('hif2raw_dll.dll');
// ExtractTemporaryFile('raw2hif_dll.dll');
ExtractTemporaryFile('xtool.exe');
// ExtractTemporaryFile('arc.ini')
SaveStringToFile(ExpandConstant('{tmp}\arc.ini'), '[External compressor:xprecomp]'+#13#10+'header = 0'+#13#10+'unpackcmd = xtool.exe d:precomp:t4 - - <stdin> <stdout>'+#13#10+''+#13#10+'[External compressor:srep]'+#13#10+';options = l%d (minimal match length, default=512)'+#13#10+'header = 0'+#13#10+'unpackcmd = srep -d $$arcpackedfile$$.tmp $$arcdatafile$$.tmp', True);
Exec2(ExpandConstant('{sys}\cmd.exe'), 'параметры', False);
#endif
#ifdef pZLib
ExtractTemporaryFile('hif2raw_dll.dll');
ExtractTemporaryFile('raw2hif_dll.dll');
ExtractTemporaryFile('pZLib.exe');
// ExtractTemporaryFile('arc.ini')
SaveStringToFile(ExpandConstant('{tmp}\arc.ini'), '[External compressor:pzlib]'+#13#10+'header = 0'+#13#10+'unpackcmd = pZLib d -t90p - -o - <stdin> <stdout>'+#13#10+''+#13#10+'[External compressor:srep]'+#13#10+';options = l%d (minimal match length, default=512)'+#13#10+'header = 0'+#13#10+'unpackcmd = srep -d $$arcpackedfile$$.tmp $$arcdatafile$$.tmp', True);
#endif
#ifdef PackZIP
ExtractTemporaryFile('7z.dll');
ExtractTemporaryFile('PackZIP.exe');
#endif
ISDoneError:= True;
if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, 0, 0, 0, 0, {#NeedMem}, @ProgressCallback) then begin
repeat
ChangeLanguage(ActiveLanguage);
if not SrepInit(ExpandConstant('{app}\'), 256, 0) then break;
if not PrecompInit(ExpandConstant('{app}\'), 256, 0) then break;
if not FileSearchInit(True) then break;
if not ISArcExtract ( 0, 100, ExpandConstant('{src}\install-1.bin'), 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, 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;
*)
ISDoneError:= False;
until True;
ISDoneStop;
end;
end;
if (CurStep = ssPostInstall) and ISDoneError then begin
IsDoneHide;
BtnSetEnabled(CloseButton, False);
PageFinishedLabel.Enabled:= False;
PageNameLabel.Caption:= ExpandConstant('{cm:RollBack}');
ImgApplyChanges(WizardForm.Handle);
Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', False);
end;
end;
function CheckError: boolean;
begin
Result:= not ISDoneError;
#ifdef Soft
if Result and InstallSoft then
CurFileNameLabel.Caption:= ExpandConstant('{cm:SoftwareInstalling}');
#endif
end;