123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="utf-8" />
- <title>Inno Setup 6 Revision History</title>
- <base href="https://jrsoftware.org/" />
- <style type="text/css">
- :root {
- color-scheme: light dark;
- --main-fg-color: light-dark(#282828, #d6d6d6);
- --main-bg-color: light-dark(white, #1f1f1f);
- --link-fg-color: light-dark(hsl(206, 100%, 37%), hsl(206, 100%, 50%));
- --link-hover-fg-color: light-dark(hsl(206, 100%, 27%), hsl(206, 100%, 43%));
- --code-bg-color: light-dark(#f0f0f0, #353135);
- }
- body { font: calc(14rem/16)/1.5 "Segoe UI", sans-serif; color: var(--main-fg-color); background-color: var(--main-bg-color) }
- a:link, a:visited { color: var(--link-fg-color); background-color: transparent; text-decoration: none }
- a[href]:hover { color: var(--link-hover-fg-color); text-decoration: underline }
- tt, pre { font: calc(13rem/16)/calc(21rem/16) monospace; color: inherit; background-color: var(--code-bg-color) }
- tt { padding: 2px 4px; border-radius: 4px }
- pre { line-height: normal; padding: 10px; border-radius: 6px; overflow-x: auto }
- li, div.limargins { margin-block: calc(5rem/16) }
- div.bluehead { text-align: center; color: white; background-color: hsl(206, 100%, 30%); padding: 5px; font-weight: bold; line-height: normal }
- .date { font-size: calc(11rem/16); font-weight: bold }
- .head1 { font-size: calc(32rem/16) }
- .head2 { font-size: calc(20rem/16) }
- .ver { font-size: calc(20rem/16); font-weight: bold }
- code.innosetup .sec { font-weight: bold }
- code.innosetup .key { color: #0078d4 }
- code.innosetup .com { color: #339933 }
- code.innosetup .con { color: #9262a8 }
- </style>
- </head>
- <body>
- <div class="bluehead"><span class="head1">Inno Setup 6</span><br /><span class="head2">Revision History</span></div>
- <p>Copyright © 1997-2025 <a href="./">Jordan Russell</a>. All rights reserved.<br />
- Portions Copyright © 2000-2025 Martijn Laan. All rights reserved.<br />
- For conditions of distribution and use, see <a href="files/is/license.txt">LICENSE.TXT</a>.
- </p>
- <p><b>Want to be notified by e-mail of new Inno Setup releases?</b> <a href="ismail.php">Subscribe</a> to the Inno Setup Mailing List!</p>
- <p><a name="6.5.0"></a><span class="ver">6.5.0-dev </span><span class="date">(?)</span></p>
- <span class="head2">Improved archive extraction</span>
- <p>Support for extracting archives has been improved. It's now possible to extract password-protected archives, multi-volume archives, and multiple extra archive formats such as .zip.</p>
- <p>Additionally the <tt>[Files]</tt> section now supports archive extraction. Writing Pascal Script to extract an archive is no longer necessary.</p>
- <p>All of this is optional and does <i>not</i> increase the size of Setup if not used.</p>
- <ul>
- <li>Updated <tt>[Setup]</tt> and <tt>[Files]</tt> section:
- <ul>
- <li>Added new <tt>[Setup]</tt> section directive <tt>ArchiveExtraction</tt> to specify the method of archive extraction used by new <tt>[Files]</tt> section flag <tt>extractarchive</tt> (see below) and support functions <tt>ExtractArchive</tt> and <tt>CreateExtractionPage</tt>:
- <ul>
- <li><tt>basic</tt> (default) is the method introduced by Inno Setup 6.4.0. It only supports .7z archives that are not password-protected.</li>
- <li><tt>enhanced/nopassword</tt> 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 <tt>basic</tt>, 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.</li>
- <li><tt>enhanced</tt> 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.</li>
- <li><tt>full</tt> 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.</li>
- </ul>
- New documentation topic <a href="https://jrsoftware.org/ishelp/index.php?topic=setup_archiveextraction">ArchiveExtraction</a> has a table summarizing the differences between these methods.
- </li>
- <li>Added new <tt>[Files]</tt> section flag <tt>extractarchive</tt> and parameter <tt>ExtractArchivePassword</tt>, intended to enable the seamless integration and extraction of archives.
- <ul>
- <li>The supported archive formats, beyond .7z, and the support for password-protected and multi-volume archives, depend on the aforementioned <tt>ArchiveExtraction</tt> directive, that must not be set to <tt>basic</tt>.</li>
- <li>Flag <tt>extractarchive</tt> must be combined with the <tt>external</tt> and <tt>ignoreversion</tt> flags. It is usually also combined with the <tt>recursesubdirs</tt> and <tt>createallsubdirs</tt> flags.</li>
- <li>Using a solid archive is not recommended; extraction performance may degrade depending on the solid block size.</li>
- <li>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.</li>
- <li>Example script:
- <pre><code class="innosetup"><span class="sec">[Setup]</span>
- <span class="key">ArchiveExtraction</span>=enhanced/nopassword
- <span class="sec">[Files]</span>
- <span class="key">Source</span>: "<span class="con">{tmp}</span>\MyProg-ExtraReadmes.7z"; <span class="key">DestDir</span>: "<span class="con">{app}</span>"</span>; \
- <span class="key">Flags</span>: external extractarchive recursesubdirs createallsubdirs ignoreversion</code></pre>
- </li>
- </ul>
- </li>
- <li>Archive extraction now honors the file system redirection state set by 64-bit install mode, entry flags, and support function <tt>EnableFsRedirection</tt>.</li>
- </ul>
- </li>
- <li>Updated Pascal Scripting:
- <ul>
- <li>New support function <tt>ExtractArchive</tt> replaces the deprecated <tt>Extract7ZipArchive</tt>. <tt>ExtractArchive</tt> includes an additional parameter to optionally specify a password.</li>
- <li><tt>ExtractArchive</tt> and <tt>CreateExtractionPage</tt> now overwrite read-only files which already exist in the destination directory without prompting the user. Previously this would cause an extraction error.</li>
- <li>Added new <tt>MapArchiveExtensions</tt> support function to allow the extraction of archives with custom extensions, such as self-extracting archives.</li>
- <li>Added new <tt>AddEx</tt> function to support class <tt>TExtractionWizardPage</tt> to add password-protected archives.</li>
- </ul>
- </li>
- </ul>
- <span class="head2">Improved file downloads</span>
- <p>Support for downloading files has been improved: the <tt>[Files]</tt> 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.</p>
- <ul>
- <li>Updated <tt>[Files]</tt> section:
- <ul>
- <li>Added new <tt>[Files]</tt> section flag <tt>download</tt> and parameters <tt>DownloadUserName</tt> and <tt>DownloadPassword</tt>, intended to enable the seamless integration of downloaded files.</li>
- <li>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.</li>
- <li>Flag <tt>download</tt> must be combined with the <tt>external</tt> and <tt>ignoreversion</tt> flags. Additionally, the <tt>DestName</tt> and <tt>ExternalSize</tt> parameters must be set.<br/>
- It can also be combined with the new <tt>issigverify</tt> flag (see below) for efficient and highly secure verification of the download file.<br/>
- It cannot be combined with the <tt>comparetimestamp</tt>, <tt>recursesubdirs</tt> and <tt>skipifsourcedoesntexist</tt> flags.</li>
- <li>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.</li>
- <li>When combined with the new <tt>extractarchive</tt> flag (see above), the archive will be downloaded and, if the <tt>issigverify</tt> flag is also used, verified at the start of the <i>Preparing to Install</i> step. The archive is then extracted normally during the actual installation process.<br/>
- In this case, the value of <tt>DestName</tt> is used to determine the archive format and for display and logging purposes.</li>
- <li>Example script:
- <pre><code class="innosetup"><span class="sec">[Files]</span>
- <span class="key">Source</span>: "https://jrsoftware.org/download.php/is.exe?dontcount=1"; \
- <span class="key">DestName</span>: "innosetup-latest.exe"; <span class="key">DestDir</span>: "<span class="con">{app}</span>"; \
- <span class="key">ExternalSize</span>: 7_000_000; <span class="key">Flags</span>: external download ignoreversion
- <span class="key">Source</span>: "https://jrsoftware.org/download.php/myprog-extrareadmes.7z"; \
- <span class="key">DestName</span>: "MyProg.ExtraReadmes.7z"; <span class="key">DestDir</span>: "<span class="con">{app}</span>"; \
- <span class="key">ExternalSize</span>: 275; <span class="key">Flags</span>: external download extractarchive ignoreversion</code></pre>
- </li>
- <li>Added example script <i>DownloadFiles.iss</i> to demonstrate how to use a single <tt>[Files]</tt> entry to download a file, or to download and extract an archive, with verification.</li>
- </ul>
- </li>
- </ul>
- <span class="head2">New signature-verification capability</span>
- <p>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.</p>
- <p>Any type of file may be signed and verified, and creation of signatures does <i>not</i> require a certificate from a certificate authority. There is no cost involved.</p>
- <p>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 <tt>signtool.exe</tt>), and it does require a (usually expensive) code-signing certificate from a certificate authority.</p>
- <p>A more detailed summary:</p>
- <ul>
- <li>New <tt>[ISSigKeys]</tt> section:
- <ul>
- <li>Added a new optional <tt>[ISSigKeys]</tt> section for defining keys used by the compiler and Setup to verify file signatures.</li>
- <li>Supports parameters <tt>Name</tt> (required) and <tt>Group</tt> to identify keys, parameters <tt>KeyFile</tt>, <tt>PublicX</tt>, and <tt>PublicY</tt> to specify the key values, parameter <tt>KeyID</tt> to double-check the key values, and parameter <tt>RuntimeID</tt> for runtime identification of the key.</li>
- <li>Key files are human-readable and can be created using Inno Setup Signature Tool (see below).</li>
- <li>Example section:
- <pre><code class="innosetup"><span class="sec">[ISSigKeys]</span>
- <span class="key">Name</span>: anna; <span class="key">KeyFile</span>: "anna.ispublickey"; <span class="key">Group</span>: exesigner
- <span class="key">Name</span>: ryan; <span class="key">KeyFile</span>: "ryan.ispublickey"; <span class="key">Group</span>: exesigner
- <span class="key">Name</span>: ivan; <span class="key">KeyFile</span>: "ivan.ispublickey"; <span class="key">Group</span>: docsigner
- <span class="com">; max is trusted for both exe and doc signing</span>
- <span class="key">Name</span>: max; <span class="key">KeyFile</span>: "max.ispublickey"; <span class="key">Group</span>: exesigner docsigner
- <span class="com">; the boss also has a key</span>
- <span class="key">Name</span>: bosskey; <span class="key">KeyFile</span>: "boss.ispublickey"</code></pre>
- </li>
- </ul>
- </li>
- <li>Updated <tt>[Files]</tt> section:
- <ul>
- <li>Added a new <tt>issigverify</tt> flag for enforcing cryptographic signature verification of source files using a key from the <tt>[ISSigKeys]</tt> section, enhancing security during both compilation and installation.</li>
- <li>When used without the <tt>external</tt> flag, verification is performed during compilation, aborting if it fails. When used with the <tt>external</tt> flag, verification occurs during installation, ensuring the integrity of files as they are copied.</li>
- <li>Requires an <tt>.issig</tt> 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.</li>
- <li>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 <tt>.issig</tt> files. Only archives and downloaded files are read a second time.</li>
- <li>The verification process is protected against the Time-Of-Check to Time-Of-Use (TOCTOU) problem.</li>
- <li>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 <i>DownloadFiles.iss</i> example script for an example.</li>
- <li>Added a new and optional <tt>ISSigAllowedKeys</tt> parameter to restrict which keys or groups of keys from the <tt>[ISSigKeys]</tt> section are permitted for signature verification using the <tt>issigverify</tt> flag.</li>
- <li>Note: The <tt>issigverify</tt> flag cannot be combined with the <tt>sign</tt> or <tt>signonce</tt> flags. Use <tt>signcheck</tt> instead.</li>
- <li>Example section:
- <pre><code class="innosetup"><span class="sec">[Files]</span>
- <span class="key">Source</span>: "MyProg.exe"; <span class="key">DestDir</span>: "<span class="con">{app}</span>"; \
- <span class="key">ISSigAllowedKeys</span>: "exesigner bosskey"; <span class="key">Flags</span>: issigverify
- <span class="key">Source</span>: "MyProg.chm"; <span class="key">DestDir</span>: "<span class="con">{app}</span>"; \
- <span class="key">ISSigAllowedKeys</span>: "docsigner bosskey"; <span class="key">Flags</span>: issigverify
- <span class="key">Source</span>: "<span class="con">{src}</span>\Extra\*.chm"; <span class="key">DestDir</span>: "<span class="con">{app}</span>"; \
- <span class="key">ISSigAllowedKeys</span>: "docsigner bosskey"; <span class="key">Flags</span>: issigverify external; \
- <span class="key">Excludes</span>: "*.issig"
- <span class="key">Source</span>: "https://jrsoftware.org/download.php/is.exe?dontcount=1"; <span class="key">DestDir</span>: "<span class="con">{app}</span>"; \
- <span class="key">ISSigAllowedKeys</span>: "exesigner bosskey"; \
- <span class="key">Flags</span>: issigverify external download ignoreversion; \
- <span class="key">DestName</span>: "innosetup-latest.exe"; <span class="key">ExternalSize</span>: 7_000_000</code></pre>
- </li>
- </ul>
- </li>
- <li>New Inno Setup Signature Tool:
- <ul>
- <li>Added <tt>ISSigTool.exe</tt>, a new command-line utility designed to sign files using ECDSA P-256 cryptographic signatures.</li>
- <li>Offers commands to sign and verify files, to export public keys and to generate private keys.</li>
- <li>Example commands:
- <pre><code>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"</code></pre>
- </li>
- </ul>
- </li>
- <li>Updated documentation:
- <ul>
- <li>Added new <a href="https://jrsoftware.org/ishelp/index.php?topic=issigkeyssection">[ISSigKeys] section</a> topic.</li>
- <li>Updated <a href="https://jrsoftware.org/ishelp/index.php?topic=filessection">[Files] section</a> topic.</li>
- <li>Added new <a href="https://jrsoftware.org/ishelp/index.php?topic=issig">.issig Signatures: Introduction</a> topic.</li>
- <li>Added new <a href="https://jrsoftware.org/ishelp/index.php?topic=issigtool">Inno Setup Signature Tool</a> topic.</li>
- </ul>
- </li>
- <li>Other related changes:
- <ul>
- <li>The compiler now verifies additional precompiled files, such as <i>Setup.e32</i> and <i>SetupLdr.e32</i>, to ensure they remain unchanged before using them. Can be disabled using new [Setup] section directive <tt>DisablePrecompiledFileVerifications</tt>, though doing so is <i>not</i> recommended.</li>
- <li>Added new <tt>[Files]</tt> section parameter <tt>Hash</tt>. 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 <tt>issigverify</tt> flag.<br/>
- Example script:
- <pre><code class="innosetup"><span class="sec">[Files]</span>
- <span class="key">Source</span>: "https://jrsoftware.org/download.php/iscrypt.dll?dontcount=1"; \
- <span class="key">DestName</span>: "ISCrypt.dll"; <span class="key">DestDir</span>: "<span class="con">{app}</span>"; \
- <span class="key">Hash</span>: "2f6294f9aa09f59a574b5dcd33be54e16b39377984f3d5658cda44950fa0f8fc"; \
- <span class="key">ExternalSize</span>: 2560; <span class="key">Flags</span>: external download ignoreversion</code></pre>
- </li>
- <li>Pascal Scripting:
- <ul>
- <li>Added new <tt>ISSigVerify</tt> and <tt>DownloadTemporaryFileWithISSigVerify</tt> support functions.</li>
- <li>Added new <tt>AddWithISSigVerify</tt> and <tt>AddExWithISSigVerify</tt> functions to support class <tt>TDownloadWizardPage</tt>. See updated example script <i>CodeDownloadFiles.iss</i> for an example.</li>
- </ul>
- </li>
- </ul>
- </li>
- </ul>
- <span class="head2">Other changes</span>
- <ul>
- <li>Compiler IDE:
- <ul>
- <li>The <i>Find in Files</i> result list will now update its line numbers when you add or delete lines.</li>
- <li>The <i>Highlight occurrences of current word</i> option (which is disabled by default) no longer highlights a section's directive names, parameter names, or Pascal keywords. The <i>Highlight occurrences of current selection</i> option (which is enabled by default) still does.</li>
- <li>Improved dark mode support.</li>
- <li>Improved support for high-contrast themes.</li>
- </ul>
- </li>
- <li><tt>[Files]</tt> section parameter <tt>Excludes</tt> can now be combined with the <tt>external</tt> flag.</li>
- <li>Increased the maximum value of <tt>[Setup]</tt> section directive <tt>LZMANumBlockThreads</tt> from 32 to 256.</li>
- <li>Parameters <tt>ExternalSize</tt>, <tt>ExtraDiskSpaceRequired</tt>, and <tt>UninstallDisplaySize</tt> now support digit separators. Example: <tt>UninstallDisplaySize=1_073_741_824</tt>.<br/>
- The same applies to <tt>[Registry]</tt> parameter <tt>ValueData</tt> if <tt>ValueType</tt> is set to <tt>qword</tt>.</li>
- <li>ISPP changes:
- <ul>
- <li>Added predefined variable <tt>__DIR__</tt>. Returns the directory of the current include file.</li>
- <li>Renamed predefined variables <tt>__FILE__</tt> to <tt>__FILENAME__</tt> and <tt>ISPPCC_INVOKED</tt> to <tt>ISCC_INVOKED</tt>. The old names still work.</li>
- <li>Renamed support function <tt>RemoveBackslash</tt> to <tt>RemoveBackslashUnlessRoot</tt>. The old name still works.</li>
- <li><i>Fix:</i> The return value of support function <tt>ExtractFilePath</tt> did not always include a trailing backslash as intended.</li>
- </ul>
- </li>
- <li>Pascal Scripting changes:
- <ul>
- <li>Added new <tt>LastBaseNameOrUrl</tt> property to support class <tt>TDownloadWizardPage</tt>. See updated example script <i>CodeDownloadFiles.iss</i> for an example.</li>
- <li>Added new <tt>GetSHA256OfStream</tt> support function.</li>
- <li><i>Fix:</i> Event function <tt>CurPageChanged</tt> is now always only triggered when the current page actually changes. Before it was called twice in a row for <tt>wpPreparing</tt> when the script had a <tt>PrepareToInstall</tt> event function which returned a non empty string to instruct Setup to stop.</li>
- </ul>
- </li>
- <li>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.</li>
- <li>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.</li>
- <li>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!</li>
- <li>Documentation improvements.</li>
- <li>Minor tweaks.</li>
- </ul>
- <p>Some messages have been added and removed in this version: (<a href="https://github.com/jrsoftware/issrc/commit/a1d6aecc">View differences in Default.isl</a>.)</p>
- <ul>
- <li><b>New messages:</b>
- <ul>
- <li>DownloadingLabel2, ExtractingLabel.</li>
- <li>ArchiveIncorrectPassword, ArchiveIsCorrupted, ArchiveUnsupportedFormat.</li>
- <li>RetryCancelSelectAction, RetryCancelRetry, RetryCancelCancel.</li>
- <li>StatusDownloadFiles.</li>
- <li>SourceVerificationFailed, VerificationSignatureDoesntExist, VerificationSignatureInvalid, VerificationKeyNotFound, VerificationFileNameIncorrect, VerificationFileTagIncorrect, VerificationFileSizeIncorrect, VerificationFileHashIncorrect.</li>
- <li>ErrorDownloading, ErrorExtracting.</li>
- </ul>
- </li>
- <li><b>Removed messages:</b>
- <ul>
- <li>ErrorFileHash1, ErrorFileHash2.</li>
- <li>DownloadingLabel, ExtractionLabel.</li>
- </ul>
- </li>
- </ul>
- <p>Note: The official <a href="https://raw.github.com/jrsoftware/issrc/main/Files/Languages/Unofficial/Icelandic.isl">Icelandic</a> translation has been reclassified as unofficial due to the absence of a maintainer.</p>
- <p><a href="files/is6.4-whatsnew.htm">Inno Setup 6.4 Revision History</a></p>
- </body>
- </html>
|