View Full Version : ISArcEx - A FreeArc Archive Extractor Plugin for InnoSetup
BLACKFIRE69
12-03-2022, 01:34
ISArcEx - Advanced FreeArc Extraction API for Inno Setup
========================================
> 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
> 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.
> 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.
.
https://www.upload.ee/image/13991445/2022-03-24_142029.jpg
what is the problem?
BLACKFIRE69
28-03-2022, 13:09
https://www.upload.ee/image/13991445/2022-03-24_142029.jpg
what is the problem?
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
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
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.
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".
.
Hi BLACKFIRE69
How to remove this section?
https://upload.cc/i1/2022/07/26/LaJkl8.jpg
BLACKFIRE69
26-07-2022, 08:21
Hi BLACKFIRE69
How to remove this section?
https://upload.cc/i1/2022/07/26/LaJkl8.jpg
1. Comment the second line of [types] section.
[Types]
Name: full; Description: Full installation; Flags: iscustom
;Name: custom; Description: Custom installation;
2. Remove types from the [Components] section.
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:
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
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:
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. ;)
...
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
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
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
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. ;)
<--- 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.b f'),
'{#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;
.....
summary:
data1.bf ---> {app}
...
configShit.bf ---> {userdocs}\BFGames}
...
Note: just replacing the library (.dll) is not enough. update your previous scripts as well.
.
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
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;
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
ok, i'll let you change the output directory when adding disks. ;)
<--- 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.b f'),
'{#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;
.....
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?
BLACKFIRE69
05-01-2023, 07:40
VER: 0.4.0.1
What's new:
- Improved performance, percentage and times.
( this version is not compatible with the old version (v.0.4) )
guys, can you tell me is this lib detected as a virus?
My K7 AV didn't detect anything..
VirusTotal report the following things.
Masquerade
05-01-2023, 10:13
I've tried updating my script to reflect the new changes however now for some reason the error flag will instantly trigger leading to a failed installation.
There is no log written or IsArcEx error message box that could indicate the problem.
Please may you take a look at my changes and see if anything is incorrect? The old strings are commented out with //.
Thank you!
//function ISArcExAddDisks(Inputfile, Password: Widestring): boolean;
function ISArcExAddDisks(Inputfile, Password, OutputPath: Widestring): boolean;
external 'ISArcExAddDisks@files:ISArcEx.dll stdcall';
//function ISArcExExtract(DiskNumber: Integer; OutputPath, CfgFile, WorkPath: Widestring): boolean;
function ISArcExExtract(DiskNumber: Integer; CfgFile, WorkPath: Widestring): boolean;
external 'ISArcExExtract@files:ISArcEx.dll stdcall';
#ifdef Data1
if FileExists(ExpandConstant('{src}\{#Data1}')) then
begin
ISArcDiskAddingFalied:= ISArcExAddDisks(ExpandConstant('{src}\{#Data1}'), '{#DiskPassword}', ExpandConstant('{app}'));
if ISArcDiskAddingFalied then break;
ISArcExDiskCount:= ISArcExDiskCount + 1;
end;
#endif
for i:= 1 to ISArcExDiskCount do
begin
//ISArcExError := not ISArcExExtract(i, ExpandConstant('{app}\'), ExpandConstant('{tmp}\ARC.INI'), ExpandConstant('{app}'));
ISArcExError := not ISArcExExtract(i, ExpandConstant('{tmp}\ARC.INI'), ExpandConstant('{app}'));
if ISArcExError then break;
end;
BLACKFIRE69
05-01-2023, 13:27
I've tried updating my script to reflect the new changes however now for some reason the error flag will instantly trigger leading to a failed installation.
There is no log written or IsArcEx error message box that could indicate the problem.
Please may you take a look at my changes and see if anything is incorrect? The old strings are commented out with //.
Thank you!
//function ISArcExAddDisks(Inputfile, Password: Widestring): boolean;
function ISArcExAddDisks(Inputfile, Password, OutputPath: Widestring): boolean;
external 'ISArcExAddDisks@files:ISArcEx.dll stdcall';
//function ISArcExExtract(DiskNumber: Integer; OutputPath, CfgFile, WorkPath: Widestring): boolean;
function ISArcExExtract(DiskNumber: Integer; CfgFile, WorkPath: Widestring): boolean;
external 'ISArcExExtract@files:ISArcEx.dll stdcall';
#ifdef Data1
if FileExists(ExpandConstant('{src}\{#Data1}')) then
begin
ISArcDiskAddingFalied:= ISArcExAddDisks(ExpandConstant('{src}\{#Data1}'), '{#DiskPassword}', ExpandConstant('{app}'));
if ISArcDiskAddingFalied then break;
ISArcExDiskCount:= ISArcExDiskCount + 1;
end;
#endif
for i:= 1 to ISArcExDiskCount do
begin
//ISArcExError := not ISArcExExtract(i, ExpandConstant('{app}\'), ExpandConstant('{tmp}\ARC.INI'), ExpandConstant('{app}'));
ISArcExError := not ISArcExExtract(i, ExpandConstant('{tmp}\ARC.INI'), ExpandConstant('{app}'));
if ISArcExError then break;
end;
yes, there's something incorrect. see the hint below. ;)
v0.4.0.0 (Old) >> ISArcDiskAddingFalied
v0.4.0.1 (New) >> ISArcDiskAddingSuccess
let me know if you need more help.
There is no log written or IsArcEx error message box that could indicate the problem.
add this before the ISArcExInit. you'll see the error. (sorry, i put the error message in the wrong place in the script)
if ISArcExDiskCount = 0 then
MsgBox('There is no any archive found for unpacking.', mbError, MB_OK);
Typo error?? --> ISArcDiskAddingFalied ! Correct? No. --> ISArcDiskAddingFailed
Masquerade
05-01-2023, 15:15
yes, there's something incorrect. see the hint below. ;)
v0.4.0.0 (Old) >> ISArcDiskAddingFalied
v0.4.0.1 (New) >> ISArcDiskAddingSuccess
Maybe I am not following, but I don't see how changing the name of the Boolean for the disk adding command will fix the issue.
BLACKFIRE69
05-01-2023, 21:11
Maybe I am not following, but I don't see how changing the name of the Boolean for the disk adding command will fix the issue.
i know it's a bit confusing. but note that it's not just changing the variable name, the ISArcExAddDisks function has also changed.
1).
in the previous version (v0.4) ISArcExAddDisks function returns error state when adding the disks.
i.e. it returns true if a disk was added unsuccessfully (failed). so you need to catch the error state.
ISArcDiskAddingFalied:= ISArcExAddDisks(...);
if ISArcDiskAddingFalied then break;
2).
the new version (v0.4.0.1) returns the success of adding disks.
i.e. it returns true if a disk was added successfully.
ISArcDiskAddingSuccess:= ISArcExAddDisks(...);
if not ISArcDiskAddingSuccess then break;
3).
this is the summarized difference.
v0.4
procedure CurStepChanged(CurStep: TSetupStep);
begin
...
ISArcDiskAddingFalied := True;
...
repeat
if FileExists(...) then
begin
ISArcDiskAddingFalied:= ISArcExAddDisks(...);
if ISArcDiskAddingFalied then break;
ISArcExDiskCount := ISArcExDiskCount + 1;
end;
...
until true;
if (not ISArcDiskAddingFalied) and ISArcExInit(...) then
begin
...
end;
end;
v0.4.0.1
procedure CurStepChanged(CurStep: TSetupStep);
begin
...
ISArcDiskAddingSuccess := False;
...
repeat
if FileExists(...) then
begin
ISArcDiskAddingSuccess:= ISArcExAddDisks(...);
if not ISArcDiskAddingSuccess then break;
ISArcExDiskCount := ISArcExDiskCount + 1;
end;
...
until true;
if (ISArcDiskAddingSuccess) and ISArcExInit(...) then
begin
...
end;
end;
Masquerade
06-01-2023, 01:48
@BLACKFIRE69
Thank you for the expansion of your little hint (steps 1 and 2) it was more than sufficient to help me understand the logic behind the instructions. Thanks again and apologies.
BLACKFIRE69
20-03-2023, 11:48
ISArcEx - Quality Updates
How to Update:
- Just replace the old DLL(v0.4.0.1 - 2023-Jan-05)
with the new DLL(v0.4.0.1 - 2023-Mar-20).
Tihiy_Don
15-05-2023, 13:15
Excellent DDL, switched to it from isDone. Thank you.
Tihiy_Don
22-06-2023, 23:20
I ask you to change the ISArcExCancel variable to boolean to match the general concept by analogy with ISArcExError.
Accordingly, if the installation was canceled, it is not an error.
Why not cancel the example and make the download of an excellent unpacking by example: if (CurStep = ssPostInstall) and (ISArcExCancel>0), then....?
BLACKFIRE69
01-08-2023, 07:53
Update Available!
What's New
- Some improvements.
* How to update?
>> just replace the old DLL with the new one.
.
Update Available!
What's New
- Some improvements.
* How to update?
>> just replace the old DLL with the new one.
.
Sir, plz add button click sounds to the script.
BLACKFIRE69
04-09-2023, 04:44
ISArcEx v0.4.0.1 - 2023-Sep-04
What's new:
* Added 'TotalFile' and 'CurrentFiles' into the callback function.
* Added new functions.
i. procedure ISArcExReduceCalcAccuracy;
- this procedure plays a crucial role in stabilizing the 'Time Remaining' and
'Data Transfer Speed' calculations, ensuring they change
smoothly and not too rapidly.
ii. function ISArcExInitEx(WinHandle: Longint; TimeFormat: Integer;
Callback: TCallbackEx): Boolean;
iii. procedure ISArcExCallbackInterval(MSec: Cardinal);
* This update may support long paths and special characters in the path (not tested).
* Some improvements and bug fixing.
type
TCallback = function(OverallPct, CurrentPct, DiskTotalMB, DiskExtractedMB: Integer;
DiskName, CurrentFile, TimeStr1, TimeStr2, TimeStr3, Speed: WideString): LongWord;
type
TCallbackEx = function(OverallPct, CurrentPct, DiskTotalMB, DiskExtractedMB,
TotalFiles, CurFiles: Integer; DiskName, CurrentFile, TimeStr1, TimeStr2,
TimeStr3, Speed: WideString): LongWord;
.
Hi @audiofeel @Blackfire69,
I use FMXModule.iss which already has IsArcEx injected. So I don't have to import IsArcEx.dll. Can anyone of you provide the latest Module with the following changes included. I also observed that speed change was an issue, even reported it way back to audiofeel as well. Thanks for the fix.
BLACKFIRE69
12-09-2023, 08:25
* Added Average Speed.
type
TCallback = function(OverallPct, CurrentPct, DiskTotalMB, DiskExtractedMB: Integer;
DiskName, CurrentFile, RemainsTime, ElapsedTime, CurSpeed, AvgSpeed: WideString): LongWord;
type
TCallbackEx = function(OverallPct, CurrentPct, DiskTotalMB, DiskExtractedMB, TotalFiles, CurFiles: Integer;
DiskName, CurrentFile, RemainsTime, ElapsedTime, CurSpeed, AvgSpeed: WideString): LongWord;
so, can you guys test this?
.
@Blackfire69
Thank you soo much.. _/\_
It was a much needed feature to counter speed drop at disks transitions.
BLACKFIRE69
13-03-2024, 04:54
ISArcEx - Minor Update
* Some minor improvements.
* ISArcExCleanUp:
- This function is deprecated; you can still call it, but it will have no effect.
* Added new function ISArcExAddDisksEx:
- function ISArcExAddDisksEx(InputFile, Password, BaseDirInArc, OutputPath: WideString): Boolean;
- Now you can extract items (files/folders) from a specific folder within the archive.
- Example: Consider the following structure of 'data-langs.bin':
--------------------------------------------------------------------------------------
data-langs.bin:
> Eng
bin-eng (a folder)
file-eng.mp4
{other_items}
> Rus
bin-rus (a folder)
file-rus.mp4
{other_items}
{rest_of_the_items_in_the_archive}
--------------------------------------------------------------------------------------
* if you call 'ISArcExAddDisksEx' like this:
ISArcExAddDisksEx('C:\Test\data-langs.bin', 'MyPwd', 'Eng', 'D:\Test\Output');
* it'll extract items only from the 'Eng' folder (bin-eng, file-eng.mp4, etc.)
into the destination (D:\Test\Output), and other items in the archive will be ignored.
* And free from false-positive trojan pop-ups.
.
BLACKFIRE69
13-03-2024, 05:23
^^^
i forgot to mention some facts regarding 'ISArcExAddDisksEx' in the above post.
* 'BaseDirInArc' is case-sensitive.
- 'Bin' and 'bin' are not the same.
* You can also use it with sub-dirs like this:
- ISArcExAddDisksEx('C:\Test\data-langs.bin', 'MyPwd', 'Bin64\Eng', 'D:\Test\Output');
I'm very new to directly interacting with Inno and am trying to start here. So I tried to add the razor stdio patch, some xtool libraries, and 7zdll by adding them to arc.ini, the definitions, and the 2 locations where those definitions are checked. I also changed the name of one of the disk file names in the adding disks section. When I run it, it hangs after unpacking the temp folder for about 25 seconds and gives me an error. This works just fine when unpacking it with my own FreeArc setup. The error code is -11. After changing everything back to what it was before and only using built in compressors, I still get the same error. Am I doing something wrong here?
Dragonis40
30-04-2024, 11:00
Good evening! I currently use last version of IsArcEx.dll in my scripts, but I often notice that "average speed" parameter is negative, while "current speed" parameter is constant and it seems doesn't change. Is it a bug? Do I forget anything in my code?
Thanks for your reply!
BLACKFIRE69
14-05-2024, 04:22
Good evening! I currently use last version of IsArcEx.dll in my scripts, but I often notice that "average speed" parameter is negative, while "current speed" parameter is constant and it seems doesn't change. Is it a bug? Do I forget anything in my code?
Thanks for your reply!
ISArcEx Update - [2024-May-14]
* Updated 'AvgSpeed'.
* Added two new functions:
- function ISArcExGetTotalSizeMBOfAllDisks: Integer;
- function ISArcExGetExtractedSizeMBOfAllDisks: Integer;
The first post has been updated.
Masquerade
20-05-2024, 13:11
@BLACKFIRE69
You may remember I had some issues with the font in my setup not displaying correctly. Strangely, since yesterday this issue has fixed itself. There are two possible solutions:
- my AMD graphics driver updated
- I changed my monitor configuration so my second monitor is on my left instead of on my right.
Do either of these make any sense to you? Having a second monitor on the left bugs the CODEX installer so it does have some weird impact on Inno setup.
BLACKFIRE69
21-05-2024, 03:12
@BLACKFIRE69
You may remember I had some issues with the font in my setup not displaying correctly. Strangely, since yesterday this issue has fixed itself. There are two possible solutions:
- my AMD graphics driver updated
- I changed my monitor configuration so my second monitor is on my left instead of on my right.
Do either of these make any sense to you? Having a second monitor on the left bugs the CODEX installer so it does have some weird impact on Inno setup.
yes, i remember that, but it's related to the FMXInno, not to ISArcEx, right?
it's interesting that your issues with InnoSetup resolved after updating your graphics drivers and changing your dual monitor configuration.
* Graphics Driver Update:
updating graphics drivers can resolve a wide range of issues. it's possible that the older driver had problems with rendering or handling specific display configurations, which were resolved in the new driver update.
* Dual Monitor Configuration:
changing the position of your secondary monitor could have reset or corrected certain display settings. sometimes, the operating system or the graphics driver might have trouble correctly rendering content on a multi-monitor setup, especially if the setup has non-standard configurations or resolutions. by changing the monitor layout, the system may have reinitialized the display settings, fixing the rendering issues.
* Resolution and DPI Settings:
alterations in monitor configuration can also impact the resolution and DPI settings. if the secondary monitor had a different DPI setting or resolution, changing its position could have forced the system to re-evaluate and apply new settings, potentially fixing issues related to rendering.
Masquerade
23-05-2024, 01:06
Oh, apologies, didn't mean to post in the wrong topic. I guess I got confused :eek:
Dragonis40
14-08-2024, 05:15
Good morning everybody! I currently use IsArcx.dll for my setup.exe, but i've noticed a couple of things. When .dll file counts the files included in the .bin file that is being installed, it counts the number of files AND the number of folders included in videogame' directory.
Concerning the total aount of files, it counts the total number of files and the number of folders times the number of total .bin files. Is it like thtat? Why? Is it a bug?
BLACKFIRE69
14-12-2024, 06:03
This is an example of how to use ISArcEx.dll with an installer created in Delphi, intended to load the DLL from the temp directory, as requested.
LibPath := IncludeTrailingPathDelimiter(ExtractFilePath(Param Str(0))) + 'bin\';
if not Assigned(ISArcExCl) then
ISArcExCl := TISArcExM.Create(LibPath);
.
EmirHasan
18-01-2025, 01:27
Hello, first of all thank you very much for this wonderful forum I have benefited from it a lot and I apologize if my English is weak, I will talk in detail about the problem I am facing which is: I was working on Redshank[20.08].iss and I was working and compressing files using FreeARC and the following command line:
@echo off
freearc a -r -m9 -ep1 -hp -pOceanBox443 OceanData.bin * -xzNewRun.bat
pause
This topic is successful, but I used a more powerful file compression tool "Mini Compressor" and tried compression using the following tools:
precomp+nz+static2+XLolz/$bitmapz=bmpz/$bink=bink/$void=void/$photo=jpg/$ogg=ogg/$wavz=wvp/$mp3=mpz
But when exporting the Setup file from Scirpt Inno, I get the clear error in the image :
https://www2.0zz0.com/2025/01/18/08/864756994.png (https://www.0zz0.com)
I tried to add a modification to the arc.ini text:
[External compressor : precomp]
header = 0
packcmd = "PreComp\precomp" -cn -intense -ostdout <stdout> $$arcdatafile$$.tmp
unpackcmd = "PreComp\precomp" -ostdout -r stdin <stdin> <stdout>
But I also did not succeed, and this is the closest topic in the forum to solving the problem
Hi there...
InnoSetup 6.4.0 / Win11 : Does anyone have the same problems with the example script ?!
> "MainForm" = identifier error
> using "IsArcExChangeLanguage" = Windows Defender popup
(see pictures)
greetz
Hi audiofeel,
thx for the answer, with your advice it`s working in IS6.4.0...
-------
But:
I want to use command IsArcExChangeLanguage :
because using different ini-files , I can let translate the messages in different languages while installing...
>> Windows Defender popup :
Solved >> "every pc restart is good" + new GUID :rolleyes: > working now
*perhaps it was the security block in the file properties too
EmirHasan
18-01-2025, 04:42
Most likely, there are no necessary files to help with unpacking in the Unpack folder.
Thanks for the help, all the necessary files to help with unpacking in the Unpack folder
https://www2.0zz0.com/2025/01/18/12/132161779.png (https://www.0zz0.com)
https://www2.0zz0.com/2025/01/18/12/186811629.png (https://www.0zz0.com)
https://www2.0zz0.com/2025/01/18/12/963324439.png (https://www.0zz0.com)
These are the files I have.
Behnam2018
19-01-2025, 19:54
Hello, I want this script with music. Can you help me please?
I want to add music Button OFF- ON to this script
simple to this setup
Hello, I want this script with music. Can you help me please?
Hi,
I attached example scripts below...
(search for "New Lines" in the script for seeing the changes)
greeting
Nordi
ISArcEx - Minor Update
* if you call 'ISArcExAddDisksEx' like this:
ISArcExAddDisksEx('C:\Test\data-langs.bin', 'MyPwd', 'Eng', 'D:\Test\Output');
.
- Question 1 -
Hi Community / Hi Blackfire69,
I have a problem with the names of the files to be extracted.
>> TEST SCRIPT ATTACHED
Description:
In the attached image you can see that something has been selected for installation.
During the installation (extraction), however, a different file from the same archive is displayed.
> But in the end the correct file has been extracted.
I hope, someone can help here.
kind regards
Nordi
- Question 2 -
Hi Community / Hi Blackfire69,
I have a second problem with ISArcExAddDisksEx and the shown sizes of the files to be extracted.
>> TEST SCRIPT : ONE POST ABOVE
Description:
In the attached image you can see :
during the installation (extraction), however, a different size from archive is displayed.
(Note: three different bf-files, not single one)
I hope, someone can help here.
kind regards
Nordi
al comprimir usando
arc.exe a -i1 -ep1 -r -ed -s; -w.\z_temp -m=xtool+srep+lolz data.arc folder
me da error la instalacion
nodesire7
07-09-2025, 05:13
What is the packaging tool for "ISArcEx"? I need a tool that can package into .bin format. Can anyone recommend one?
Masquerade
10-09-2025, 22:33
Uhhhh, there's only one. FreeArc.
is there any way to unpack multiple archives at once (in parallel) using this?
audiofeel
03-04-2026, 19:45
is there any way to unpack multiple archives at once (in parallel) using this?
Think of it like playing music. You can’t play two different songs at the same time using a single player - one has to wait. If you want parallel playback, you need two separate players.
It’s the same here: the unpacking engine works as a single "player". It processes one archive at a time. To unpack multiple archives in parallel, you would need multiple independent instances/processes doing the work simultaneously.
In the context of Inno Setup (and this library), that’s not supported - there’s effectively only one unpacking pipeline, so everything runs sequentially.
Think of it like playing music. You can’t play two different songs at the same time using a single player - one has to wait. If you want parallel playback, you need two separate players.
It’s the same here: the unpacking engine works as a single "player". It processes one archive at a time. To unpack multiple archives in parallel, you would need multiple independent instances/processes doing the work simultaneously.
In the context of Inno Setup (and this library), that’s not supported - there’s effectively only one unpacking pipeline, so everything runs sequentially.
i might have a clanky workaround that is to unpack the the big file using the installer and running a batch script on the background to unpack the other small archives. not tested but im pretty sure it will get the job done.
Sergey3695
04-04-2026, 15:31
is there any way to unpack multiple archives at once (in parallel) using this?
https://krinkels.org/resources/marc.412/
p.s. but you need to understand that the processor load is controlled manually. I might update this in the future. (queue).
https://krinkels.org/resources/marc.412/
p.s. but you need to understand that the processor load is controlled manually. I might update this in the future. (queue).
thanks for your work. could you please upload it here as i dont have permission to download it from krinkels :)
Sergey3695
05-04-2026, 14:02
thanks for your work. could you please upload it here as i dont have permission to download it from krinkels :)
Поставил 6.3.3 Inno Setup VCL. Пример Example.iss не работал. Нужно добавить DisableWelcomePage=no в секцию [Setup].
Что залито на сайте прикрепил выше.
Сильно много времени не выиграть, так как xtool и так сильно загружает процессор. Больше решает многопоточность и алгоритм.
BLACKFIRE69
08-04-2026, 14:25
ISArcEx - Advanced FreeArc Extraction API for Inno Setup
========================================
> 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
> 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.
> 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.
.
Dragonis40
13-04-2026, 02:05
Good morning, i have some issue concerning the new version of IsArcEx.dll. I've made some tests, but anytime i have the "unknown compression method" popup.
Attached a link containing a .bin file and .iss file modified in order to try to decompress .bin file. Bin file has been compressed using DiskSpan and bcm mask.
Where's the problem? Thanks in advance.
https://we.tl/t-xz30r9XdHkCKe2A3
audiofeel
13-04-2026, 07:03
@BLACKFIRE69
In general, the situation is as follows:
In the new version of IsArcEx, the parameter ISArcExReduceCalcAccuracy does not affect anything at all—at least not the FMX ProgressBar. You can set any values for it, and the progress bar simply ignores them.
The only parameter that visually affects the progress bar and its smoothness is ISArcExCallbackInterval, but the effect only becomes noticeable starting from a value of 55.
In general, the older version was better. There, it was enough to set:
ISArcExCallbackInterval(5);
ISArcExReduceCalcAccuracy(1);
and everything worked very smoothly.
I hope you can investigate this quickly.
Dragonis40
13-04-2026, 12:58
@BLACKFIRE69
In general, the situation is as follows:
In the new version of IsArcEx, the parameter ISArcExReduceCalcAccuracy does not affect anything at all—at least not the FMX ProgressBar. You can set any values for it, and the progress bar simply ignores them.
The only parameter that visually affects the progress bar and its smoothness is ISArcExCallbackInterval, but the effect only becomes noticeable starting from a value of 55.
In general, the older version was better. There, it was enough to set:
ISArcExCallbackInterval(5);
ISArcExReduceCalcAccuracy(1);
and everything worked very smoothly.
I hope you can investigate this quickly.
I've added "ISArcExCallbackInterval(5);" instruction for the new version of IsArcEx.dll, but nothing changed.
Dragonis40
15-04-2026, 04:11
Any solution? IsArcEx.dll v0.5 doesn't work on .bin files create by DiskSpan.
Dragonis40
17-04-2026, 11:18
https://fileforums.com/attachment.php?attachmentid=38947&stc=1&d=1737828016
Good evening. In the third version of the attached image (the one with two blu bars), current time of playing song is always zero. I also think that a mute button would be very confortable. Is it easy to fix?
BLACKFIRE69
19-04-2026, 15:35
ISArcEx v0.5 — Update 02 (LibOnly)
* Bug fixes only. No API changes.
- Fixed: `ISArcExReduceCalcAccuracy` did not perform as expected in v0.5
due to an internal architectural change introduced in this version.
This has been corrected and the function now behaves as intended again.
- Fixed: `ISArcExCallbackInterval` silently ignored some values,
causing progress updates to appear sluggish or unresponsive regardless
of the configured interval. The valid input range has been restored.
- Fixed: State inconsistency where accuracy reduction settings could
behave unpredictably across multiple init calls in the same session.
* Notes:
- Drop-in library replacement. No script-side changes required.
Dragonis40
20-04-2026, 09:02
Hello, unfortunally IsArcEx.dll Update 2 is still not working with .bin files created with DiskSpan :(
vBulletin® v3.8.11, Copyright ©2000-2026, vBulletin Solutions Inc.