Inno Setup 6
Revision History

Copyright © 1997-2025 Jordan Russell. All rights reserved.
Portions Copyright © 2000-2025 Martijn Laan. All rights reserved.
For conditions of distribution and use, see LICENSE.TXT.

Want to be notified by e-mail of new Inno Setup releases? Subscribe to the Inno Setup Mailing List!

6.5.4 (2025-09-24)

- Fix: Pascal Scripting: Using event function `CurInstallProgressChanged` would result in runtime errors.

Using Inno Setup commercially? Please purchase a license.

6.5.3 (2025-09-11)

- Fix: Compiler IDE: The New Script Wizard would generate `[Files]` section entries with random values for the `ExternalSize` parameter.

6.5.2 (2025-09-10)

Improved graphics

It's now possible to use .png files in Setup and Uninstall, and use of transparency has been increased.

- Added support for .png files to `[Setup]` section directives `WizardImageFile` and `WizardSmallImageFile`.
- Improved support for stretching 32-bit .bmp files with transparency.
- The built-in wizard images and icons now have transparent backgrounds, allowing their background colors to be customized again using Setup section directives `WizardImageBackColor` and `WizardSmallImageBackColor`, which are no longer obsolete.
  The default values of these directives match previously used colors, so the appearance of all images and icons remains unchanged by default.
- Pascal Scripting:
  - Added new `TPngImage` support class.
  - Added new `PngImage` property to support classes `TBitmapButton` and `TBitmapImage`.

Removed main size limits

The size limit of 2 GB for a single Setup.exe and for disk slices has been removed.

- The maximum size for a single Setup.exe without disk spanning has increased from almost 2 GB to nearly 4 GB, which is near the maximum Windows supports.
  However, disk spanning is still recommended for large executables due to slow startup times imposed by Windows, especially when the executables are digitally signed.
- With disk spanning enabled, the maximum disk slice size has been increased from almost 2 GB to effectively unlimited (9223 PB).
  The default disk slice size is still `2100000000`, which is almost 2 GB. To update, you can simply set `[Setup]` section directive `DiskSliceSize` to `max`.

Improved downloading and archive extraction

- All download functionality now supports TLS 1.3 when available. Support for TLS 1.0 and 1.1 has been removed on all versions of Windows.
- Archive extraction now supports the RAR5 format. Requires `Setup` section directive `ArchiveExtraction` to be set to `full`.
- Compiler IDE: The New Script Wizard and the Generate [Files] Entries tool now support adding files to be downloaded. They will prompt you if the downloaded file is an archive that should be extracted.
- Fix: Using `[Files]` section flags `download` and `extractarchive` on an entry that also has a `Tasks` parameter now works as expected.

Other changes

- Compiler IDE:
  - Added new Automatically reload files and Allow Undo after reload options. Both are enabled by default, consistent with most other modern editors, and improving integration with tools like Claude Code.
  - Added dark mode support for command line options /cc and /wizard.
- Pascal Scripting: Added new `HighContrastActive` and `LogFmt` support functions.
- Minor tweaks and fixes.

6.5.1 (2025-08-18)

- Downloads are now performed from a secondary thread, just as was first introduced for archive extraction in the previous version. This ensures Setup stays responsive, even if the system fails to report progress.
- Fix: Using the /cc command line option of the Compiler IDE to compile a script no longer causes an error.
- Minor tweaks.

6.5.0 (2025-08-12)

Introducing commercial licenses

Over the years, a number of users have expressed to us a desire to see their organizations support the ongoing development of Inno Setup, but have found that organization policies often make it difficult or impossible to approve a donation. By introducing a commercial license option, we aim to provide a straightforward and familiar way for organizations to contribute to the project's sustainability.

Additionally, many organizations prefer having official licenses on record for all software they use, as it helps with audits and internal compliance checks.

Finally, your support through license purchases directly enables us to improve and maintain Inno Setup.

