ANN: Inno Setup 7.0.0-beta released

140 views
Skip to first unread message

Martijn Laan

unread,
May 18, 2026, 6:53:01 AM (7 days ago) May 18
to innosetup
Dear all,

After having done a lot of work, we are happy to announce that Inno Setup 7.0.0-beta has been released. 

Inno Setup 7 includes a 64-bit edition, as well as a 32-bit edition. Highlights:
  • Both editions of Inno Setup 7 can build either 32-bit or 64-bit installers, and they can be installed side by side, and they can coexist alongside Inno Setup 6.
  • Install the 64-bit edition of Inno Setup 7 to run 64-bit versions of the Compiler IDE and ISCC.
  • Both editions read the same scripts and defaults, and either can build 32-bit or 64-bit installers:
    • Building 32-bit installers is the default in both editions.
    • Set new [Setup] section directive SetupArchitecture to x64 to build a 64-bit x64 installer instead of a 32-bit x86 installer. This also changes the default values of ArchitecturesAllowed and ArchitecturesInstallIn64BitMode to x64compatible, making 64-bit installers default to 64-bit install mode.
    • 64-bit installers fully support 32-bit install mode, and vice versa.
    • Existing installations made by 32-bit installers can be updated by 64-bit installers without issue, and vice versa.
    • 64-bit installers have high-entropy ASLR enabled by default and allow a maximum dictionary size for compression methods lzma and lzma2 of 3.8 GB instead of 1 GB. Review the memory requirements listed in the Compression help topic before using large dictionary sizes.
  • On Arm64-based Windows 11, the 64-bit compilers use an ARM64EC binary (islzma-Arm64EC.dll) for native LZMA compression performance.
  • Added new System Path Redirection help topic.
  • Added new Entry Bitness help topic.
Other highlights include:
  • Setup and Uninstall now work with extended-length paths (also known as super paths) throughout, removing MAX_PATH limitations. Logged paths are now extended-length paths. The end user is still shown normal paths.
    A normal path looks like this: c:\Program Files\My Program
    The extended-length version of the same path looks like this: \\?\c:\Program Files\My Program
  • The Compiler IDE has been renamed from Compil32.exe to ISIDE.exe.
  • Autocompletion, parameter hints, and mouseover tooltips have all been improved in the IDE.
  • A new custom style is now available built-in and directly supported by the WizardStyle directive: stellar.
    stellar is an alternative light-only style with white foreground text, ideally suited to be combined with a custom darker background image
  • Added new optional OnLog parameter to the [Run] section. When combined with the logoutput flag, it specifies the name of a procedure that is to be called for each line of the program's output instead of directly including it in the log file.
  • Directive ArchiveExtraction can now also be set to auto, the new default, which automatically selects the appropriate method based on entries in the [Files] section.
  • The full archive extraction method now supports .zst (Zstandard) archives.
  • As a proactive security measure, the compiler no longer allows .isl message files specified in the [Languages] section to contain compiler directives such as #include.
  • Directive AppVerName now defaults to AppName AppVersion (just a space separating the values) rather than AppName version AppVersion (localized). If you prefer to keep the word "version" (localized), use the NameAndVersion custom message: AppVerName={cm:NameAndVersion,My Program,1.5}
  • Directive TimeStampsInUTC now defaults to yes.

Great care has been taken to ensure maximum backward compatibility with Inno Setup 6, including backward compatibility for the extended-length path support, and compatibility between 32-bit and 64-bit installers.

For the complete list of changes, see: https://jrsoftware.org/files/is7-whatsnew.htm

Download: https://jrsoftware.org/isdl.php#v7

Inno Setup 7 would not have been possible without the support provided through the purchase of commercial licenses. Please purchase a commercial license or donate to support us. Thank you.

Commercial licenses include two years of updates, both major and minor. If you purchased a commercial license recently, you are all set to use Inno Setup 7 as well.

Greetings,
Martijn Laan and Jordan Russell

Andrew Truckle

unread,
May 18, 2026, 7:44:31 AM (6 days ago) May 18
to innosetup
Thanks. Does this mean we can use this version with out live installations now?

Martijn Laan

unread,
May 18, 2026, 7:54:23 AM (6 days ago) May 18
to innosetup
Yes!

Greetings,
Martijn

