|
|
|
|
|||||||
![]() |
|
|
Thread Tools | Search this Thread | Display Modes |
|
|
|
#1
|
||||
|
||||
|
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.
|
| The Following User Says Thank You to Razor12911 For This Useful Post: | ||
Cesar82 (25-06-2026) | ||
| Sponsored Links |
|
#2
|
||||
|
||||
|
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. |
| The Following User Says Thank You to BLACKFIRE69 For This Useful Post: | ||
audiofeel (26-06-2026) | ||
|
#3
|
||||
|
||||
|
Quote:
https://github.com/Krinkelss/botva2/tree/master
__________________
https://t.me/FMXInno |
| The Following User Says Thank You to audiofeel For This Useful Post: | ||
BLACKFIRE69 (26-06-2026) | ||
|
#4
|
||||
|
||||
|
ISApexEx Update ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━ ▌ v0.1 Beta 2 (Build 6A3DC100) ✦ Added
✦ Changed — BREAKING xdelta patch exports renamed (signatures unchanged): Code:
╭──────────────────────────┬──────────────────────────────╮ │ Old name (removed) │ New name │ ├──────────────────────────┼──────────────────────────────┤ │ ISApexExAddPatch │ ISApexExAddDeltaPatch │ │ ISApexExAddPatchDir │ ISApexExAddDeltaPatchDir │ ╰──────────────────────────┴──────────────────────────────╯ ✦ Changed
✦ Fixed
✦ Upgrade Notes
✦ Download
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━ |
| The Following 3 Users Say Thank You to BLACKFIRE69 For This Useful Post: | ||
|
#5
|
||||
|
||||
|
ISApexEx Update Unified Archive Extraction & Patching API for Inno Setup by BLACKFIRE69 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━ ▌ v0.1 Beta 3 (Build 6A406400) Compared to: v0.1 Beta 2 (Build 6A3DC100) ✦ Added
✦ Changed
✦ Fixed
✦ Security
✦ Notes / Known Limitations
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━ ▌ v0.1 Beta 3 — Inno Setup Snippets Runnable single-feature snippets — each also ships as its own example .iss (see the Added list above).Example 1 — Archive Testing (No Extraction) Code:
{ one shot - test every registered archive (writes nothing): }
if ISApexExTestAll then
MsgBox('All archives are valid.', mbInformation, MB_OK)
else
MsgBox('An archive is corrupt or the password is wrong.', mbError, MB_OK);
{ or per-disk, to pinpoint WHICH archive is bad: }
for i := 1 to ISApexExGetDiskCount do
if not ISApexExTestDisk(i) then
MsgBox(Format('Archive #%d failed the test.', [i]), mbError, MB_OK);
Code:
{ call AFTER AddDisks, once per disk. Policy is one of:
APEX_OVERWRITE (0, default) | APEX_SKIP (1) | APEX_RENAME (2) }
ISApexExSetOverwritePolicy(ISApexExGetDiskCount, APEX_RENAME);
{ Overwrite + Skip work on all engines; Rename works on 7z and RAR
(FreeArc has no per-file rename and falls back to overwrite). }
Code:
{ AFTER AddDisks, once per disk. '|' separates masks; exclude wins.
Empty include = everything. }
ISApexExSetExtractFilter(ISApexExGetDiskCount, '*.dll|*.exe|data\*', '*.log|*.tmp');
{ regex form - wrap each pattern as $"..." (single-quoted Pascal string, so the
inner double quotes are literal); a '|' inside is then protected: }
ISApexExSetExtractFilter(ISApexExGetDiskCount, '$".*\.(exe|dll)$"', '');
{ @listfile and the $"..." regex are honoured by 7z and RAR;
FreeArc uses native globs only. }
Code:
{ Custom callback prompt: register your own custom prompt to REPLACE
the built-in box. Return the password, or '' to cancel (clean abort).
Attempt is 1-based for retry messages. }
function OnPasswordRequest(const Filename: WideString; Attempt: Integer): WideString;
begin
if Attempt > 1 then
Result := InputBox('Wrong password - try again for ' + Filename, '', '')
else
Result := InputBox('Password for ' + Filename, '', '');
end;
{ register it BEFORE extraction (omit this call to use the native box): }
ISApexExSetPasswordCallback(@OnPasswordRequest);
{ Either way: triggers only for genuinely encrypted archives with no/empty/wrong
password. The first entered password is cached and reused for the rest of the
batch. Cancelling at the prompt writes the reason to ISApexEx.log (when a log
file is set with ISApexExSetLogFile). }
Code:
{ ISApexExAddZip(SrcDir, OutZip, Include, Exclude, Method, Level, Password, DeleteSource).
Method : APEX_ZIP_STORE | DEFLATE | DEFLATE64 | BZIP2 | LZMA | PPMD
(Store/Deflate/Deflate64 open anywhere; BZip2/LZMA/PPMd need a modern tool)
Level : 0=store .. 9=ultra (default 5; ignored for STORE)
Password: '' = plain zip; non-empty = AES-256
DeleteSource: True removes the source folder after a SUCCESSFUL zip. }
if not ISApexExAddZip(ExpandConstant('{app}\unpacked'),
ExpandConstant('{app}\bundle.zip'),
'*', '', APEX_ZIP_DEFLATE, 5, '', True) then
MsgBox('Could not register the zip job.', mbError, MB_OK);
{ Runs in the same extraction loop as the archives, with unified progress. }
Code:
{ No manual disk counter needed - loop 1..ISApexExGetDiskCount: }
for i := 1 to ISApexExGetDiskCount do
begin
if not ISApexExExtract(i) then Break;
end;
SetVerifyKey turns on fail-closed loading; VerifyFile checks one file, VerifyFolder batch-checks a whole tree. Code:
{ Turn on verification: every engine DLL loaded after this must carry a valid
'<name>.sig' beside it or its load is refused (fail-closed). }
if not ISApexExSetVerifyKey(ExpandConstant('{tmp}\public.ekey'), VerifyPassword) then
begin
MsgBox('Verification could not be enabled: ' + ISApexExGetVerifyStatus,
mbCriticalError, MB_OK);
Exit;
end;
{ verify one file yourself (returns a VFY_* code; VFY_OK = authentic): }
if ISApexExVerifyFile(ExpandConstant('{tmp}\7z_32.dll')) <> VFY_OK then
MsgBox('7z_32.dll is not trusted: ' + ISApexExGetVerifyStatus,
mbCriticalError, MB_OK);
{ batch-verify every signed file under a folder. The callback (main thread)
reports each file; return non-zero to cancel. The result is the number that
FAILED (0 = all authentic; a negative value is an operational error). }
function VerifyProgress(Info: TISApexExVerifyProgress): LongWord;
begin
Log(Format('Verify %d/%d: %s code=%d',
[Info.Index, Info.Total, Info.FilePath, Info.ResultCode]));
Result := 0;
end;
Failed := ISApexExVerifyFolder(ExpandConstant('{tmp}'), True, @VerifyProgress);
if Failed <> 0 then
MsgBox('Folder verification reported ' + IntToStr(Failed) + ' problem(s).',
mbCriticalError, MB_OK);
Reserved names — 'disk' (shared password), 'disk2'/'disk3'... (per-archive overrides), 'ekey' (the SetVerifyKey password). Code:
{ Keep the archive password out of the script: store it in an encrypted .keydb
(built with the ApexKeyTool console utility) and reference it by NAME.
Reserved names: 'disk' (shared archive password), 'disk2'/'disk3'.. (per-archive
overrides), 'ekey' (the ISApexExSetVerifyKey password). }
if not ISApexExOpenKeyStore(ExpandConstant('{tmp}\ApexKeys.keydb')) then
begin
MsgBox('Could not open the password keystore.', mbCriticalError, MB_OK);
Exit;
end;
{ pass '@key:<name>' instead of a clear-text password - it is substituted from
the keystore. A wrong/missing name resolves to an empty password (and is logged). }
if not ISApexExAddDisks(ExpandConstant('{src}\data1.7z'),
'@key:disk', ExpandConstant('{app}')) then
MsgBox('Could not open the archive.', mbCriticalError, MB_OK);
{ close when done registering - the stored passwords are wiped from memory. }
ISApexExCloseKeyStore;
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━ Feedback, bug reports, and edge cases are all welcome.
|
![]() |
| Thread Tools | Search this Thread |
| Display Modes | |
|
|