For these reasons we are introducing commercial licenses. If you or your organization benefit from using Inno Setup in a commercial context, we kindly ask that you purchase a license. Thank you for helping ensure the continued development of this software.

Licenses can be purchased from our new order page, which includes more questions and answers. All commercial licenses are perpetual and require a single payment. They include two years of updates, major and minor. After this period, your current version will remain licensed and functional as-is.

Improved archive extraction

It's now possible to extract password-protected archives, multi-volume archives, and multiple extra archive formats such as .zip.

Additionally, the `[Files]` section now supports archive extraction. Writing Pascal Script to extract an archive is no longer necessary.

All of this is optional and does not increase the size of Setup if not used.

- Updated `[Setup]` and `[Files]` section:
  - Added new `[Setup]` section directive `ArchiveExtraction` to specify the method of archive extraction used by new `[Files]` section flag `extractarchive` (see below) and support functions `ExtractArchive` and `CreateExtractionPage`:
    - `basic` (default) is the method introduced by Inno Setup 6.4.0. It only supports .7z archives that are not password-protected.
    - `enhanced/nopassword` is a new method and internally uses 7zxr.dll from the 7-Zip source code by Igor Pavlov, as-is, except that it was recompiled, code-signed, and renamed to is7zxr.dll. Compared to `basic`, it has lower memory requirements for archives that contain large files but increases the size of the Setup file(s). It still only supports .7z archives that are not password-protected.
    - `enhanced` uses 7zxa.dll instead of 7zxr.dll, recompiled, code-signed, and renamed to is7zxa.dll. It still only supports .7z archives, but they may be password-protected.
    - `full` uses 7z.dll instead of 7zxa.dll, recompiled, code-signed, and renamed to is7z.dll. It supports multiple archive formats (.7z, .zip, .rar, and more), although not as many as the original 7z.dll, to reduce its size. Additionally, it supports multi-volume archives.
    New documentation topic ArchiveExtraction has a table summarizing the differences between these methods.
  - Added new `[Files]` section flag `extractarchive` and parameter `ExtractArchivePassword`, intended to enable the seamless integration and extraction of archives.
    - The supported archive formats, beyond .7z, and the support for password-protected and multi-volume archives, depend on the aforementioned `ArchiveExtraction` directive, that must not be set to `basic`.
    - Flag `extractarchive` must be combined with the `external` and `ignoreversion` flags. It is usually also combined with the `recursesubdirs` and `createallsubdirs` flags.
    - Using a solid archive is not recommended; extraction performance may degrade depending on the solid block size.
    - Archive extraction otherwise behaves the same as external file copying. For example, it supports automatic uninstallation of extracted files and can be combined with same other flags and parameters.
    - Example script:

          [Setup]
          ArchiveExtraction=enhanced/nopassword

          [Files]
          Source: "{tmp}\MyProg-ExtraReadmes.7z"; DestDir: "{app}"; \
            Flags: external extractarchive recursesubdirs createallsubdirs ignoreversion

  - Archive extraction now honors the file system redirection state set by 64-bit install mode, entry flags, and support function `EnableFsRedirection`.
- Updated Pascal Scripting:
  - New support function `ExtractArchive` replaces the deprecated `Extract7ZipArchive`. `ExtractArchive` includes an additional parameter to optionally specify a password.
  - `ExtractArchive` and `CreateExtractionPage` now overwrite read-only files which already exist in the destination directory without prompting the user. Previously this would cause an extraction error.
  - Added new `MapArchiveExtensions` support function to allow the extraction of archives with custom extensions, such as self-extracting archives.
  - Added new `AddEx` function to support class `TExtractionWizardPage` to add password-protected archives.

Improved file downloads

The `[Files]` section now supports file downloads. Writing Pascal Script to download a file is no longer necessary and is in fact less efficient since it requires an intermediate temporary file which this new download support doesn't.