-------- Original Message --------
--
You received this message because you are subscribed to the Google Groups "innosetup" group.
To unsubscribe from this group and stop receiving emails from it, send an email to innosetup+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/innosetup/b6f66aed-e7cc-4cf3-97c7-8bcd9b783001n%40googlegroups.com.

Andrew Truckle

unread,
May 18, 2026, 8:08:29 AM (6 days ago) May 18
to innosetup
I tried it here:

; SignTool parameters
#define SignedDesc "$qPublic Talk Software$q"
#define SignedPfx "$qd:\My Certificate\2023\My Certificate.pfx$q"
#define SignedTimeStamp "$qhttp://timestamp.sectigo.com$q"
#define SignedPw "$q---$q"

#define AppURL "https://www.publictalksoftware.co.uk"
#define AppPublisher "Andrew Truckle"

#define AppVerText() \
   GetVersionComponents('..\..\Meeting Schedule Assistant\Release\Meeting Schedule Assistant.exe', \
       Local[0], Local[1], Local[2], Local[3]), \
   Str(Local[0]) + "." + Str(Local[1]) + "." + Str(Local[2])

#expr Exec("powershell", \
         "-ExecutionPolicy Bypass -File UpdateDatabaseVersionInfo.ps1", \
         SourcePath, 1, SW_HIDE)

