![]() |
ISApexEx - Unified API for 7z / FreeArc / RAR Extraction and Xdelta3 Patching
11 Attachment(s)
ISApexEx v0.1 beta Unified Archive Extraction & Xdelta3 Patching API for Inno Setup 7-Zip · FreeArc · RAR · Xdelta3 one DLL · Win32 · by BLACKFIRE69 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━ ▌ OVERVIEW ISApexEx is a high-performance unified library crafted for Inno Setup. It integrates four engines 7-Zip, FreeArc, RAR, and Xdelta3 into a single DLL with seamless cross-format progress tracking. Mix and match .7z, .zip, .arc, .bf, .rar and xdelta3 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 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 and xdelta3_wrapper.dll are never touched. ✦ Cross-Format Progress Overall progress (01000) spans all registered disks regardless of format. A mixed .arc + .7z + .rar + xdelta3 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
▌ 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;
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━ 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? |
| All times are GMT -7. The time now is 17:44. |
Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2026, vBulletin Solutions Inc.
FileForums @ https://fileforums.com