- Updated `[Files]` section:
  - Added new `[Files]` section flag `download` and parameters `DownloadUserName` and `DownloadPassword`, intended to enable the seamless integration of downloaded files.
  - Supports HTTPS (but not expired or self-signed certificates) and HTTP. Redirects are automatically followed and proxy settings are automatically used. Safe to use from services.
  - Flag `download` must be combined with the `external` and `ignoreversion` flags. Additionally, the `DestName` and `ExternalSize` parameters must be set.
    It can also be combined with the new `issigverify` flag (see below) for efficient and highly secure verification of the download file.
    It cannot be combined with the `comparetimestamp`, `recursesubdirs` and `skipifsourcedoesntexist` flags.
  - File download otherwise behaves the same as external file copying. For example, it supports automatic uninstallation of downloaded files and can be combined with same other flags and parameters.
  - When combined with the new `extractarchive` flag (see above), the archive will be downloaded and, if the `issigverify` flag is also used, verified at the start of the Preparing to Install step. The archive is then extracted normally during the actual installation process.
    In this case, the value of `DestName` is used to determine the archive format and for display and logging purposes.
  - Example script:

        [Files]
        Source: "https://jrsoftware.org/download.php/is.exe?dontcount=1"; \
          DestName: "innosetup-latest.exe"; DestDir: "{app}"; \
          ExternalSize: 7_000_000; Flags: external download ignoreversion
        Source: "https://jrsoftware.org/download.php/myprog-extrareadmes.7z"; \
          DestName: "MyProg.ExtraReadmes.7z"; DestDir: "{app}"; \
          ExternalSize: 275; Flags: external download extractarchive ignoreversion

  - Added example script DownloadFiles.iss to demonstrate how to use a single `[Files]` entry to download a file, or to download and extract an archive, with verification.

New signature-verification capability

Inno Setup now includes an integrated signature-verification capability that can be used to detect corruption or tampering in your files at compile time, before files are included in an installer being built, or during installation, before Setup copies external files onto a user's system.

Any type of file may be signed and verified, and creation of signatures does not require a certificate from a certificate authority. There is no cost involved.