[Setup]
DisableReadyPage=True
DisableReadyMemo=True
DisableFinishedPage=True
UsePreviousSetupType=False
UsePreviousTasks=False
UsePreviousLanguage=False
FlatComponentsList=False
AlwaysShowComponentsList=False
ShowComponentSizes=False
AppName=Meeting Schedule Assistant Public Talk Titles
AppVersion={#AppVerText}
CreateAppDir=False
Uninstallable=no
OutputBaseFilename=MSAPublicTalkTitlesSetup
;SignTool=SignTool /d {#SignedDesc} /du $q{#AppURL}$q /f {#SignedPfx} /p {#SignedPw} /t {#SignedTimeStamp} /v /fd SHA256 $f
;SignToolRunMinimized=yes
AppId={{---}
WizardStyle=modern

[Files]
Source: "MSA_PublicTalks_???.xml"; DestDir: "{param:InstallPath}"; Flags: ignoreversion

But I now get compile error?

Snap3.jpg

Andrew Truckle

unread,
May 18, 2026, 8:10:05 AM (6 days ago) May 18
to innosetup
The same happens in 6.7.2 now. Was fine before.

Martijn Laan

unread,
May 18, 2026, 8:18:19 AM (6 days ago) May 18
to innosetup
It’s because of the () you have in the define. 

I will look into supporting those again, even though they are not necessary.

Greetings,
Martijn Laan

-------- Original Message --------

Andrew Truckle

unread,
May 18, 2026, 12:18:03 PM (6 days ago) May 18
to inno...@googlegroups.com
Thanks. 

You received this message because you are subscribed to a topic in the Google Groups "innosetup" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/innosetup/gt4zVJjyLeE/unsubscribe.
To unsubscribe from this group and all its topics, send an email to innosetup+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/innosetup/177910669529.7.5896527022329861456.1359089474%40innosetup.nl.

Martijn Laan

unread,
May 18, 2026, 1:12:19 PM (6 days ago) May 18
to inno...@googlegroups.com
Hi,

In 6.7.1 the following would compile but the second "x" would be lost:

  #define TestMacro(x)x+1

So this would actually compile as if it said:

  #define TestMacro(x) +1

Which means that for example #emit TestMacro(5) would emit a 1 and not a 6.

This happened because the preprocessor always skipped an extra character (the second "x") after having read the ")", which is wrong. This bug was removed.

You have 0 parameters though. This makes the preprocessor stop before the ")" and not after.

In 6.7.1 the bug would then skip ")" (instead of the "x"), and the parser would continue as if nothing was wrong. So removing the bug also removed support for having 0 parameters. I will fix this, in the meantime you should just remove "()" as it does nothing.

Greetings,
Martijn

Op 18-5-2026 om 14:18 schreef 'Martijn Laan' via innosetup:

Andrew Truckle

unread,
May 19, 2026, 5:40:21 AM (6 days ago) May 19
to innosetup
Hi

I removed the () and it still won't compile.

Andrew

Bug.jpg

Martijn Laan

unread,
May 19, 2026, 6:06:39 AM (6 days ago) May 19
to innosetup
Hi,

Op 19-5-2026 om 11:40 schreef Andrew Truckle:
I removed the () and it still won't compile.

I see now that removing () does actually make a difference. It changes your AppVerText from a macro into a variable. And variables don't have access to Local. For now you will have to use a dummy variable, like:

#define AppVerText(x) \
   GetVersionComponents('..\..\Meeting Schedule Assistant\Release\Meeting Schedule Assistant.exe', \
       Local[0], Local[1], Local[2], Local[3]), \
   Str(Local[0]) + "." + Str(Local[1]) + "." + Str(Local[2])
[Setup]
AppVersion={#AppVerText(0)}


Greetings,
Martijn

Andrew Truckle

unread,
May 19, 2026, 8:57:15 AM (5 days ago) May 19
to inno...@googlegroups.com
Thanks. I confirm that that compiles.

--
You received this message because you are subscribed to a topic in the Google Groups "innosetup" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/innosetup/gt4zVJjyLeE/unsubscribe.
To unsubscribe from this group and all its topics, send an email to innosetup+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/innosetup/177918519344.7.14790948674215059300.1361083965%40innosetup.nl.

Martijn Laan

unread,
May 19, 2026, 9:02:56 AM (5 days ago) May 19
to inno...@googlegroups.com
Thanks for confirming.

Something like this might be bit cleaner and make more sense:

#define AppVerText(ExeFilename) \
   GetVersionComponents(ExeFilename, \
       Local[0], Local[1], Local[2], Local[3]), \
   Str(Local[0]) + "." + Str(Local[1]) + "." + Str(Local[2])
#define AppExeFilename '..\..\Meeting Schedule Assistant\Release\Meeting Schedule Assistant.exe'
[Setup]
AppVersion={#AppVerText(AppExeFilename)}


Op 19-5-2026 om 14:56 schreef Andrew Truckle:
You received this message because you are subscribed to the Google Groups "innosetup" group.
To unsubscribe from this group and stop receiving emails from it, send an email to innosetup+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/innosetup/CAKSr1pe_hX%2BVEnm26wVVsiOyaRXuoEUws%3DsXy_xnCwpNXEaD7w%40mail.gmail.com.

Andrew Truckle

unread,
May 19, 2026, 11:10:05 AM (5 days ago) May 19
to inno...@googlegroups.com
Thanks. Yep, that variation compiles too.

So it would make sense to also do the same here in my main application script:

#define AppFullVerText(x) \
   GetVersionComponents(SourceDir + '\Meeting Schedule Assistant.exe', \

       Local[0], Local[1], Local[2], Local[3]), \
   Str(Local[0]) + "." + Str(Local[1]) + "." + Str(Local[2]) + "." + Str(Local[3])

#define AppVerText(x) \
   GetVersionComponents(SourceDir + '\Meeting Schedule Assistant.exe', \

       Local[0], Local[1], Local[2], Local[3]), \
   Str(Local[0]) + "." + Str(Local[1]) + "." + Str(Local[2])

#define AppVerNumber(x) \
   GetVersionComponents(SourceDir + '\Meeting Schedule Assistant.exe', \

       Local[0], Local[1], Local[2], Local[3]), \
   Str(Local[0]) + "." + Str(Local[1]) + Str(Local[2])

#expr WriteIni( \
    SourcePath + "\Output\version_meetschedassist2.ini", "MeetSchedAssist Update", \
    "LatestVersionString", AppVerText(0))

#expr WriteIni( \
    SourcePath + "\Output\version_meetschedassist2.ini", "MeetSchedAssist Update", \
    "LatestVersionStringEx", AppFullVerText(0))

Andrew

Andrew Truckle

unread,
May 19, 2026, 11:43:40 AM (5 days ago) May 19
to inno...@googlegroups.com
In the main script i changed like this:

#define AppExeFilename "Meeting Schedule Assistant.exe"

#define AppFullVerText(ExeFilename) \
   GetVersionComponents(SourceDir + "\" + ExeFilename, \
       Local[0], Local[1], Local[2], Local[3]), \
   Str(Local[0]) + "." + Str(Local[1]) + "." + Str(Local[2]) + "." + Str(Local[3])

#define AppVerText(ExeFilename) \
   GetVersionComponents(SourceDir + "\" + ExeFilename, \
       Local[0], Local[1], Local[2], Local[3]), \
   Str(Local[0]) + "." + Str(Local[1]) + "." + Str(Local[2])

#define AppVerNumber(ExeFilename) \
   GetVersionComponents(SourceDir + "\" + ExeFilename, \
       Local[0], Local[1], Local[2], Local[3]), \
   Str(Local[0]) + "." + Str(Local[1]) + Str(Local[2])

#expr WriteIni( \
    SourcePath + "\Output\version_meetschedassist2.ini", "MeetSchedAssist Update"
, \
    "LatestVersionString", AppVerText(AppExeFilename))

#expr WriteIni( \
    SourcePath + "\Output\version_meetschedassist2.ini", "MeetSchedAssist Update"
, \
    "LatestVersionStringEx", AppFullVerText(AppExeFilename))

Compiles ok.

Gavin Lambert

unread,
May 19, 2026, 7:56:24 PM (5 days ago) May 19
to innosetup
On Wednesday, May 20, 2026 at 3:43:40 AM UTC+12 Andrew Truckle wrote:
#define AppFullVerText(ExeFilename) \ GetVersionComponents(SourceDir + "\" + ExeFilename, \ Local[0], Local[1], Local[2], Local[3]), \ Str(Local[0]) + "." + Str(Local[1]) + "." + Str(Local[2]) + "." + Str(Local[3])
This is equivalent to GetVersionNumbersString(AddBackslash(SourceDir) + ExeFilename).

Sadly there isn't a built-in equivalent for the other two -- DecodeVer does support printing a smaller number of components but it assumes a different incompatible version format.  Maybe VersionToStr should be extended to behave like DecodeVer but with the new format?

Martijn Laan

unread,
May 20, 2026, 11:42:22 AM (4 days ago) May 20
to innosetup
Hey,

I could add something like FormatVersionNumbersString and/or FormatVersionToStr to both ISPP and [Code].

That would allow even the AppVerNumber user defined function to be replaced with something like:

    FormatVersionNumbersString('%1.%2%3', 'C:\Filename.exe')

What do you think?

The approach with adding a new parameter is a problem for [Code], and also can't handle the AppVerNumber variant which omits one of the periods.

Greetings,
Martijn

Op 20-5-2026 om 01:56 schreef Gavin Lambert:
Sadly there isn't a built-in equivalent for the other two -- DecodeVer does support printing a smaller number of components but it assumes a different incompatible version format.  Maybe VersionToStr should be extended to behave like DecodeVer but with the new format?
--
You received this message because you are subscribed to the Google Groups "innosetup" group.
To unsubscribe from this group and stop receiving emails from it, send an email to innosetup+...@googlegroups.com.

Andrew Truckle

unread,
May 21, 2026, 4:17:51 AM (4 days ago) May 21
to inno...@googlegroups.com
I leave that for you and Gavin to discuss. My macros work for me and achieve what I need. I am happy to migrate them to any new / simpler code if it becomes available.

Thank you as always.

Andrew

You received this message because you are subscribed to a topic in the Google Groups "innosetup" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/innosetup/gt4zVJjyLeE/unsubscribe.
To unsubscribe from this group and all its topics, send an email to innosetup+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/innosetup/177929173585.7.10207578746420522718.1364117744%40innosetup.nl.

Gavin Lambert

unread,
May 21, 2026, 7:16:42 PM (3 days ago) May 21
to innosetup
On Thursday, May 21, 2026 at 3:42:22 AM UTC+12 Martijn Laan wrote:
I could add something like FormatVersionNumbersString and/or FormatVersionToStr to both ISPP and [Code].

That would allow even the AppVerNumber user defined function to be replaced with something like:

    FormatVersionNumbersString('%1.%2%3', 'C:\Filename.exe')

What do you think?

Actually, just a generic Format() that works in ISPP would be good; I don't think that's currently a thing and it would be more flexible; you could then just combine it with GetVersionComponents to do the above.

Martijn Laan

unread,
May 22, 2026, 4:03:12 AM (3 days ago) May 22
to innosetup
Hi,

Op 22-5-2026 om 01:16 schreef Gavin Lambert:
Actually, just a generic Format() that works in ISPP would be good; I don't think that's currently a thing and it would be more flexible;

Yes, that is an excellent idea and should be doable. Wonder why I never thought of it before.


 you could then just combine it with GetVersionComponents to do the above.

This would still require using variables to hold GetVersionComponents' result wouldn't it?

Could add FormatVersionNumbersString to ISPPBuiltins.iss, which would then use Format & GetVersionComponents.

Greetings,
Martijn
Reply all
Reply to author
Forward
0 new messages