![]() |
ISApexEx - Unified API for 7z / FreeArc / RAR Extraction and Xdelta3 Patching
11 Attachment(s)
ISApexEx v0.1 Beta 2 Unified Archive Extraction & Patching API for Inno Setup 7-Zip · FreeArc · RAR · Xdelta3 · HDiffPatch one DLL · Win32 · by BLACKFIRE69 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━ ▌ OVERVIEW ISApexEx is a high-performance unified library crafted for Inno Setup. It integrates five engines 7-Zip, FreeArc, RAR, Xdelta3, and HDiffPatch into a single DLL with seamless cross-format progress tracking. Mix and match .7z, .zip, .arc, .bf, .rar and xdelta3 / HDiff patch operations in one installer with continuous progress across all of them. ▌ TECHNICAL SPECIFICATIONS
Code:
╭──────────┬──────────┬──────────────────────┬─────────────────────────────╮▌ KEY FEATURES ✦ Unified Multi-Format Support Handle .7z, .zip, .arc, .bf, .rar and xdelta3 / HDiff patches from one DLL. Format is auto-detected from the file extension no manual engine selection. ✦ Top-Level AND Split / Multi-Volume Support Every format extracts both as a single top-level archive and as a split set: 7z split volumes (.7z.001 ), RAR multi-volume (.partNN.rar / .rNN), FreeArc disk-span volumes. Parts may even be scattered across different folders or discs. ✦ Universal File Browsing (Locate a Missing Archive or Part) When ISApexEx can't find a file it needs a top-level archive of ANY format, a 7z split part, a RAR volume, or a FreeArc spanned volume it lets the user locate it, then resumes. Built-in native browse dialog, or your own themed dialog via ISApexExSetDiskRequestCallback (one callback covers every case). ✦ Lazy DLL Loading Only the native engine DLLs actually needed are loaded at runtime. Using only .7z and .rar? UnArc_32.dll, xdelta3_wrapper.dll and hpatchz_wrapper.dll are never touched. ✦ Cross-Format Progress Overall progress (01000) spans all registered disks regardless of format. A mixed .arc + .7z + .rar + xdelta3 + .hdiff setup shows one smooth, continuous bar. ✦ Custom Extension Mapping Archives don't have to use standard extensions map any extension to any engine via ISApexExRegisterExtension before adding disks. Code:
ISApexExRegisterExtension('.bin', APEX_ARC_7Z); // .bin -> 7z engineReal-time Overall Progress, Current Disk Progress, and Extracted/Total File Counts. ✦ Performance Metrics Accurate Current and Average Speed (MB/s). ✦ Time Management "Time Remaining" + "Elapsed Time" with three display formats (00:00:00 / x hr y min / x hours y minutes). ✦ Process Control Suspend, Resume, or Stop the extraction safely at any point. ✦ UI Stability "Calc Accuracy" reduction logic prevents erratic jumping in speed and ETA displays. ✦ Localization Switch languages at runtime via external .ini files. Ships with English and Russian. ✦ Event Callback System Optional callback fires on discrete lifecycle events engine loaded, disk started/finished/failed, error, all done. Great for logging and diagnostics. ✦ File-Based Logging Thread-safe logging with configurable verbosity (Off, Error, Info, Verbose). ✦ Thread Priority Control Set extraction thread priority before each disk (Idle Highest). ✦ Disk Space Pre-Check Verify free space on the output drive before extraction per-disk or all disks at once. ✦ Progress Persistence / Resume (Crash Recovery) On a crash (power loss, kill, BSOD) the library has saved state after each disk; on relaunch ISApexExLoadResume validates and restores progress, already-done disks are skipped. CRC32-checked, auto-deleted on success, fully opt-in (zero overhead unless ISApexExSetResumeFile is called). ▌ ENGINE FEATURES ◆ 7-Zip Normal + split archives (.7z.001 ), ZIP via the same engine, password-protected archives. The 7-Zip API requires split parts to be merged first, so ISApexEx builds a local temp file. Single directory → auto-detected; parts spread across folders → set the total with ISApexExSetSplitPartCount; override the temp location with ISApexExSetSplitTmpPath. ◆ FreeArc Normal .arc/.bf, selective folder extraction (ISApexExAddDisksEx), external processor integration (SREP, XTool, LOLZ, NZ, RZ ), config file + work path (ISApexExExtractEx), password-protected archives, and native disk-span support via cls-diskspan v2.0 when a volume is missing, the user is prompted to locate it and extraction resumes. Ship cls-diskspan.dll next to ISApexEx.dll; no ClsFunc* calls needed. ◆ RAR Normal + multi-volume archives (.part01.rar ) with automatic volume switching (no extra API calls), password-protected archives. ◆ Xdelta3 Patching
◆ HDiffPatch [NEW]
▌ SUPPORTED FILE STRUCTURES Code:
[ROOT]Code:
╭────────────────────────────┬──────────────────┬──────────────────╮
▌ QUICK START EXAMPLES Example 1 Mixed Archives (7z + FreeArc + RAR) Code:
#include "ISApexEx.iss"Code:
if not AddArchiveEntry('data1.7z') then Exit; // base archiveCode:
if not AddArchiveEntry('data1.7z') then Exit; // contains original game.exeCode:
if not AddArchiveEntry('Sonic 2.7z.001') then Exit;Code:
if not AddArchiveEntry('data1.7z') then Exit;Code:
ISApexExSetResumeFile(ExpandConstant('{src}\ISApexEx.resume'));One callback handles EVERY case: a missing top-level archive of any format, a 7z split part, a RAR volume, or a FreeArc spanned volume. Runs on the main thread (MsgBox / GetOpenFileName / a custom TForm are all safe). Omit it to use the built-in native browse. Code:
function MyDiskRequest(const Filename, CurrentDir: WideString): WideString;A full runnable version is in bin\ISApexEx_Example_HDiff.iss. Ship hpatchz_wrapper.dll next to the other engine DLLs. Code:
if not AddArchiveEntry('data1.7z') then Exit; // sources + .hdiff patches
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━ Feedback, bug reports, and edge cases are all welcome. . |
First of, I'd like to say. Amazing work I just have one small request or a query rather, is it possible to get 64-bit builds? Thanks.
|
Quote:
It's possible to have x64 builds, but the problem is FreeArc. Razor, do you have any tested x64 versions of unarc.dll? |
Quote:
|
Quote:
Quote:
Quote:
|
I'm well aware but the reason I would like a 64-bit build is because I want there to be tools specifically designed to work natively with Inno Setup 7 and I believe projects like this one are perfect foundation that might kick things off, of course they'll be challenges ahead but those are for the people who might be interested with this route to deal with and all I want is just availability.
|
Quote:
The lack of support for `cls-srep.dll` , `cls-lolz.dll`, etc. also leaves a huge gap. Without support for them, ISApexEx becomes more of a toy tool than a top-tier tool. Because of that, the transition to Inno Setup 7 x64 won't be particularly easy or smooth from this side, especially since many of the plugins we commonly use, such as `botva2.dll`, are still x86, and some of them haven't received updates in *years*. So, I do plan to release an x64 build of ISApexEx, but for now, I'd like to buy some time before releasing it. In the meantime, we can try compiling the entire FreeArc project as an x64 build. Hopefully, we'll also find a solid and practical way to handle the existing x86 CLS plugins whose development has already stopped, so they can still be supported in an x64 host. |
Quote:
https://github.com/Krinkelss/botva2/tree/master |
ISApexEx Update
ISApexEx Update ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━ ▌ v0.1 Beta 2 (Build 6A3DC100) ✦ Added
✦ Changed BREAKING xdelta patch exports renamed (signatures unchanged): Code:
╭──────────────────────────┬──────────────────────────────╮✦ Changed
✦ Fixed
✦ Upgrade Notes
✦ Download
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━ |
| All times are GMT -7. The time now is 08:49. |
Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2026, vBulletin Solutions Inc.
FileForums @ https://fileforums.com