FileForums

FileForums (https://fileforums.com/index.php)
-   Conversion Tutorials (https://fileforums.com/forumdisplay.php?f=55)
-   -   ISArcEx - A FreeArc Archive Extractor Plugin for InnoSetup (https://fileforums.com/showthread.php?t=104980)

BLACKFIRE69 12-03-2022 01:34

ISArcEx - A FreeArc Archive Extractor Plugin for InnoSetup
 
9 Attachment(s)
ISArcEx - Advanced FreeArc Extraction API for Inno Setup
========================================

Code:

> Overview:
ISArcEx is a high-performance extraction library meticulously crafted
for Inno Setup. It provides a robust interface for handling FreeArc
archives, offering advanced progress tracking and precise extraction
metrics that standard tools often lack.

> Specifications:
- Version        : v0.5
- Author        : BLACKFIRE69
- Build                : 6997A400
- Compatibility        : Inno Setup v6.0 or later (Required)
- License      : Proprietary (See LICENSE file for details)
- Tested Engine        : FreeArc v0.67

Code:

> Key Features:
- Archive Support: Specialized in Normal FreeArc
  archives. Note: Splitted archives are not supported.
- Selective Extraction: Use ISArcExAddDisksEx to extract specific
  folders from within an archive.
- Advanced Progress Tracking: Real-time metrics for Overall Progress,
  Current Disk Progress, and Extracted/Total File Counts.
- Performance Metrics: Accurate Current and Average Speed (MB/s).
- Time Management: Intelligent "Time Remaining" and "Elapsed Time"
  tracking with three customizable display formats.
- Process Control: Built-in functions to Suspend, Resume, or Stop
  the extraction process safely.
- UI Stability: Includes "Calc Accuracy" reduction logic to prevent
  erratic jumping in speed and ETA displays.
- Localization: Easily switch between languages using external .ini
  configuration files.

Code:

> Supported External Tooling:
ISArcEx integrates seamlessly with common FreeArc external-processors:
- SREP, XTool, LOLZ, NZ, RZ.
- Support for Facompress (MT and Standard).

> Distribution Files:
- ISArcEx.dll        — Core API Library.
- UnArc_32.dll        — FreeArc engine integration.
- ISArcEx.iss        — Header for Inno Setup.
- arc.ini / CLS.ini — Configuration for external-processors.
- English.ini / Russian.ini — Language configuration files.

.

lolaya 20-03-2022 19:03

i love u work ♥

Gehrman 24-03-2022 01:51

https://www.upload.ee/image/13991445...-24_142029.jpg
what is the problem?

BLACKFIRE69 28-03-2022 13:09

Quote:

Originally Posted by Gehrman (Post 496276)


Code:

1. Goto line 546, (Ctrl + G then 546)

2.

Change
  LabelTime3 := TLabel.Create(WizardForm);
  with LabelTime3 do begin
    ...
    Left    := 180;
    Top      := 200;
  end;

To
  LabelTime3 := TLabel.Create(WizardForm);
  with LabelTime3 do begin
    ...
    Left    := WizardForm.FinishedLabel.Left;
    Top      := WizardForm.FinishedLabel.Top + ScaleY(120);
  end;


Spotless 19-05-2022 05:24

1 Attachment(s)
Hello Blackfire
Could you edit this script for me?

i want to add launch a game check box to the finish page
and when i type the shortcut name called Battle.net it must be Battle.net.lnk for my file location but it does not make it correct
and open a website checkbox too

and a question can i copy ur dll to a new empty script and add my archives to it? because i wanna do some edits with the wizardform designer

thanks!

BLACKFIRE69 26-07-2022 03:49

4 Attachment(s)
Quote:

Originally Posted by Spotless (Post 496909)
a question can i copy ur dll to a new empty script and add my archives to it? because i wanna do some edits with the wizardform designer

thanks!

sorry for the late reply.
you can include ISArcEx for any script. but just copying the dll is not enough.
you should know how to work with the ISArcEx.dll. follow the examples provided for help. or you can PM your script and i can help you out.

Quote:

Originally Posted by Spotless (Post 496909)
Hello Blackfire
Could you edit this script for me?

i want to add launch a game check box to the finish page
and when i type the shortcut name called Battle.net it must be Battle.net.lnk for my file location but it does not make it correct
and open a website checkbox too

ok, check out the attachment. also press "CTRL + F" and search for the word "NewChanges".

.

Gehrman 26-07-2022 06:15

Hi BLACKFIRE69
How to remove this section?
https://upload.cc/i1/2022/07/26/LaJkl8.jpg

BLACKFIRE69 26-07-2022 08:21

1 Attachment(s)
Quote:

Originally Posted by Gehrman (Post 497766)
Hi BLACKFIRE69
How to remove this section?
https://upload.cc/i1/2022/07/26/LaJkl8.jpg

1. Comment the second line of [types] section.

Code:

[Types]
Name: full; Description: Full installation; Flags: iscustom
;Name: custom; Description: Custom installation;

2. Remove types from the [Components] section.
Code:

Before:

[Components]
Name: extra; Description: Extra; Types: full custom;
...
Name: voice; Description: Interface Language and Voices; Types: full;
...

After:

[Components]
Name: extra; Description: Extra;
...
Name: voice; Description: Interface Language and Voices;
...

.

Masquerade 20-12-2022 14:11

First of all, sorry for digging up this topic.

I have a small question about IsArcEx. If I wanted to run a batch file or other script after unpacking the FreeArc archive but also keep the elapsed timer running, whereabouts should I put the command?

All my post-FreeArc command run in a procedure called masquerade_work, so I call this after the FreeArc extraction finishes.

I have tried putting it on the line above IsArcExStop();, but this does not keep the timer running after the last archive has finished extracting:

Code:

for i:= 1 to ISArcExDiskCount do
  begin
    ISArcExError := not ISArcExExtract(i, ExpandConstant('{app}\'), ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}'));
    if ISArcExError then break;
  end;
  until true;
  masquerade_work();
ISArcExStop;

Is there something I am doing incorrectly? The reason I would like to keep the elapsed timer running is because some of my scripts run for a long time after extracting data (recompressing, patching large files etc..) so it's important that the installer does not look stuck towards the user.

Thanks,
Masquerade

BLACKFIRE69 21-12-2022 01:14

Quote:

Originally Posted by Masquerade (Post 499484)
First of all, sorry for digging up this topic.

I have a small question about IsArcEx. If I wanted to run a batch file or other script after unpacking the FreeArc archive but also keep the elapsed timer running, whereabouts should I put the command?

All my post-FreeArc command run in a procedure called masquerade_work, so I call this after the FreeArc extraction finishes.

I have tried putting it on the line above IsArcExStop();, but this does not keep the timer running after the last archive has finished extracting:

Code:

for i:= 1 to ISArcExDiskCount do
  begin
    ISArcExError := not ISArcExExtract(i, ExpandConstant('{app}\'), ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}'));
    if ISArcExError then break;
  end;
  until true;
  masquerade_work();
ISArcExStop;

Is there something I am doing incorrectly? The reason I would like to keep the elapsed timer running is because some of my scripts run for a long time after extracting data (recompressing, patching large files etc..) so it's important that the installer does not look stuck towards the user.

Thanks,
Masquerade



@Masquerade

Timer will run until it calls ISArcExStop. ;)


Code:

...

  masquerade_work();
  ISArcExStop;  // Timer Stops

...


Masquerade 03-01-2023 00:29

I have encountered a similar problem. Sometimes I need to extract an archive located in {app} and extract it to {app}. Adding a disk from {app} will cause the No Archives to Extract error.

hitman797 03-01-2023 00:33

Quote:

Originally Posted by audiofeel (Post 499640)
It is a little unclear how to specify the path for unpacking, for example, "data2.bf" I need to unpack it in the documents folder. I found how to change the path, but it changes for all archives.
that is, I need to "data1.bf" and "data3.bf " unpacked to the {app} folder. "data 2.bf " unpacked to the {documents} folder

{userdocs} & {commondocs}
The path to the My Documents folder.

BLACKFIRE69 03-01-2023 03:00

Quote:

Originally Posted by audiofeel (Post 499646)
is everything done in a tricky way there. can't you figure it out without 100 grams. if you change the constant, it will change for all archives
Code:

ISArcExDiskCount:= 0;
      if FileExists(ExpandConstant('{src}\{#Data1Path}')) then
      begin
        ISArcDiskAddingFalied:= ISArcExAddDisks(ExpandConstant('{src}\{#Data1Path}'), '{#DiskPassword}');
        if ISArcDiskAddingFalied then break;
        ISArcExDiskCount:= ISArcExDiskCount + 1;
      end;
        for i:= 1 to ISArcExDiskCount do
        begin
          ISArcExError:= not ISArcExExtract(i, ExpandConstant('{app}\'), ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}'));
          if ISArcExError then break;
        end;





ok, i'll let you change the output directory when adding disks. ;)

Code:

<--- Change --->

1. syntax:

  function ISArcExAddDisks(Inputfile, Password, OutputPath: Widestring): boolean;

  function ISArcExExtract(DiskNumber: Integer; CfgFile, WorkPath: Widestring): boolean;


2. example:

// Disk Adding part
repeat
  if FileExists(ExpandConstant('{src}\data1.bf')) then
  begin
    ISArcDiskAddingFalied:= ISArcExAddDisks(ExpandConstant('{src}\data1.bf'),
              '{#DiskPassword}', ExpandConstant('{app}'));

    if ISArcDiskAddingFalied then break;
    ISArcExDiskCount := ISArcExDiskCount + 1;
  end;

  ...

  #ifdef Components
  if IsComponentSelected('something1\something2') then
  begin
    ISArcDiskAddingFalied:= ISArcExAddDisks(ExpandConstant('{src}\ConfigShit.bf'),
              '{#DiskPassword}', ExpandConstant('{userdocs}\BFGames'));

    if ISArcDiskAddingFalied then break;
    ISArcExDiskCount := ISArcExDiskCount + 1;
  end;

  ...

  #endif
until true;


.....
  // Extraction
 
  for i := 1 to ISArcExDiskCount do
  begin
    ISArcExError := not ISArcExExtract(i, ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\temp'));
    if ISArcExError then break;
  end;
.....


Code:

summary:

  data1.bf      --->    {app}
  ...
  configShit.bf  --->    {userdocs}\BFGames}
  ...


Note: just replacing the library (.dll) is not enough. update your previous scripts as well.


.

Cesar82 03-01-2023 03:03

Quote:

Originally Posted by audiofeel (Post 499646)
is everything done in a tricky way there. can't you figure it out without 100 grams. if you change the constant, it will change for all archives
Code:

ISArcExDiskCount:= 0;
      if FileExists(ExpandConstant('{src}\{#Data1Path}')) then
      begin
        ISArcDiskAddingFalied:= ISArcExAddDisks(ExpandConstant('{src}\{#Data1Path}'), '{#DiskPassword}');
        if ISArcDiskAddingFalied then break;
        ISArcExDiskCount:= ISArcExDiskCount + 1;
      end;
        for i:= 1 to ISArcExDiskCount do
        begin
          ISArcExError:= not ISArcExExtract(i, ExpandConstant('{app}\'), ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}'));
          if ISArcExError then break;
        end;


Code:

      ISArcExDiskCount:= 0;
      if FileExists(ExpandConstant('{src}\{#Data1Path}')) then
      begin
       
ISArcDiskAddingFalied:= ISArcExAddDisks(ExpandConstant('{src}\{#Data1Path}'), '{#DiskPassword}');
        if ISArcDiskAddingFalied then break;
        ISArcExDiskCount:= ISArcExDiskCount + 1;
      end;
      for i:= 1 to ISArcExDiskCount do
      begin
        case
i of
         
1 : ISArcExError:= not ISArcExExtract(i, ExpandConstant('{app}\'), ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}'));
          2 : ISArcExError:= not ISArcExExtract(i, ExpandConstant('{userdocs}\'), ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{userdocs}'));
          3 : ISArcExError:= not ISArcExExtract(i, ExpandConstant('{tmp}\'), ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{tmp}'));
          else
         
ISArcExError:= not ISArcExExtract(i, ExpandConstant('{app}\'), ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}'));
        end;
        if ISArcExError then break;
      end;

first data file to {app}
second data file to {userdocs}
third data file to {tmp}
all others data file to {app}

BLACKFIRE69 03-01-2023 03:31

Quote:

Originally Posted by BLACKFIRE69 (Post 499648)
ok, i'll let you change the output directory when adding disks. ;)

Code:

<--- Change --->

1. syntax:

  function ISArcExAddDisks(Inputfile, Password, OutputPath: Widestring): boolean;

  function ISArcExExtract(DiskNumber: Integer; CfgFile, WorkPath: Widestring): boolean;


2. example:

// Disk Adding part
repeat
  if FileExists(ExpandConstant('{src}\data1.bf')) then
  begin
    ISArcDiskAddingFalied:= ISArcExAddDisks(ExpandConstant('{src}\data1.bf'),
              '{#DiskPassword}', ExpandConstant('{app}'));

    if ISArcDiskAddingFalied then break;
    ISArcExDiskCount := ISArcExDiskCount + 1;
  end;

  ...

  #ifdef Components
  if IsComponentSelected('something1\something2') then
  begin
    ISArcDiskAddingFalied:= ISArcExAddDisks(ExpandConstant('{src}\ConfigShit.bf'),
              '{#DiskPassword}', ExpandConstant('{userdocs}\BFGames'));

    if ISArcDiskAddingFalied then break;
    ISArcExDiskCount := ISArcExDiskCount + 1;
  end;

  ...

  #endif
until true;


.....
  // Extraction
 
  for i := 1 to ISArcExDiskCount do
  begin
    ISArcExError := not ISArcExExtract(i, ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\temp'));
    if ISArcExError then break;
  end;
.....


Code:

summary:

  data1.bf      --->    {app}
  ...
  configShit.bf  --->    {userdocs}\BFGames}
  ...


Note: just replacing the library (.dll) is not enough. update your previous scripts as well.


.


guys, can you tell me is this lib detected as a virus?


All times are GMT -7. The time now is 00:35.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2026, vBulletin Solutions Inc.
FileForums @ https://fileforums.com