|
#1
|
||||
|
||||
|
IS7zEx - Advanced 7-Zip Extraction API for Inno Setup
====================================== Code:
> Overview: IS7zEx is a high-performance extraction library meticulously crafted for Inno Setup. It provides a robust interface for handling 7z archives, offering advanced progress tracking, multi-part archive support, and precise extraction metrics that standard tools often lack. > Specifications: - Version : v0.1 - Author : BLACKFIRE69 - Build : 6997A400 - Compatibility : Inno Setup v6.0 or later (Required) - License : Proprietary (See LICENSE file for details) - Tested Engine : 7-Zip v26.00 (Latest) Code:
> Key Features:
- Flexible Extraction Modes: Full support for Normal archives and
Splitted (.001, .002) archives.
- 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:
> Important - Split Archive Handling: Unlike the RAR format, the 7-Zip API requires split parts to be merged before extraction can begin. IS7zEx handles this by creating a local temporary file. - Single Directory: If all parts (.001, .002...) are in one folder, detection is automatic. - Multiple Directories: If parts are spread across different disks (nested structure), use IS7zExSetSplitPartCount to manualy define the total part count. - Temporary Path: You can override the temp file location using IS7zExSetSplitTmpPath if the destination drive lacks sufficient space for both the temp file and extracted data. Code:
> Supported File Structures: [ROOT] ├── data1.7z ├── Disks/ │ ├── Disk1/ │ │ ├── Sonic 2.7z.001 │ │ └── Sonic 2.7z.002 │ └── Disk2/ │ ├── Sonic 2.7z.003 │ └── Sonic 2.7z.004 ├── data3.7z └── Setup.exe > Distribution Files: - IS7zEx.dll Core API Library. - 7z_32.dll 7-Zip engine integration. - IS7zEx.iss Header for Inno Setup. - English.ini / Russian.ini Language configuration files. * Example 1: Normal Archives Code:
{Code]
#include "IS7zEx.iss"
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
{ - ADDING DISKS - }
repeat
if not AddArchiveEntry('data1.7z') then Break;
if not AddArchiveEntry('data2.7z') then Break;
if not AddArchiveEntry('data3.7z') then Break;
until true;
{ - INITIALIZE & EXTRACT - }
if IS7zExInitEx(2, @ProgressCallbackEx) then
begin
repeat
for i := 1 to IS7zExDiskCount do
begin
if not IS7zExExtract(i) then Break;
end;
until true;
IS7zExStop;
end;
end;
end;
Code:
{Code]
#include "IS7zEx.iss"
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
{ - ADDING DISKS - }
repeat
if not AddArchiveEntry('data1.7z') then Break;
// All parts (.001, .002, etc.) are in the same directory.
// Detection is automatic.
if not AddArchiveEntry('Sonic 2.7z.001') then Break;
if not AddArchiveEntry('data3.7z') then Break;
until true;
{ - INITIALIZE & EXTRACT - }
if IS7zExInitEx(2, @ProgressCallbackEx) then
begin
repeat
for i := 1 to IS7zExDiskCount do
begin
if not IS7zExExtract(i) then Break;
end;
until true;
IS7zExStop;
end;
end;
end;
Code:
{Code]
#include "IS7zEx.iss"
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
{ - ADDING DISKS - }
repeat
if not AddArchiveEntry('data1.7z') then Break;
if not AddArchiveEntry('Sonic2.7z.001') then
Break
else
begin
// Required for split parts spread across multiple directories
IS7zExSetSplitPartCount(IS7zExDiskCount, 10);
// Set custom temp path if disk space is limited
IS7zExSetSplitTmpPath(IS7zExDiskCount, ExpandConstant('{src}'));
end;
if not AddArchiveEntry('data3.7z') then Break;
until true;
{ - INITIALIZE & EXTRACT - }
if IS7zExInitEx(2, @ProgressCallbackEx) then
begin
repeat
for i := 1 to IS7zExDiskCount do
begin
if not IS7zExExtract(i) then Break;
end;
until true;
IS7zExStop;
end;
end;
end;
Last edited by BLACKFIRE69; 19-04-2026 at 15:28. |
| The Following 6 Users Say Thank You to BLACKFIRE69 For This Useful Post: | ||
audiofeel (08-04-2026), Cesar82 (08-04-2026), Dunnowho69 (08-04-2026), Ele (14-04-2026), Razor12911 (09-04-2026), ScOOt3r (19-04-2026) | ||
| Sponsored Links |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| ISRarEx - Advanced RAR Extraction API for Inno Setup | BLACKFIRE69 | Conversion Tutorials | 2 | 26-04-2026 10:58 |
| BlackBox v2 | y_thelastknight | Conversion Tutorials | 567 | 11-03-2025 07:16 |
| Advanced installer or inno setup | demon964 | Conversion Tutorials | 0 | 12-11-2024 04:28 |
| Useful Dll for Inno Setup users | peterf1999 | Conversion Tutorials | 88 | 01-12-2017 16:00 |
| Converter Lite for Advanced Setup Creator | Razor12911 | Conversion Tutorials | 3 | 11-01-2017 09:54 |