View Single Post
  #1502  
Old 15-11-2021, 09:15
BYRedex BYRedex is offline
Registered User
 
Join Date: Jun 2013
Location: Koenigsberg
Posts: 2
Thanks: 0
Thanked 0 Times in 0 Posts
BYRedex is on a distinguished road
Quote:
Originally Posted by Cesar82 View Post
The IsDone callback function (ProgressCallback) does not display the names of all files.
This function is called 4 times per second and only the current filename is shown in the output.

If you use a native installation of Inno Setup (No UnArc/ISDone) it will only remove the installed files.

But for you to continue using your script you can create a list using FindFirst and FindNext of all the files that are in the game folder right after the ISDoneInit function.
After the ISDoneStop function you do a new check using FindFirst and FindNext and compare the names with the previous list using:
if oldfileslist.IndexOf(<fullfilename>) < 0 then ins_log.Append(<fullfilename>);
Here is my ProgressCallback code
Code:
procedure DeinitializeSetup;
begin
 BASS_Free;
 ForceCloseApp(ExpandConstant('{tmp}'));
end;

function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
var
 s : AnsiString;
 FCurrentFile : String;
begin
  if OveralPct<=1000 then ProgressBar.Value(OveralPct);
  WizardForm.ProgressGauge.Position:=OveralPct;
  FinishLabl5.Text(ExpandConstant('{cm:TIME_TAKEN} ')+TimeStr2);
  InsPageLabl4.Text(ExpandConstant('Осталось около: ')+TimeStr1);
  InsPageLabl5.Text(ExpandConstant('Прошло около: ')+TimeStr2);
  InsPageLabl6.Text(IntToStr(Round(OveralPct div 10))+'% ИЗВЛЕЧЕНО ФАЙЛОВ');
  s := ExpandConstant('{cm:Extracting} ') + CurrentFile;
  If InsLogBox.LineStrings(InsLogBox.LineCount - 1) <> s Then
  begin
   FCurrentFile := MinimizePathName(ExpandConstant('{cm:Extracting} ') +CurrentFile, WizardForm.ReadyMemo.Font, 500 - ScaleX(50))
   InsLogBox.AddLine(FCurrentFile);
  end;
  Result := ISDoneCancel;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
 ResultCode:Integer;
begin
   if CurStep = ssPostInstall then
   begin
   ISDoneError:=true;
   if ISDoneInit(ExpandConstant('{tmp}\records.inf'), 5555, 0,0,0, MainForm.Handle, 512, @ProgressCallback) then begin
     repeat
     ChangeLanguage('english');
     SetIniString('srep','temp',ExpandConstant('{app}'),ExpandConstant('{tmp}\cls.ini'));
     Installing:=true;

     #ifdef Data1
     if not ISArcExtract ( 0, {#D1[61]}, ExpandConstant('{src}\{#D1[60]}'), ExpandConstant('{app}'), '', false,('{#Dat1}'), ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\temp'), false) then break;
     #ifdef Data2
     if not ISArcExtract ( 0, {#D2[61]}, ExpandConstant('{src}\{#D2[60]}'), ExpandConstant('{app}'), '', false,('{#Dat2}'), ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\temp'), false) then break;
     #ifdef Data3
     if not ISArcExtract ( 0, {#D3[61]}, ExpandConstant('{src}\{#D3[60]}'), ExpandConstant('{app}'), '', false,('{#Dat3}'), ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\temp'), false) then break;
     #ifdef Data4
     if not ISArcExtract ( 0, {#D4[61]}, ExpandConstant('{src}\{#D4[60]}'), ExpandConstant('{app}'), '', false,('{#Dat4}'), ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\temp'), false) then break;
     #ifdef Data5
     if not ISArcExtract ( 0, {#D5[61]}, ExpandConstant('{src}\{#D5[60]}'), ExpandConstant('{app}'), '', false,('{#Dat5}'), ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\temp'), false) then break;
     #ifdef Data6
     if not ISArcExtract ( 0, {#D6[61]}, ExpandConstant('{src}\{#D6[60]}'), ExpandConstant('{app}'), '', false,('{#Dat6}'), ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\temp'), false) then break;
     #endif
     #endif
     #endif
     #endif
     #endif
     #endif

     ISDoneError:=false;
     until true;
     ISDoneStop;
    end;
  end;
If you can, please attach an example that I can lean on - it will be easier for me to understand and change my code.
And perhaps an IsDone can be substituted?

UPD/


I have information displayed in FMemo (InsLogBox : FMemo, can it also be saved to a file?


Code:
s := ExpandConstant('{cm:Extracting} ') + CurrentFile;
  If InsLogBox.LineStrings(InsLogBox.LineCount - 1) <> s Then
  begin
   FCurrentFile := MinimizePathName(ExpandConstant('{cm:Extracting} ') +CurrentFile, WizardForm.ReadyMemo.Font, 500 - ScaleX(50))
   InsLogBox.AddLine(FCurrentFile);

Last edited by BYRedex; 15-11-2021 at 13:26.
Reply With Quote