Note, however, that these signatures cannot be used to eliminate an "Unknown publisher" warning message shown by Windows when an installer or other EXE file is started. That requires a completely different kind of signature (Authenticode) embedded inside the EXE file by a different tool (Microsoft's `signtool.exe`), and it does require a (usually expensive) code-signing certificate from a certificate authority.

A more detailed summary:

- New `[ISSigKeys]` section:
  - Added a new optional `[ISSigKeys]` section for defining keys used by the compiler and Setup to verify file signatures.
  - Supports parameters `Name` (required) and `Group` to identify keys, parameters `KeyFile`, `PublicX`, and `PublicY` to specify the key values, parameter `KeyID` to double-check the key values, and parameter `RuntimeID` for runtime identification of the key.
  - Key files are human-readable and can be created using Inno Setup Signature Tool (see below).
  - Example section:

        [ISSigKeys]
        Name: anna; KeyFile: "anna.ispublickey"; Group: exesigner
        Name: ryan; KeyFile: "ryan.ispublickey"; Group: exesigner
        Name: ivan; KeyFile: "ivan.ispublickey"; Group: docsigner
        ; max is trusted for both exe and doc signing
        Name: max; KeyFile: "max.ispublickey"; Group: exesigner docsigner
        ; the boss also has a key
        Name: bosskey; KeyFile: "boss.ispublickey"

- Updated `[Files]` section:
  - Added a new `issigverify` flag for enforcing cryptographic signature verification of source files using a key from the `[ISSigKeys]` section, enhancing security during both compilation and installation.
  - When used without the `external` flag, verification is performed during compilation, aborting if it fails. When used with the `external` flag, verification occurs during installation, ensuring the integrity of files as they are copied.
  - Requires an `.issig` signature file to be present in the same directory as the source file. Signature files are human-readable files and can be created using the Inno Setup Signature Tool.
  - Has little performance impact since verification occurs while source files are being compressed/copied and each file's contents are only read once; the only extra I/O comes from reading the tiny `.issig` files. Only archives and downloaded files are read a second time.
  - The verification process is protected against the Time-Of-Check to Time-Of-Use (TOCTOU) problem.
  - Can be used to verify downloaded files, offering flexibility over SHA-256 checks as script changes aren't needed for file updates. See the new DownloadFiles.iss example script for an example.
  - Added a new and optional `ISSigAllowedKeys` parameter to restrict which keys or groups of keys from the `[ISSigKeys]` section are permitted for signature verification using the `issigverify` flag.
  - Note: The `issigverify` flag cannot be combined with the `sign` or `signonce` flags. Use `signcheck` instead.
  - Example section:

        [Files]
        Source: "MyProg.exe"; DestDir: "{app}"; \
          ISSigAllowedKeys: "exesigner bosskey"; Flags: issigverify
        Source: "MyProg.chm"; DestDir: "{app}"; \
          ISSigAllowedKeys: "docsigner bosskey"; Flags: issigverify
        Source: "{src}\Extra\*.chm"; DestDir: "{app}"; \
          ISSigAllowedKeys: "docsigner bosskey"; Flags: issigverify external; \
          Excludes: "*.issig"
        Source: "https://jrsoftware.org/download.php/is.exe?dontcount=1"; DestDir: "{app}"; \
          ISSigAllowedKeys: "exesigner bosskey"; \
          Flags: issigverify external download ignoreversion; \
          DestName: "innosetup-latest.exe"; ExternalSize: 7_000_000

- New Inno Setup Signature Tool:
  - Added `ISSigTool.exe`, a new command-line utility designed to sign files using ECDSA P-256 cryptographic signatures.
  - Offers commands to sign and verify files, to export public keys and to generate private keys.
  - Example commands:

        issigtool --key-file="MyKey.isprivatekey" generate-private-key
        issigtool --key-file="MyKey.isprivatekey" sign "MyProg.dll"
        issigtool --key-file="MyKey.isprivatekey" export-public-key "MyKey.ispublickey"
        issigtool --key-file="MyKey.ispublickey" verify "MyProg.dll"

- Updated documentation:
  - Added new [ISSigKeys] section topic.
  - Updated [Files] section topic.
  - Added new .issig Signatures: Introduction topic.
  - Added new Inno Setup Signature Tool topic.
- Other related changes:
  - The compiler now verifies additional precompiled files, such as Setup.e32 and SetupLdr.e32, to ensure they remain unchanged before using them. Can be disabled using new [Setup] section directive `DisablePrecompiledFileVerifications`, though doing so is not recommended.
  - Added new `[Files]` section parameter `Hash`. Instructs the compiler or Setup to do a simple SHA-256 hash check instead of a full signature verification, as an alternative to using the `issigverify` flag.
    Example script:

        [Files]
        Source: "https://jrsoftware.org/download.php/iscrypt.dll?dontcount=1"; \
          DestName: "ISCrypt.dll"; DestDir: "{app}"; \
          Hash: "2f6294f9aa09f59a574b5dcd33be54e16b39377984f3d5658cda44950fa0f8fc"; \
          ExternalSize: 2560; Flags: external download ignoreversion

  - Pascal Scripting:
    - Added new `ISSigVerify` and `DownloadTemporaryFileWithISSigVerify` support functions.
    - Added new `AddWithISSigVerify` and `AddExWithISSigVerify` functions to support class `TDownloadWizardPage`. See updated example script CodeDownloadFiles.iss for an example.

Other changes

- Compiler IDE:
  - The Find in Files result list will now update its line numbers when you add or delete lines.
  - The Highlight occurrences of current word option (which is disabled by default) no longer highlights a section's directive names, parameter names, or Pascal keywords. The Highlight occurrences of current selection option (which is enabled by default) still does.
  - Dark mode is now supported throughout.
  - Improved support for high-contrast themes.
  - Improved support for screen readers.
- `[Setup]` section directive `Encryption` can now be set to `full`, which will encrypt the entire installation and requires the password to be specified using the /PASSWORD= command line parameter.
- Increased the maximum value of `[Setup]` section directive `LZMANumBlockThreads` from 32 to 256.
- `[Files]` section parameter `Excludes` can now be combined with the `external` flag.
- Parameters `ExternalSize`, `ExtraDiskSpaceRequired`, and `UninstallDisplaySize` now support digit separators. Example: `UninstallDisplaySize=1_073_741_824`.
- ISPP changes:
  - Added predefined variable `__DIR__`. Returns the directory of the current include file.
  - Renamed predefined variables `__FILE__` to `__FILENAME__` and `ISPPCC_INVOKED` to `ISCC_INVOKED`. The old names still work.
  - Renamed support function `RemoveBackslash` to `RemoveBackslashUnlessRoot`. The old name still works.
  - Fix: The return value of support function `ExtractFilePath` did not always include a trailing backslash as intended.
- Pascal Scripting changes:
  - Added new `TBitmapButton` support class which works just like `TBitmapImage`, but is accessible by keyboard and compatible with screen readers. Make sure to set the `Caption` property, even if it isn't visible. See updated example script CodeClasses.iss for an example.
  - Added new `InitializeBitmapButtonFromIcon` and `GetSHA256OfStream` support functions.
  - Added new `LastBaseNameOrUrl` property to support class `TDownloadWizardPage`. See updated example script CodeDownloadFiles.iss for an example.
  - Fix: Event function `CurPageChanged` is now always only triggered when the current page actually changes. Before it was called twice in a row for `wpPreparing` when the script had a `PrepareToInstall` event function which returned a non empty string to instruct Setup to stop.
- When available, Setup now retrieves the temporary directory path using the `GetTempPath2` API, which was first introduced in Windows 11 and later backported to Windows 10 and Windows Server 2016 via monthly updates. When running under the SYSTEM account, `GetTempPath2` returns a private directory (typically `C:\Windows\SystemTemp`), potentially enhancing security. On older versions of Windows or systems that haven't been updated, Setup falls back to the original `GetTempPath` API. (This change adds defense-in-depth; it does not address a known vulnerability.)
- Inno Setup 6.4.3 increased the maximum width of all task dialogs by about 50%, which helps to keep long paths from being truncated with ellipses. It now only does this if the task dialog's content actually contains a path.
- All official translations which still had an UTF-8 BOM had their BOM removed. Using a BOM in UTF-8 encoded files is not needed and not recommended since Inno Setup 6.3.0.
- Inno Setup is now built using Delphi 12.3 Athens instead of Delphi 12.1 Athens. Thanks to Ian Barker from Embarcadero for providing us with a license!
- Documentation improvements.
- Minor tweaks.

Some messages have been added and removed in this version: (View differences in Default.isl.)

- New messages:
  - DownloadingLabel2, ExtractingLabel.
  - ArchiveIncorrectPassword, ArchiveIsCorrupted, ArchiveUnsupportedFormat.
  - RetryCancelSelectAction, RetryCancelRetry, RetryCancelCancel.
  - StatusDownloadFiles.
  - SourceVerificationFailed, VerificationSignatureDoesntExist, VerificationSignatureInvalid, VerificationKeyNotFound, VerificationFileNameIncorrect, VerificationFileTagIncorrect, VerificationFileSizeIncorrect, VerificationFileHashIncorrect.
  - ErrorDownloading, ErrorExtracting.
- Removed messages:
  - ErrorFileHash1, ErrorFileHash2.
  - DownloadingLabel, ExtractionLabel.

Note: The official Icelandic translation has been reclassified as unofficial due to the absence of a maintainer.

Inno Setup 6.4 Revision History