Inno Setup 5
Revision History

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

5.3.10 (2010-06-11)

- Added .NET Framework 4.0 support:
  - Added constants `{dotnet40}`, `{dotnet4032}`, and `{dotnet4064}`. An exception will be raised if an attempt is made to expand these constants on a system with no .NET Framework version 4.0 present.
  - [Files] section flag `gacinstall` can now be used on .NET Framework 4.0 assemblies too.
- Windows 7 changes:
  - [Icons] section flag `foldershortcut` is now ignored when running on Windows 7 (or later), as folder shortcuts do not expand properly on the Start Menu anymore.
- [Setup] section directive changes:
  - When `SignedUninstaller` is set to `yes`, any temporary self-copies used by Setup are now digitally signed too.
  - `Uninstallable` may now be set to a boolean expression, which may contain calls to check functions. For example: `Uninstallable=not IsTaskSelected('portablemode')`. See the `Uninstallable` documentation for details.
  - `AppVerName` is no longer required if `AppVersion` is specified. It will now effectively default to: `{cm:NameAndVersion,[AppName],[AppVersion]}`. The Compiler IDE's New Script Wizard now also asks for an `AppVersion` instead of an `AppVerName`.
  - If a text `VersionInfo*` directive is set to an empty string (as opposed to not being specified), then the version info field is really set to an empty string now, instead of forcing a default value.
  - `VersionInfoProductTextVersion` now defaults to `VersionInfoProductVersion` if set, else `AppVersion` if `AppVersion` is set and does not include constants, else `VersionInfoTextVersion`.
- Unicode Inno Setup: an issue with the taskbar button re-appearing on /VERYSILENT installs has been fixed.
- Unicode [Code] based on RemObjects Pascal Script SVN code revision 228.
- Minor tweaks.

5.3.9 (2010-04-10)

- For better appearance on Windows 7 and Vista when ClearType is enabled, Tahoma is the new default font used by Setup and Uninstall. A new [Setup] section directive `DefaultDialogFontName` has also been added to make it easy to override the default dialog font for all languages that do not have a custom `DialogFontName` setting. If you would like to revert to the dialog font used in previous versions of Inno Setup (Microsoft Sans Serif if available, else MS Sans Serif), set `DefaultDialogFontName` to an empty string (`DefaultDialogFontName=`).
- Added new [Setup] section directive: `DisableWelcomePage` to hide the Welcome wizard page. Doing so is recommended by the Aero wizard guidelines. Additionally, the `ShouldSkipPage` event function is now also called for `wpWelcome`.
- When Setup is not running silently, the Ready To Install wizard page now ignores attempts to skip it when no other wizard page before it has been shown yet.
- Added LZMA2 compression support:
  - Updated the LZMA SDK compression code to version 9.10 which adds support for LZMA2 compression. LZMA2 is a modified version of LZMA that offers a better compression ratio for uncompressible data (random data expands about 0.005%, compared to 1.35% with original LZMA), and optionally can compress multiple parts of large files in parallel, greatly increasing compression speed but with a possible reduction in compression ratio. LZMA2 compression may be activated by setting the `Compression` [Setup] section directive to `lzma2`, and `lzma2` is now also the default value.
- Added various new [Setup] section directives with names that start with `LZMA` to fine-tune LZMA and LZMA2 compression parameters, including `LZMADictionarySize` which allows the LZMA dictionary size to be increased up to 256 MB from the previous maximum of 64 MB. Review the memory requirements listed in the `Compression` topic before using.
- Tweaked the JMP/CALL instruction optimization algorithm for slightly better compression of executable files. (On Inno Setup's own installer, this saved about 2 KB.)
- Improved compression of x64 executable files: just like for x86 executable files, JMP/CALL instruction optimization is now performed for x64 executable files. On average, this will reduce the compressed size of x64 executable files by 2-3%.
- [Setup] section directive `DiskSliceSize` can now be set to `max`, and `max` is now also the default value.
- Windows 7 change: The Compiler IDE is now pinnable. Also, files that are opened via the Welcome dialog, MRU list, and drag & drop now get added to the Jump List.
- Windows 7 and Vista changes:
  - Before deleting a pinned shortcut, Uninstall now automatically removes it from the current user's Start menu pinned list and on Windows 7 also from the taskbar.
  - Changed the icon that is shown on Select Start Menu Folder wizard page. Previously, it used the same icon as the preceding Select Destination Location page, but that was never really the intention.
  - When Setup and Uninstall respawn for elevation, any SUBST'ed drives in the EXE filename are now expanded before the respawn, since the elevated user will not retain the original user's SUBST mappings. Fixes error seen when starting Setup from a SUBST'ed drive.
- Setup now uses the SHA-1 algorithm instead of MD5 for file checksums and various internally-used hashes.
- Pascal Scripting: Added support functions `GetSHA1OfString`, `GetSHA1OfUnicodeString`, and `GetSHA1OfFile`.
- QuickStart Pack: Added ISPP functions `GetSHA1OfString`, `GetSHA1OfUnicodeString`, and `GetSHA1OfFile`.
- [Icons] section parameter `AppUserModelID` is now also used on Windows Server 2008 R2.
- In Setup's version info text fields, "(C)" is now automatically replaced with real copyright symbols ("©").
- Unicode Inno Setup: Added workaround for upstream Delphi bug that could cause Setup (versions 5.3.6 to 5.3.8) to display a "Stream read error" error message at startup on Windows 2000 systems that did not have Service Pack 4 installed.
- Compiler IDE change: the Tools | Configure Sign Tools... dialog now allows editing of existing Sign Tools.
- The uninstall program's version is now 51.(10)52.0.0.
- Minor tweaks.

5.3.8 (2010-02-18)

- Added new [Setup] section directive: `UsePreviousLanguage`. When this directive is `yes`, the default, at startup Setup will look in the registry to see if the same application is already installed, and if so, it will use the language of the previous installation as the default language selected in the list of available languages on the Select Language dialog. Note that this directive does not change the language used by the Select Language dialog itself because it cannot assume that the current user understands the same languages as the previous user. `UsePreviousLanguage` must be set to `no` when `AppId` includes constants.
- On Windows Vista and newer, Uninstall no longer blocks system shutdown until the uninstallation has actually started. This should make the Windows 7 Logo Kit (which wrongly tests any .exe in the application directory including the uninstaller) happy when it tries to shutdown an Uninstall sitting on its confirmation prompt.
- On Windows NT and newer, `PrivilegesRequired=lowest` now has an additional effect: the uninstall info root key will always be HKEY_CURRENT_USER, and the "common" forms of the Shell Folder constants are always mapped to the "user" forms, even if administrative privileges are available.
- [Setup] section directive `CreateUninstallRegKey` may now be set to a boolean expression, which may contain calls to check functions. For example: `CreateUninstallRegKey=not IsTaskSelected('portablemode')`. See the `CreateUninstallRegKey` documentation for details.
- The Preparing to Install wizard page now offers the user an option to directly reboot instead of just saying a reboot is needed. To trigger this option from a `PrepareToInstall` event function set its new `NeedsRestart` parameter to True.
- In the `MinVersion` and `OnlyBelowVersion` directives and parameters, `.x` is now treated the same as `.0x` when a major version of 5 or higher is specified. Thus, you now have the option of using either `5.01` or `5.1` to specify Windows XP. However, to maintain compatibility with existing scripts, `4.x` will still be interpreted as `4.x0`.
- Pascal Scripting: Added new `PageIndexFromID` support function.
- The online documentation available at http://www.jrsoftware.org/ishelp/ now has an index and is searchable.
- QuickStart Pack changes:
  - Added ISPP function `StringChange`.
  - The ISPP documentation is now available online at http://www.jrsoftware.org/ispphelp/.
- The uninstall program's version is now 51.(10)51.0.0.
- Minor tweaks.

5.3.7 (2010-01-06)

- The `PrivilegesRequired` [Setup] section directive can now be set to `lowest`. On Windows Vista and later this instructs Setup to not request elevated rights (via a User Account Control dialog) even if it was started by a member of the Administrators group. Do not use this setting unless you are sure your installation will run successfully on unprivileged accounts. If you were using `PrivilegesRequired=none` before, it is recommended to switch to `PrivilegesRequired=lowest`.
- Added new Compiler IDE option: Autosave before compiling.
- [Tasks] section flags `checkedonce` and `unchecked` may now be combined. This combination specifies the task to be unchecked by default on the first install, and always unchecked by default on subsequent installs as well.
- A problem with "Not Implemented" errors when Setup or Uninstall was run on Windows 7 under special conditions such as from a non-interactive service was fixed.
- Changed the CodePrepareToInstall.iss example script to use the RunOnce registry key instead of a shortcut placed in `{commonstartup}`.
- Pascal Scripting: the Non Unicode compiler now has a `PAnsiChar` type just like the Unicode compiler.
- Added official Japanese translation.
- Unicode [Code] based on RemObjects Pascal Script SVN code revision 197.
- Minor tweaks.

5.3.6 (2009-11-14)

- Windows 7 change:
  - Added new [Setup] section directive: `UninstallDisplaySize`. On Windows 7 and newer, Setup uses this directive to set the `EstimatedSize` value in the Uninstall registry key when possible since the Windows 7 Add/Remove Programs Control Panel (called Program and Features) no longer automatically calculates it. If an `UninstallDisplaySize` is not set, Setup estimates the size itself by taking the size of all files installed and adding any `ExtraDiskSpaceRequired` values set. Note: Windows 7 only supports the display of values smaller than 4 GB.
- Pascal Scripting now supports `IUnknown` based COM. Previously it only supported `IDispatch` based COM but a growing number of Windows API functions are COM based without implementing the `IDispatch` interface, and you can now use these as well. See the new CodeAutomation2.iss example script for an example. Note: this is only supported by Unicode Inno Setup at the moment, because of Delphi 2's limitations (Delphi 2 is used to compile Non Unicode Inno Setup):
  - Added `StringToGUID`, `CreateComObject`, and `OleCheck` support functions.
  - Added `HResult`, `TGUID`, `TCLSID`, and `TIID` support types.
- The compiler no longer allows a single `LanguageCodePage` directive to be applied to multiple languages at once. If you were using this to force Non Unicode Setup to allow the user to select any language regardless of the system code page, set [Setup] section directive `ShowUndisplayableLanguages` to `yes` instead.
- Added new CodePrepareToInstall.iss example script.
- Fix: Unicode Pascal scripting: passing a very long string to `Format` caused an error.
- Minor tweaks.

5.3.5 (2009-09-23)

- Windows 7 changes:
  - Setup, Uninstall and custom `TOutputProgressWizardPage` pages now make use of the new Windows 7 taskbar functionality to display progress, pause and error indicators on their taskbar buttons.
  - Added new [Icons] section parameter: `AppUserModelID`. Specifies the Windows 7 Application User Model ID for the shortcut. Ignored on earlier Windows versions and on server versions. This parameter can include constants.
- Windows 7 and Vista changes:
  - Setup, Uninstall and custom `TOutputProgressWizardPage` pages now display pause and error indicators on their progress bars.
  - Setup and Uninstall now call the Windows API function `ShutdownBlockReasonCreate` to set the shutdown block reason string to be displayed to the user if system shutdown is initiated. Note: this change is purely cosmetic, the fact that Setup and Uninstall block system shutdown is not new.
- Pascal Scripting changes:
  - TWinControl: Added new `ParentBackground` property. By setting this to False, you can ensure the background of a TPanel will always display the color assigned to its `Color` property, instead of it becoming transparent under certain conditions. See the CodeClasses.iss example script for an example.
- The Unicode compiler now behaves identical to the Non Unicode compiler if a language uses more than one .isl file (it no longer requires the `LanguageCodePage` to be set in each file), or if a languages `LanguageCodePage` is overwritten from the .iss file (it no longer ignores this), or if any language specific plain text ANSI `LicenseFile`, `InfoBeforeFile`, or `InfoAfterFile` is used (it now converts these to Unicode using the languages `LanguageCodePage` at compile-time, instead of using the system codepage at run-time).
- Fix: Pascal scripting: passing a Unicode string to some built-in functions like `Copy` caused the string to be converted to ANSI.
- The uninstall program's version is now 51.(10)50.0.0.
- Minor tweaks.

5.3.4 (2009-08-15)

- On Windows 7 the Compiler IDE now makes use of the new Windows 7 taskbar functionality to display progress, pause and error indicators on its taskbar button.
- Pascal Scripting: Documented function `IDispatchInvoke`, which can be used to access a COM Automation property or method whose name is a reserved word.
- Fix: Unicode [Registry] section entries with `ValueType` set to `binary` did not set the correct value.
- Fix: Pascal scripting: setting a COM Automation property or method parameter to a Unicode string variable caused an 'Invalid Type' error.

5.3.3 (2009-08-01)

- [Setup] section directives `VersionInfoProductVersion` now sets the binary product version value instead of the textual product version value.
- Added new [Setup] section directive: `VersionInfoProductTextVersion`, which sets the textual product version value. Its default value is `VersionInfoProductVersion` if set, else `VersionInfoVersion`.
- [Setup] section directives `DisableDirPage` and `DisableProgramGroupPage` can now be set to `auto`. If they are, at startup Setup will look in the registry to see if the same application is already installed, and if so, it will hide the pages automatically.
- Pascal Scripting changes:
  - `WizardForm.PrevAppDir` is now available and returns the directory of the previous installation. Returns an empty string if there's no previous installation or if `UsePreviousAppDir` is set to `no` or if `Uninstallable` was previously set to `no`.
  - While running any `PrepareToInstall` event function Setup now displays the Preparing to Install wizard page instead of the Ready to Install page and disables itself.
- Added the Windows 7 "compatibility" section to the various manifest resources used by Inno Setup.
- Documentation improvements.

5.3.2-beta (2009-05-29)

- Replaced constant `{regasmexe}` with `{dotnet11}` and `{dotnet20}`.
- Pascal Scripting: Added new `PrepareToInstall` event function. Return a non empty string from this function to instruct Setup to stop at the Preparing to Install wizard page showing the returned string as the error message.
- Minor fixes and tweaks.

5.3.1-beta (2009-05-15)

- [Setup] directive `AppMutex` and support function `CheckForMutexes` change: to specify a mutex name containing a comma you can now escape the comma with a backslash.
- Minor tweaks.

5.3.0-beta (2009-04-22)

- Added .NET support (these cause an internal error if used on a system with no .NET Framework present):
  - Added new [Files] section flag: `gacinstall`.
  - Added new [Files] section parameter: `StrongAssemblyName`.
  - Added new constants: `{regasmexe}`, `{regasmexe32}`, `{regasmexe64}`.
- `MinVersion` parameter/directive change: if you leave one of the versions empty then it will use the default `MinVersion` for that platform.
- Pascal Scripting: Added new `MinimizePathName` support function.
- Added Unicode support: there's now a second version of Inno Setup available called Unicode Inno Setup. Key features of this version are its ability to display any language on any system regardless of the system code page, and its ability to work with Unicode filenames. Notes:
  - Unicode Inno Setup uses the existing ANSI .isl language files and you should not and may not convert these to Unicode or anything similar since it does so automatically during compilation using the `LanguageCodePage` setting listed inside the language's .isl file. However, you do need to convert existing [Messages] and [CustomMessages] entries in your .iss files to Unicode if the language used a special `LanguageCodePage`.
  - The [Setup] directive `ShowUndisplayableLanguages` is ignored by Unicode Inno Setup.
  - Unicode Inno Setup is compiled with Delphi 2009 instead of Delphi 2 and 3, leading to slightly larger files. The source code however is still compatible with Delphi 2 and 3, and a non Unicode version will remain available.
  - Unicode Inno Setup and installers created by it require Windows 2000/XP or newer. The non Unicode version still works on NT/9x.
  - Existing installations of your programs done by non Unicode installers can be freely updated by Unicode installers, and vice versa.
  - Unicode Pascal Scripting notes:
    - The Unicode compiler sees type 'String' as a Unicode string, and 'Char' as a Unicode character. Its 'AnsiString' type hasn't changed and still is an ANSI string. Its 'PChar' type has been renamed to 'PAnsiChar'.
    - The Unicode compiler is more strict about correct ';' usage: it no longer accepts certain missing ';' characters.
    - The new RemObjects PascalScript version used by the Unicode compiler supports Unicode, but not for its input source. This means it does use Unicode string types as said, but any literal Unicode characters in the script will be converted to ANSI. This doesn't mean you can't display Unicode strings: you can for example instead use encoded Unicode characters to build Unicode strings (like `S := #$0100 + #$0101 + 'Aa';`), or load the string from a file using `LoadStringsFromFile`.
    - Some support functions had their prototype changed: some parameters of `CreateOutputMsgMemoPage`, `RegQueryBinaryValue`, `RegWriteBinaryValue`, `OemToCharBuff`, `CharToOemBuff`, `LoadStringFromfile`, `SaveStringToFile`, and `GetMD5OfString` are of type AnsiString now instead of String.
    - Added new `SaveStringsToUTF8File`, and `GetMD5OfUnicodeString` support functions.
    - If you want to compile an existing script that imports ANSI Windows API calls with the Unicode compiler, either upgrade to the 'W' Unicode API call or change the parameters from 'String' or 'PChar' to 'AnsiString'. The 'AnsiString' approach will make your [Code] compatible with both the Unicode and the non Unicode version.
  - Unicode Inno Setup supports UTF-8 encoded .iss files (but not UTF-16).
  - Unicode Inno Setup supports UTF-8 and UTF-16LE encoded .txt files for `LicenseFile`, `InfoBeforeFile`, and `InfoAfterFile`.
  - QuickStart Pack: added ISPP predefined variable `UNICODE`.
- Thanks to Carlo Kok and Evgeny Karpov of RemObjects Software for their help related to Unicode support.
- QuickStart Pack: added ISPP functions `Trim`, and `GetMD5OfUnicodeString`.

5.2.4 (2009-03-16)

- Added new [Registry] section `ValueType`: `qword`.
- Added new [Setup] section directive: `SignTool`, which makes it possible to further automate digital signing of Setup and Uninstall. See the help file for more information.
- The value of the `AppVersion` directive is now also used to set the `MajorVersion` and `MinorVersion` values in the Uninstall registry key when possible.
- /LOG: Now logs exit codes on [UninstallRun] entries.
- Compiler IDE changes:
  - Added new Tools | Configure Sign Tools... command.
- Command line compiler changes:
  - Added new "/S" parameter to specify a Sign Tool.
- Added new [Files] section flag: `sortfilesbyname`.

5.2.3 (2008-03-10)

- Improved support for right-to-left languages (Arabic and Hebrew):
  Added new [LangOptions] section directive: `RightToLeft`. If set to `yes`, text alignment and reading order will be reversed (with some intentional exceptions), and controls will be arranged from right to left ("flipped").
- Added new [Setup] section directives: `VersionInfoProductName` and `VersionInfoProductVersion`.
- Changed the fixed Language field in Setup's version info from "English (United States)" to "Language Neutral".
- Uninstall now supports custom message constants (`{cm:...}`) like Setup.
- Right-to-left-related Pascal Scripting changes:
  - The control flipping that is performed when `RightToLeft=yes` is mostly transparent, normally requiring no changes to existing code. Controls created on custom wizard pages will be flipped automatically after the `InitializeWizard` event function returns, and controls created on custom forms will, by default, be flipped the first time the form is shown.
  - Changes to TSetupForm (the class used for custom forms):
    - Added `RightToLeft` Boolean property (read-only): True if right-to-left text alignment and reading order is enabled on the form. The `RightToLeft` [LangOptions] directive determines the value of this property.
    - Added `FlipControlsOnShow` Boolean property: If True (the default setting if `RightToLeft` is True), controls on the form will be flipped the next time the form is shown. After the form has been shown, the property is reset to `False` automatically.
    - Added `ControlsFlipped` Boolean property (read-only): True if the controls have been flipped.
    - Added `FlipControlsIfNeeded` method. This flips the controls immediately if `FlipControlsOnShow` is True, then resets `FlipControlsOnShow` to False.
  - Added new classes: TNewEdit, TNewMemo, TNewComboBox, TNewButton, TNewCheckBox, TNewRadioButton, and TNewListBox. On these classes, right-to-left text alignment and reading order is used when the parent TSetupForm's `RightToLeft` property is True.
  - TNewStaticText: Added `ForceLTRReading` property. If set to True, the text will always be rendered with left-to-right reading order, overriding the parent form's `RightToLeft` setting.
- Other Pascal Scripting changes:
  - TNewStaticText: Added `AdjustHeight` method. This adjusts the value of the `Height` property to fit the text. Only useful when `AutoSize` is set to False.
  - Added new object `UninstallProgressForm` of class `TUninstallProgressForm`. Also added new event function `InitializeUninstallProgressForm`, which is called after the Uninstall progress form has been created and before it is shown. See the help file and the CodeClasses.iss example script for more information.
- Added workaround for bug in Windows Vista (still present in SP1): With UAC turned off, launching an uninstaller from the Programs and Features Control Panel applet and answering No at the confirmation message box would cause a "This program might not have uninstalled correctly" dialog to be displayed, even though the uninstaller includes a proper "Vista-aware" manifest.
- Compiler IDE changes:
  - The New Script Wizard now generates random unique `AppId` [Setup] section directives.
  - Added new Tools | Generate GUID command.
- QuickStart Pack: added ISPP functions `GetMD5OfFile`, `GetMD5OfString` and `GetFileDateTimeString`.
- Minor tweaks.

5.2.2 (2007-10-22)

- The Setup loader now extracts the Setup program executable file with a ".tmp" extension. Versions 5.2.0 and 5.2.1 used a ".exe.tmp" extension, which reportedly, in some cases, caused an "Unable to execute file in temporary directory" error message on systems with a certain antivirus program installed. We were unable to reproduce the error in our own tests, however; it is suspected that this may have only impacted users with custom filename blocking rules defined in their antivirus configuration.
- Pascal Scripting: Added new `GetSaveFileName` support function.
- Fix: The compiler could fail with an "Out of memory" error on script files containing more than ~100,000 lines, due to a heap fragmentation issue.

5.2.1 (2007-10-13)

- Added new [Setup] section directive: `SignedUninstaller`, which makes it possible to attach a digital signature to the uninstaller program (unins???.exe). When the uninstaller has a valid digital signature, Windows Vista users will not see an "unidentified program" warning when launching it from outside of Control Panel.
- Added new [Setup] section directive: `SignedUninstallerDir`.
- `Check` functions associated with [Tasks] entries are now called when the Select Tasks wizard page is entered. Previously, they were called prior to the wizard being shown, which meant they couldn't depend on the user's selections in preceding wizard pages. (There are plans to make the same change to [Components] in the future.)
- Brought back the pre-5.1.13 duplicate [Components]/[Tasks] entry semantics. For example, in the following case:

  > `[Tasks]
  > Name: foo; Description: "foo #1"; Components: bar
  > Name: foo; Description: "foo #2"; Components: not bar
  > Name: foo\child; Description: "foo\child"`

  "foo\child" will now, once again, be shown regardless of which "foo" is conditionally created.
- Pascal Scripting: "files:" function imports may now include multiple filenames. "files:A.dll,B.dll" will cause both A.dll and B.dll to be extracted before A.dll is loaded.
- On Windows Vista, Setup no longer alters the uninstaller program's manifest resource to request elevation, because this would invalidate a digital signature. Instead, the uninstaller now respawns itself when elevation is required, much like Setup does beginning with version 5.2.0.
- The uninstall program's version is now 51.49.0.0.
- Minor tweaks.

5.2.0 (2007-09-19)

- On Windows Vista, [Run] section entries with the `postinstall` flag no longer inherit Setup's elevated privileges by default, and instead now execute with the (normally non-elevated) credentials of the user that started Setup initially. (There are some exceptions; see the `runasoriginaluser` flag documentation for details.)
- Added new [Run] section flags: `runascurrentuser` and `runasoriginaluser`. These control which user credentials are used on Windows Vista when spawning processes. (`runasoriginaluser` is the default when the `postinstall` flag is used; `runascurrentuser` is the default otherwise.)
- Improved compression of x86 executable files. (This reduced the size of Inno Setup's own installer by approximately 10 KB.)
- Added new [Files] section parameter: `ExternalSize`.
- Added new constant: `{log}`. Translates to the log file name, or an empty string if logging is not enabled.
- Added new [Files] and [Dirs] sections flags: `setntfscompression` and `unsetntfscompression`. These flags instruct Setup to enable or disable NTFS compression on the file or directory.
- Pascal Scripting:
  - Added new `ExecAsOriginalUser`, `ShellExecAsOriginalUser`, and `SetNTFSCompression` support functions.
  - Now supports new DLL loading flag `loadwithalteredsearchpath` to load DLLs with the Windows flag LOAD_WITH_ALTERED_SEARCH_PATH.
- The Setup loader now uses the original Setup EXE filename + .tmp as the filename for the extracted Setup executable instead of a name comprised of random letters and numbers, which may have seemed suspicious to firewall users.
- In a multilingual installation, Setup now waits until after the Select Language dialog is shown to display any error messages concerning the user's Windows version or privilege level.
- QuickStart Pack: added ISPP function `GetDateTimeString`.
- Fix: On Windows Vista, AutoPlay wasn't being suppressed when the user swapped out discs in a disk-spanned install.
- Fix: When the `waituntilidle` flag was used in the [UninstallRun] section, it behaved like `waituntilterminated`.
- Based on RemObjects Pascal Script SVN code revision 1045a.
- The uninstall program's version is now 51.48.0.0.
- Minor tweaks.

5.1.14 (2007-08-07)

- Updated the LZMA SDK compression code to version 4.49. This version adds support for multi-threading, which can speed up the compression process by 50% or more on systems with multiple processor cores, and 20% or more on systems with single-core Intel processors featuring Hyper-Threading Technology.
- Added new `CompressionThreads` [Setup] section directive.
- Fix: When cleaning the output directory, the compiler would not only delete files matching `OutputBaseFilename`-*.bin, but files matching `OutputBaseFilename`-*-*.bin as well.

5.1.13 (2007-07-22)

- Added new `lzma/ultra64` compression level. Same as `lzma/ultra`, but uses a dictionary size that is twice as large (64 MB).
- Added new `SetupLogging` [Setup] section directive. If set to `yes`, Setup will always create a log file (equivalent to passing /LOG on the command line).
- Added new `AppSupportPhone` [Setup] section directive.
- Added new [Files] section flag: `solidbreak`.
- Added new [Run] and [UninstallRun] sections parameter: `Verb`. When used with the `shellexec` flag, specifies the action to be performed on the file.
- When the `shellexec` flag is used in the [Run] and [UninstallRun] sections, it now uses the default verb for the file type instead of hardcoding "open". (If necessary, you can override this by adding a `Verb` parameter.)
- Setup now supports a /TYPE parameter to override the default setup type.
- Components/tasks-related changes:
  - /COMPONENTS & /TASKS: When a parent component/task is specified, it no longer automatically checks every child component/task. To achieve the old behavior, prefix the name of the parent component/task with a "*" character, or list each child component/task individually.
  - /COMPONENTS: It is now possible to force a child component to be deselected by including its name in the list with a "!" prefix. (/TASKS already supports this.)
  - /COMPONENTS is now ignored if no custom type is defined.
  - /SAVEINF now writes the selected setup type in the INF file. Previously, using /LOADINF would always select a custom type.
  - /SAVEINF now writes the selected tasks in the INF file.
  - When a `MinVersion`/`OnlyBelowVersion`/`Languages`/`Check`/`Components` parameter causes a parent component/task to be hidden from view, child items will now be hidden as well. (Previously, it was necessary to include the same conditions on every child item in order for them to be hidden along with the parent item.)
  - Fix: When new child components/tasks were introduced in a new install, they would always be selected by default if the parent component/task was selected in the previous installation.
  - Fix: /LOADINF would select child components that weren't selected during the initial install.
  - Fix: In a /COMPONENTS parameter, it is no longer necessary to list `fixed` components in order for them to be selected.
- Pascal Scripting changes:
  - FindFirst/FindNext: Add `CreationTime`, `LastAccessTime`, `LastWriteTime`, `AlternateName` fields to TFindRec.
  - TInputFileWizardPage: Added new `IsSaveButton` property. This can be used to make a button open a Save As dialog instead of the default Open dialog.
  - TNewCheckListBox: Setting `Checked[]` to True will no longer automatically check an item's child check boxes. To do that now, call the new `CheckItem` method with `coCheckWithChildren` in the `AOperation` parameter.
  - ParamStr/ParamCount: Empty parameters ("") are no longer skipped.
- /LOG: Logged times now include milliseconds.
- Compiler IDE changes:
  - During the compression phase of a compile, the status bar now shows the estimated time remaining and KB compressed/second.
  - The Edit | Redo shortcut is now Ctrl+Y. The previous shortcut (Shift+Ctrl+Z) still works too.
- Fix: In the [INI] section, if `Filename` was blank, the `uninsdelete*` flags didn't actually delete anything.
- The uninstall program's version is now 51.47.0.0.
- Minor tweaks.

5.1.12 (2007-04-24)

- Fix: On Windows Vista, attempting to expand a shell folder constant that mapped to the root directory of a drive would fail with an error message. This was due to a bug in Vista's SHGetFolderPath API. A workaround for the problem has been implemented.
- On Browse dialogs, the `BrowseDialogLabel` message text may now span multiple lines.
- The `OnlyOnThisPlatform` message is no longer used. Now, when a Windows 95/98/Me user attempts to run an installation with a `MinVersion` setting that blocks installation on non-NT platforms, Setup will display the `WinVersionTooLowError` message, which is a bit more helpful as it mentions the required version number.
- Corrected some trivial one-pixel-off issues when non-default dialog fonts or font sizes were used.
- Added official Hebrew translation.
- Minor tweaks.

5.1.11 (2007-03-01)

- On Windows 2000 and later, it now uses Windows' own regsvr32.exe to handle DLL registration/unregistration instead of an internal program. This should address errors seen on Windows Vista when registering certain older DLLs. (Windows Vista applies a compatibility fix known as "WRP Mitigation" to regsvr32.exe, which allows it to successfully register DLLs that attempt to write to system registry keys in violation of Windows Resource Protection.)
- Some messages have been added and removed in this version. (View differences in Default.isl)
  - New messages: ErrorRegSvr32Failed.
  - Removed messages: ErrorRegisterServerMissingExport.
- The uninstall program's version is now 51.46.0.0.
- Minor tweaks.

5.1.10 (2007-02-17)

- Added two new [Run]/[UninstallRun] section flags: `32bit` and `64bit`. Similar to the [Files] section flags of the same name, these override the install mode and affect which System directory the `{sys}` constant maps to on 64-bit Windows.
- Pascal Scripting:
  - Added new `EnableFsRedirection` support function.
  - On the `Exec` function, you can now pass `'>'` in the `Filename` parameter and it will use the value of the `Params` parameter as the full command line. This feature can come in handy when executing command lines obtained from UninstallString registry values; no longer is it necessary to separate strings into filename and parameter components manually.
  - Fix: `IsComponentSelected` and `IsTaskSelected` didn't accept forward slashes.
- Improved Setup's folder tree view control (seen when a Browse button is clicked):
  - On Windows Vista, it now uses the same theme as Windows Explorer.
  - On Windows Vista, for consistency with Explorer, single-clicking in a node's text area no longer causes the node to expand.
  - Like Windows Explorer, folder nodes now use the shell's "display names", as opposed to the actual directory names. This matters on localized versions of Windows Vista, where the on-disk names of system folders are always in English.
  - The system "icon" font is now used instead of the default dialog font. This font defaults to Segoe UI on Windows Vista, and typically Tahoma or MS Sans Serif on earlier versions of Windows.
  - Disconnected network drives are now listed; expanding one will restore the connection (on Windows 2000, Me, and later).
- On the Select Destination Location wizard page (as well as custom directory selection pages created using the `CreateInputDirPage` support function), if the letter of a disconnected network drive is entered, and the user is running Windows XP or later, it will now attempt to restore the connection automatically when Next is clicked. (It also does this on silent installs.)
- On Windows Vista, eliminated the flickering on Setup's progress bar (purely a cosmetic issue).
- On Windows Vista, Setup now calls SetProcessDPIAware to avoid bitmap scaling when Windows is configured to use Large Fonts and the "Use Windows XP style DPI scaling" option is unchecked (not the default setting).
- Compiler IDE changes:
  - Added new option: Always launch Setup/Uninstall as different user. This forces the IDE to display a "Run as" dialog when launching Setup/Uninstall.
  - The Stop Compile command now displays a confirmation message box.
- Added a "Vista-aware" manifest resource to ISCC so it doesn't request elevation on Windows Vista.
- Fix: ISCC didn't always print error messages when standard output was redirected to a file.
- When Setup fails to set the permissions on files, directories, or registry keys, the error code is now included in the log output.
- When Setup fails to expand a shell folder constant, a warning message containing the error code is now logged.
- Changed the way version information is read from VXD files to be more compliant with the MSDN docs.
- The uninstall program's version is now 51.45.0.0.
- Minor tweaks.

5.1.9 (2006-12-10)

- Change in default behavior: The `PrivilegesRequired` [Setup] section directive now defaults to `admin`. The default in all previous versions was `none`. More often than not, installations do need administrative privileges to run successfully; therefore, `none` should not be used unless you have actually tested your installation on unprivileged accounts.
- On Windows Vista, the setting of the `PrivilegesRequired` directive now influences whether elevated rights are requested when the installation is started under a user account that does not have administrative privileges. Installations built with previous versions of Inno Setup always requested elevation on Vista. Beginning with this version, elevation will not be requested if the user is unprivileged and `PrivilegesRequired` is set to `none`.
- On Windows Vista, the uninstaller will no longer request elevation when Setup was never run with administrative privileges.
- URLs (web site addresses) may now be specified in the `Filename` parameter of [Icons] section entries. When a URL is detected, Setup will create an Internet Shortcut (.url) file instead of a regular shortcut.
  (Note: While you could sometimes get away with specifying URLs in previous versions of Inno Setup, it was never recommended because the shortcuts would fail to resolve on Windows 95 or NT 4.0. Internet Shortcuts, on the other hand, will work on any version of Windows, as long as Internet Explorer is installed.)
- Added workaround for bug in the 64-bit version of Windows Vista: The fields on the User Information wizard page would default to "Microsoft".
- Pascal Scripting: Added new `FontExists` support function.
- The uninstall program's version is now 51.44.0.0.
- Minor tweaks.

5.1.8 (2006-10-11)

- Converted the documentation to HTML Help format for compatibility with Windows Vista, which does not support WinHelp-based help files at all (as of RC2). HTML Help is also said to work better with screen readers. Much of the conversion process was done by hand, so there may be some mistakes. Please report any problems you encounter.
- Updated the LZMA SDK compression/decompression code to version 4.43. Compression is noticably faster in this version. (Compiling Inno Setup's own installer used to take 7 seconds; now it takes 4.)
- Added a "requestedExecutionLevel" setting to Setup's manifest resource to disable Windows Vista's legacy application compatibility hacks. Now you should no longer see bogus "This program might not have installed correctly" dialogs when cancelling installations or after running installations that do not create an Uninstall key.
  Note: It is possible that you were unwittingly relying on some of these application compatibility hacks, so it is recommended that you re-test your installations on Windows Vista after upgrading to this version.
- When deleting a .chm file, the uninstaller will now automatically delete any corresponding .chw file as well.
- Paths that are accessed at compile time may now include a "userdocs:" prefix, which is replaced with the path of your My Documents folder. For a usage example, see any of the example scripts.
- Setup now creates an "InstallDate" value in the Uninstall key so that Vista's Programs and Features Control Panel applet doesn't have to guess the "Installed on" date.
- Pascal Scripting changes/improvements:
  - The `StringChange` function now returns an Integer indicating the number of changes made. Performance was also improved.
  - Introduced new `StringChangeEx` function, which adds support for strings containing double-byte characters (used in Chinese, Japanese, and Korean languages). Unless you require binary safety, this function should be used instead of `StringChange`, especially if you're working with strings containing paths or filenames.
- IDE changes:
  - The Open and Save As dialogs now permit sizing and include a places bar.
  - On Windows Vista, the IDE no longer requests administrative privileges when started. (You will, however, still see UAC popups when launching compiled installations from within the IDE.)
  - When you compile an unsaved script, the output is now placed under your My Documents folder (instead of the current directory). It asks if you want to save the script first, though.
- Updated bzip2 library to version 1.0.3.
- Minor tweaks.

5.1.7 (2006-08-18)

- New [Setup] section directive: `TerminalServicesAware`. If set to `yes` (the default), the "Terminal Services aware" flag will be set in the headers of the Setup and Uninstall programs. Most notably, this ensures that the `{win}` constant consistently returns the system's real Windows directory on systems with Terminal Services installed in application mode. Refer to the help file for details.
- The program Setup internally uses to register/unregister DLLs/OCXs is now compiled with the "Terminal Services aware" flag set, like Microsoft's regsvr32.exe.
- When determining which language to select by default, Setup now checks the `LanguageCodePage` values of each language in addition to `LanguageID`. Previously, Traditional Chinese could be auto-selected on a Simplified Chinese system due to both languages having the same primary language ID. This resulted in unreadable text as they use completely different character sets (code pages).
- New [Setup] section directive: `ShowUndisplayableLanguages`. If set to `yes`, all languages will be listed in the Select Language dialog, including those that cannot be displayed properly on the user's system. If you were using the `LanguageCodePage=0` trick in your script before, you should replace it with this to avoid the above-mentioned problem with Chinese languages.
- A unique value is now appended to unins*.exe files so that uninstallers from different applications won't have the same hash.
- The compiler now flags MSCOREE.DLL as an "unsafe" file.
- Fix: The `createallsubdirs` [Files] section flag didn't properly escape directory names containing "{" characters.
- Fix: The text on the Finished wizard page wasn't initialized when a restart was needed and /NORESTART was used without /SILENT.
- Pascal Scripting: Defined new DWORD_PTR, UINT_PTR, and INT_PTR types for completeness.
- Added official Basque and Spanish translations.
- The uninstall program's version is now 51.43.0.0.
- Minor tweaks.

5.1.6 (2005-11-18)

- Registration and unregistration of 32-bit DLLs is now performed in an external process. This change was primarily made to ensure that a buggy DLL cannot bring down the entire Setup/Uninstall process by, for example, corrupting its memory.
- Pascal Scripting changes/improvements:
  - The already-existing `AnsiUppercase` and `AnsiLowercase` functions are now documented. Unlike their non-`Ansi` counterparts, these can handle non-ASCII characters (e.g. accented letters).
  - TNewCheckListBox: Added new `ItemCaption` property. This can be used to change the caption of an already-created item. (Setting an item's caption through the `Items` property is not supported by TNewCheckListBox.)
- OLE is now initialized before registering a 64-bit DLL.
- While Setup is waiting for a 64-bit DLL to register, it now processes messages.
- On CD/DVD-spanned installs, fixed issue with AutoPlay not being suppressed if you clicked OK too quickly on the Setup Needs the Next Disk dialog after swapping CDs/DVDs.
- When `WindowVisible=yes`, the gradient background now uses 256 colors instead of 64, resulting in a smoother appearance when running in 24- or 32-bit color mode.
- In the documentation for the `Excludes` [Files] section parameter, mention that a simple Unix-style pattern matching routine is used, which exhibits some differences from the DOS/Windows-style pattern matching used in the `Source` parameter.
- Added official Slovak translation.
- Minor tweaks.

5.1.5 (2005-08-17)

- Added new `VersionInfoCopyright` [Setup] section directive, which allows you to set the Copyright field in Setup's version info.
- Pascal Scripting changes/improvements:
  - New functions: `CustomMessage`, `FmtMessage`.
  - The `FileExists` function no longer strips off any trailing backslash from the specified filename. Previously, `FileExists('c:\filename\')` could return True.
  - TNewCheckListBox: Add new `RequireRadioSelection` Boolean property, which defaults to False. The "require a selection on top-level radio button groups" behavior introduced in 5.1.4 is now optional and disabled by default on user-created TNewCheckListBoxes.
- Now handles values with surrounding quotes consistently across all [Setup] and [LangOptions] directives. Previously, only certain directives would strip surrounding quotes; now they all do. If you were relying on the old, inconsistent behavior, it may be necessary to tweak your scripts.
- On [INI] section entries whose filenames include paths, it now checks if the directories exist and creates them if necessary.
- For consistency with regsvr32, FPU exceptions are now masked while registering/unregistering 32-bit DLLs.
- /LOG: When processing a [Files] entry that has the `32bit` or `64bit` flag, it now logs a message to that effect.
- Added official Finnish translation.
- SetupLdr's internal data is now stored in a resource instead of in the DOS header. This should address compatibility issues with third-party apps that replace the DOS header.
- Updated zlib library to version 1.2.3.
- Minor tweaks.

5.1.4 (2005-05-30)

- New command line parameters supported by Setup: /TASKS and /MERGETASKS. These can be used to initially select/deselect tasks.
- Pascal Scripting: Added new `GetWindowsVersionEx` function, which returns extended information about the user's version of Windows, including the service pack level and product edition (e.g. Professional or Home, Standard or Enterprise Server).
- Using /COMPONENTS= with an empty components list now deselects all components. Ditto for "Components=" in a .INF file (loaded via /LOADINF). Previously, it would keep the default selection in these cases.
- On the Select Tasks wizard page, when the list of tasks has to be reinitialized due to the user going back and changing the component selection, it now restores the checked state of the items from when the page was last shown.
- It should no longer be possible for a top-level, `exclusive` group of components or tasks to have no selection. If the script specifies that all items in the group are to be unchecked, Setup will check the first item automatically.
- Removed 1024-character limit on .INI-file values read via the `{ini:...}` constant or `GetIniString` support function. Now, values can be up to 64 KB in length, or the maximum length supported by the operating system, whichever is smaller.
- Fix: The `CreateOleObject` and `GetActiveOleObject` support functions leaked references in some cases.
- Fix: Setup would crash or fail to start if passed a command line parameter more than 255 characters in length. (This was due to a buffer overflow bug in a Delphi run-time library function.)
- Based on RemObjects Pascal Script SVN code revision 1045.
- Minor tweaks.

5.1.3-beta (2005-05-03)

- Pascal Scripting:
  - When Setup/Uninstall is running in 64-bit mode, most of the support functions that access files now disable WOW64 file system redirection, meaning they are now capable of working with files located in the 64-bit System directory. Some, however, still do not. See the 64-bit Installation Limitations topic in the help file for specifics.
  - Replaced `FileSearch` function with a new implementation that properly supports MBCS, and doesn't search the current directory unless it is told to (e.g. by including "." in the directory list).
- Uninstaller: Now hides the taskbar button when the /VERYSILENT switch is used.
- IDE change: Added an option to the New Script Wizard to specify that the application doesn't have a main executable file.
- Based on RemObjects Pascal Script SVN code revision 1039.
- Minor tweaks.

5.1.2-beta (2005-04-14)

- Addressed some 64-bit limitations in previous betas:
  - Setup is now capable of registering 64-bit DLLs/OCXs and 64-bit type libraries. When Setup is running in 64-bit mode, the `regserver` and `regtypelib` [Files] section flags assume that files are 64-bit by default. If you need to register a 32-bit file in a 64-bit mode install, include the new `32bit` flag.
  - Setup is now capable of setting permissions on 64-bit registry keys and on files located in the 64-bit System directory.
- Added two new [Files] section flags: `32bit` and `64bit`. These override the install mode and affect which System directory the `{sys}` constant maps to, whether the `regserver` and `regtypelib` flags treat the file as 32-bit or 64-bit, and which SharedDLLs key the `sharedfile` flag updates.
- Pascal Scripting: Added new `Is64Bit` parameters to the following functions: `IncrementSharedCount`, `DecrementSharedCount`, `RegisterServer`, `UnregisterServer`, `RegisterTypeLibrary`, `UnregisterTypeLibrary`. See the documentation for details.
- Setup will now only append to existing uninstall logs created by installs done in the same bit mode (32- or 64-bit).
- When an error occurs while registering a DLL/OCX/type library after a restart, it now displays an error message, provided the `noregerror` flag isn't used. Before, it was silent.
- Constants may now be used in the `AppMutex` [Setup] section directive.
- Added official Brazilian Portuguese, Danish, Hungarian, and Italian translations.
- Renamed official Standard Portuguese translation file from PortugueseStd.isl to Portuguese.isl.
- Various minor fixes to the 64-bit functionality.
- Updated the LZMA SDK compression/decompression code to version 4.16. The new version incorporates some fixes and a minor speed improvement.
- Based on RemObjects Pascal Script SVN code revision 1033.
- The uninstall program's version is now 51.42.0.0.
- Minor tweaks.

5.1.1-beta (2005-03-24)

- When Setup is running in 64-bit mode, it is now possible to install files to the 64-bit System directory, and execute programs located there.
  The `{sys}` constant now maps to the 64-bit System directory when used in the [Dirs], [Files], [InstallDelete], [Run], [UninstallDelete], and [UninstallRun] sections. Elsewhere, the `{sys}` constant still maps to the 32-bit System directory. See the Install Mode: 32-bit vs. 64-bit and 64-bit Installation Limitations topics in the help file for details.
- Added workaround for bug in the 64-bit editions of Windows prior to Windows Server 2003 SP1 RC2 which caused the `restartreplace` [Files] section flag to fail when used on files installed to `{sys}`. (Specifically, Windows would try to replace the file in the 64-bit System directory instead of the 32-bit one.)
- Compiler: A warning is now emitted instead of an error when a custom message isn't defined for all languages.
- Fix: The /COMPONENTS command line parameter supported by Setup didn't accept forward slashes in component names -- only backslashes.
- Fix: The compiler no longer automatically strips any trailing slashes/backslashes from the `Subkey` parameter of [Registry] entries. Versions 5.0.8 and 5.1.0-beta stripped forward slashes. This was wrong because valid registry key names can include forward slashes.
- Fix: When files were deleted by an [InstallDelete]/[UninstallDelete] section entry or `DelTree` function call, it also inappropriately stripped the read-only attribute from directories that matched the wildcard.
- Fix: An "internal error" message was displayed if the user removed all contents from the Select Start Menu Folder wizard page's edit control and also checked the Don't create a Start Menu folder check box.
- Based on RemObjects Pascal Script SVN code revision 1032.
- The uninstall program's version is now 51.41.0.0.
- Minor tweaks.

5.1.0-beta (2005-03-01)

- Inno Setup now has initial support for the installation of 64-bit applications on 64-bit versions of Windows:
  - Setup can run in one of two modes: 32-bit or 64-bit. 64-bit mode is selected if the user is running a 64-bit version of Windows and the system's processor architecture is included in the value of the new `ArchitecturesInstallIn64BitMode` [Setup] section directive. Otherwise, 32-bit mode is used.
    How do the two modes of installation differ? Primarily, the differences lie in where things are installed by default. For example, 64-bit applications have their own Program Files directory, and their own isolated view of the registry. See the Install Mode: 32-bit vs. 64-bit topic in the help file for details.
  - Added new [Setup] section directive `ArchitecturesAllowed`. When set, it specifies which processor architecture(s) Setup is allowed to run on.
  - Even when running in 32-bit mode, Setup is capable of installing files and creating registry keys in 64-bit locations, and vice versa. New options have been added that override the default locations:
    - New constants: `{pf32}`, `{pf64}`, `{cf32}`, `{cf64}`.
    - Root key names used in the [Registry] section, `{reg:...}` constants, and the `Reg*` [Code] support functions may now include `32` or `64` suffixes to specify either the 32-bit or the 64-bit view of the registry respectively.
  - To allow "multi-architecture" installations, new [Code] support functions have been added: `IsWin64`, `Is64BitInstallMode`, `ProcessorArchitecture`.
  - Added new `{syswow64}` constant and `GetSysWow64Dir` support function.
  - Added new example scripts: 64Bit.iss, 64BitTwoArch.iss, and 64BitThreeArch.iss.
  - Note: There are some limitations to be aware of when utilizing the 64-bit installation features. See the 64-bit Installation Limitations topic in the help file for details. There are plans to address these limitations in the near future, where possible.
  Purchase of the necessary 64-bit development hardware has been made possible by our kind donators, many thanks to them!
- Pascal Scripting: New `Format` support function, which replaces the old `Format1`, `Format2`, `Format3`, and `Format4` functions. Unlike those functions, `Format` accepts a variable number of arguments, and supports argument types other than strings.
- Compiler: A warning is now emitted instead of an error when an unrecognized message name in a [Messages] section is encountered.
- IDE changes: The New Script Wizard now allows you to specify the Setup languages.
- /LOG improvement: The parameters of programs spawned in the [Run] and [UninstallRun] sections are now logged.
- '&' characters in the BeveledLabel message no longer need to be escaped using another '&'.
- Some messages have been added and removed in this version. (View differences in Default.isl)
  - New messages: OnlyOnTheseArchitectures, MissingWOW64APIs, TranslatorNote, UninstallOnlyOnWin64.
  - Removed messages: NoIconsCheck.
- Based on RemObjects Pascal Script SVN code revision 1024.
- The uninstall program's version is now 51.40.0.0.
- Minor tweaks.

5.0.8 (2005-02-17)

- IDE changes:
  - Added support for setting breakpoints (Run | Toggle Breakpoint).
  - The dots in the editor's gutter now shift properly when you insert/remove lines while debugging. (Note, however, that any changes you make while debugging won't take effect until you re-compile.)
- Uninstaller: When a DLL/OCX was installed multiple times by separate installations of the same application, the uninstaller would unregister the DLL/OCX once for each install. As an optimization, it will now unregister the DLL/OCX only once.
- Compiler: Using outdated .isl files that are missing some messages no longer results in a fatal compiler error. Now, warnings will be printed, and the missing messages will be pulled from Default.isl.
- Various improvements/fixes to the parsing of pathnames. For example, `ExtractFilePath('\\server\share')` now returns `\\server\share` rather than `\\server`, and `ExtractFileDir('path\\')` now returns `path` rather than `path\\`.
- When recursively deleting directories (for example, from an [InstallDelete] entry or a call to `DelTree`), it no longer recurses into reparse points.
- The value of the `NoProgramGroupCheck2` message is now always used as the caption of the "no icons" check box on the Select Start Menu Folder page of the wizard. Previously, it used either `NoIconsCheck` or `NoProgramGroupCheck2` depending on whether an installation had [Icons] entries with Tasks parameters.
- `exclusive` [Tasks] items that have no visible siblings are no longer automatically converted into check boxes. (If you really want check boxes, then you shouldn't use the `exclusive` flag.)
- Based on RemObjects Pascal Script SVN code revision 1022.
- Minor tweaks.

5.0.7 (2005-01-19)

- When `AllowNoIcons` and `UsePreviousGroup` are set to `yes`, the Don't create any icons setting is now preserved between installs.
- Both Setup and Uninstall now support a /SUPPRESSMSGBOXES command line parameter to suppress message boxes. This parameter only has an effect when combined with /SILENT or /VERYSILENT. See the help file for more details.
- IDE changes:
  - Various enhancements to the New Script Wizard.
  - Added a new Tools menu with a command that opens the Add/Remove Programs Control Panel applet.
  - When stepping through code, the IDE now uses a different method of bringing Setup to the foreground, and vice versa. Previously, if for some reason Setup hung it was possible for the IDE to hang as well.
- /LOG changes:
  - Now logs the contents of message boxes.
  - On NT platforms, the OS service pack level is now logged, as well as the privilege level of the user (Administrative, Power User, or None).
  - Now doesn't skip the replacement of a protected system file until after the version numbers of the new and existing files are logged.
- Pascal Scripting changes/improvements:
  - Added new `CharLength`, `DLLGetLastError`, `RegWriteExpandStringValue` and `SuppressibleMsgBox` functions.
  - `GetSpaceOnDisk` no longer requires that a root directory be specified, or that a trailing backslash be included.
- Removed the requirement that Windows NT 4.0 users have SP6 installed, which was added in version 5.0.1-beta. Setup should run on previous service pack levels but no guarantees can be made as I generally only test with SP6. Therefore I recommend setting `MinVersion` to at least `4.0,4.0sp6` if possible.
- Removed legacy code that searched for and deleted Uninstall keys with suffixes of _is2 and higher. Only Inno Setup 1.08 (from 1998) created such keys.
- Reverted the change in 5.0.4-beta that made it automatically expand relative paths specified in [Icons] section because it didn't work when the paths contained environment-variable strings (e.g. `%SystemRoot%\...`).
- Fix: In 5.0.6, if you clicked Back on the Select Tasks wizard page and changed component settings causing a different set of tasks to be activated, the new tasks would show up with the wrong item type when you returned to the Select Tasks wizard page. (If you do not have tasks with `Components` parameters, then this bug did not affect you.)
- Fix: In rare cases, component and task items with multi-line captions were painted incorrectly (strictly a cosmetic issue).
- Fix: The `UninstallSilent` support function always returned False.
- Fix: Even though they were not being installed, files with the `dontcopy` flag were being displayed on the installation progress page and included in the required disk space figure(s).
- Tweaked wording of the ExitSetupMessage message. (View differences in Default.isl)
- Based on RemObjects Pascal Script SVN code revision 1017.
- Minor tweaks.

5.0.6 (2004-12-24)

- This version introduces a new Inno Setup logo, new icons for the Inno Setup IDE, and new wizard images for the Inno Setup installer, created by glyFX.
- New [Files] section flag: `createallsubdirs`. By default the compiler skips empty directories when it recurses subdirectories searching for the `Source` filename/wildcard. The `createallsubdirs` flag causes these directories to be created at install time (just like if you created [Dirs] entries for them). Must be combined with `recursesubdirs`.
- New flag supported by the [Components] and [Tasks] sections: `checkablealone`. This flag specifies that the component/task can be checked when none of its children are. By default, if no `Components`/`Tasks` parameter directly references the component/task, unchecking all of the component/task's children will cause the component/task to become unchecked.
- Pascal Scripting changes/improvements:
  - An `AddEx` function has been added to `TInputOptionWizardPage` to allow the addition of subitems.
  - Various properties have been added to the `TInput...WizardPage` classes to allow access to the wizard page controls.
  - Event function `NeedRestart` is now called near the end of the installation process instead of at the beginning.
  - In DLL function imports, new options 'setuponly' and 'uninstallonly' are supported, which cause a DLL to be loaded only when the script is running from Setup or Uninstall, respectively.
  - Added new `UnloadDLL` and `GetShellFolderByCSIDL` functions.
- /LOG changes:
  - No longer (automatically) logs when the event functions `InitializeSetup`, `InitializeWizard`, `GetCustomSetupExitCode`, and `DeinitializeSetup` are called successfully -- only if they raise exceptions, and in the case of `InitializeSetup`, if False is returned.
  - Now logs the function name when the `NeedRestart`, `RegisterPreviousData`, `InitializeUninstall`, `DeinitializeUninstall`, `CurUninstallStepChanged`, and `UninstallNeedRestart` event functions raise exceptions.
- Compiler IDE changes/improvements:
  - New "Debug Output" view that shows log messages from Setup/Uninstall in real time. (These are the same messages seen in the log file produced when Setup/Uninstall is run with the /LOG switch.)
  - New Pause on exceptions option (accessible via View | Options). Unchecking this will prevent the debugger from pausing when an exception is raised from [Code].
  - Now preserves the position of the splitter when you close the IDE.
- Console-mode compiler (ISCC.exe): A new /F switch is supported which can be used to specify a new output filename, overriding any `OutputBaseFilename` setting in the script.
- Improved Setup load time on installations containing hundreds of components at varying levels.
- Updated zlib library to version 1.2.2.
- Fix: When multiple patterns were specified in a [Files] section `Excludes` parameter, patterns that included backslashes were handled incorrectly.
- Fix: [Components]: If you had two child radio buttons and one had children of its own, then unchecking & rechecking the top-level item would cause both radio buttons to be checked.
- Based on RemObjects Pascal Script SVN code revision 1000.
- Minor tweaks.

5.0.5-beta (2004-11-14)

- New [Setup] section directive: `OutputManifestFile`. When set, the compiler will create a text file detailing information about the files compiled into Setup.
- Pascal Scripting changes/improvements:
  - Added new exception-related functions: `GetExceptionMessage`, `RaiseException`, and `ShowExceptionMessage`.
  - The `ExtractTemporaryFile` support function now raises an exception with a descriptive error message when it fails, instead of returning a Boolean indicating success/failure.
  - `GetSpaceOnDisk`: Added new `InMegabytes` parameter. By setting it to False, you can get figures in bytes (capped at 2 GB-1).
  - `RegWriteMultiStringValue`: When writing values, it now appends two null terminators automatically, like [Registry] does when writing `multisz`-type values.
- Console-mode compiler (ISCC.exe) improvements:
  - A new /O switch is supported which can be used to specify a new output path, overriding any `OutputDir` setting in the script.
  - A new /Q switch is supported which causes it to compile quietly, printing only error messages.
  - Error messages are now written to standard error instead of standard output.
    Note: If you were previously redirecting all compiler messages to a file using `>filename` you will now need to use `>filename 2>&1` to capture standard error as well. If you wish to redirect only standard error, use `2>filename`.
- When `ChangesAssociations=yes` and/or `ChangesEnvironment=yes` are used, it now notifies Windows of the changes after any [Run] section entries are processed and the `CurStepChanged(ssPostInstall)` event function is called.
- Reverted one of the small image placement changes in 5.0.4: horizontally centering has been restored.
- Fix: When the `ExpandConstant` support function was called at uninstall time, `{common*}` constants always mapped to their `{user*}` equivalents even if the user had administrative privileges.
- Fix: `ChangesEnvironment=yes` worked on Windows NT 4.0 and 2000 but had no effect on Windows XP.
- Fix: When writing empty REG_MULTI_SZ values, it should only append 1 null terminator, not 2.
- Based on RemObjects Pascal Script SVN code revision 983.
- The uninstall program's version is now 51.34.0.0.
- Minor tweaks.

5.0.4-beta (2004-10-06)

- New [Setup] section directive: `ChangesEnvironment`. When set to `yes`, at the end of the installation Setup will notify other running applications (notably Windows Explorer) that they should reload their environment variables from the registry.
- Pascal Scripting changes/improvements:
  - The support functions `CreateCustomForm`, `ScaleX`, and `ScaleY` may now be called at uninstall time.
  - `TRichEditViewer` support class improvement: The `Color` property is now respected.
- /LOG improvements:
  - It's now possible to specify a fixed path/filename to use for the log file via /LOG="filename".
  - Now logs when various event functions are called, and in the case of `InitializeSetup` it also logs the return value of the function.
  - Now logs when DLL/OCX/type library registration fails, even if the `noregerror` flag is specified.
- Stretching of the small wizard image (specified by `WizardSmallImage`) now only occurs if the image is larger than the default size, or if the user is running larger-than-normal fonts. Previously, it always attempted to stretch the image.
- The `WizardSmallImageBackColor` [Setup] section directive is now deprecated and ignored. Any unused space around the small wizard image is now filled with the standard window color (usually white).
- Relative paths specified in [Icons] section entries are now converted into absolute paths automatically.
- Fix: On Windows XP, folder shortcuts (which were introduced in 5.0.3-beta) showed ".lnk" at the end of them.
- Based on RemObjects Pascal Script SVN code revision 960.
- The uninstall program's version is now 51.33.0.0.
- Minor tweaks.

5.0.3-beta (2004-08-16)

- New supported [Files] section flag `uninsnosharedfileprompt`, which tells the uninstaller to automatically remove the shared file when its reference count reaches zero instead of asking the user. Must be combined with the `sharedfile` flag to have an effect.
- New supported [Icons] section flag `foldershortcut`, which creates a special type of shortcut known as a "Folder Shortcut". Normally, when a shortcut to a folder is present on the Start Menu, clicking the item causes a separate Explorer window to open showing the target folder's contents. In contrast, a "folder shortcut" will show the contents of the target folder as a submenu instead of opening a separate window.
  Folder shortcuts are only supported by Windows 2000, Me, and later. On earlier versions of Windows, Setup will fall back to creating a normal shortcut when this flag is used.
- Pascal Scripting changes/improvements:
  - The return value of the `CreateShellLink` function has changed from a Boolean to a String. Now, any failure results in an exception being raised.
- The uninstaller is now capable of removing directories that have the read-only attribute set. (No special flags are needed; this is the default behavior.)
- Based on RemObjects Pascal Script SVN code revision 948.
- The uninstall program's version is now 51.32.0.0.
- Minor tweaks.

5.0.2-beta (2004-08-05)

- Pascal Scripting changes/improvements:
  - New `GetUILanguage` support function.
- Compiler IDE: When a file has been modified outside the editor, offer to reload it.
- Fix: The per-page event functions introduced in 5.0.1 that returned Boolean values didn't work properly.
- Fix: When the `overwritereadonly` [Files] section flag was used and Setup was unable to remove the read-only attribute from a file (e.g. due to ACL restrictions), it would get stuck in an infinite loop.
- Based on RemObjects Pascal Script SVN code revision 947.

5.0.1-beta (2004-08-02)

- Compiler IDE: the toolbar now uses a modern looking set of images kindly donated by glyFX.
- Setup/Uninstall can now wait on processes spawned using [Run]/[UninstallRun] entries that have the `shellexec` flag. Combine `shellexec` with either the new `waituntilterminated` flag (the default behavior when `shellexec` isn't specified) or the `waituntilidle` flag.
- When Setup is running on Windows NT 4.0, Service Pack 6 is now required. This change shouldn't impact any significant number of users; SP6 was released five years ago, and almost all other programs that still support NT 4.0 nowadays have the same requirement.
- Pascal Scripting changes/improvements:
  - Added new supported event function `CancelButtonClick`, which is called when the user clicks the Cancel button.
  - The prototype of the `CurStepChanged` function has changed, as has the names of the CurStep values passed to it. See the help file for details.
  - The names of the values passed to the `CurUninstallStepChanged` function have changed. See the help file for details.
  - Per-page event functions are now supported. TWizardPage and its descendants now include these properties: `OnActivate`, `OnBackButtonClick`, `OnCancelButtonClick`, `OnNextButtonClick`, `OnShouldSkipPage`. See the Support Classes Reference topic in the help file for the prototypes of these event functions.
  - Replaced the `InstExec` function with a new function named `Exec`. The new function offers the same functionality as the old one, but uses a slightly different prototype. The `WaitUntilTerminated` and `WaitUntilIdle` parameters have been replaced with a single `Wait` parameter.
  - Replaced the `InstShellExec` function with a new function named `ShellExec`. The new function adds `Verb` and `Wait` parameters. To get `ShellExec` to behave the same way as the old function, specify `'open'` in the `Verb` parameter and `ewNoWait` in the `Wait` parameter.
  - Replaced the `FindFirst` and `FindNext` support functions with new versions that return more information about found files and can handle nested searches. Any existing scripts that called these functions will need updating. There is also a new `FindClose` function that you should call at the end of a find sequence.
  - Replaced the confusingly-named `ShouldProcessEntry` support function with new functions named `IsComponentSelected` and `IsTaskSelected`.
  - The `Wizard*` support functions now raise exceptions if you call them before the wizard has been initialized, instead of returning empty strings.
- On a file that has the `uninsrestartdelete` flag the containing directory will now also be removed at uninstall time.
- When extracting files, Setup now sets just the modification times instead of the creation and modification times.
- /LOG improvement: Now logs permission setting on files/directories/registry keys.
- The compiler now flags UXTHEME.DLL as an "unsafe" file.
- Dropped the obsolete WizModernImage2.bmp and WizModernSmallImage2.bmp images.
- Based on RemObjects Pascal Script SVN code revision 945.
- The uninstall program's version is now 51.31.0.0.
- Minor tweaks.

5.0.0-beta (2004-07-14)

- The size of compiled installations has decreased by 22-26 KB from Inno Setup 4.2.7, primarily due to the merging of Setup and Uninstall into a single binary.
- Pascal Scripting can now be used to customize Uninstall:
  - Added Uninstall specific event functions `InitializeUninstall`, `DeinitializeUninstall`, `CurUninstallStepChanged` and `UninstallNeedRestart`.
  - Added support functions `IsUninstaller` and `UninstallSilent`.
  Furthermore, the compiler IDE now supports Uninstall debugging. To debug Uninstall, first run Setup from the IDE, install your application, select Target Uninstall in the Run menu and finally use the debugger functions as normal.
  See the help file and the UninstallCodeExample1.iss example script for more information.
- The custom wizard page support has been completely redesigned from the ground up. The new design uses an event-driven model just like standard wizard pages; no longer do you have to write complicated loops to handle sequences of custom pages.
  Any existing code utilizing custom wizard pages will need updating; all of the old functions have been replaced. Please see the new Using Custom Wizard Pages topic in the help file and the CodeDlg.iss and CodeClasses.iss example scripts for examples of how to use the new custom wizard page model.
- Besides space separated lists, you may now also use boolean expressions as `Components`, `Tasks`, `Languages` and `Check` parameters. Supported operators include `not`, `and`, and `or`. For example:

  > `[Components]
  > Name: a; Description: a
  > Name: b; Description: b
  > [Tasks]
  > Name: p; Description: a or b; Components: a or b
  > Name: q; Description: a and b; Components: a and b
  > Name: r; Description: not a or b; Components: not a or b
  > Name: s; Description: not (a or b); Components: not (a or b)
  > Name: t; Description: a or b - old style; Components: a b`

- This syntax of function parameters in `Check`, `BeforeInstall` and `AfterInstall` parameters has changed to allow a list of multiple, comma separated, parameters and the use of Integer and Boolean parameter types besides String types. For example, you may now use:

  > `[Files]
  > Source: MyProg.exe; DestDir: {app}; Check: MyCheck(1, True, 'Some text')
  > [Code]
  > function MyCheck(I: Integer; B: Boolean; S: String): Boolean;
  > begin
  > Result := (I > 0) and B and (S <> '');
  > end;
  > `

  Also, there's one support function that may be called from within a parameter list: `ExpandConstant`. For example:

  > `[Files]
  > Source: MyProg.exe; DestDir: {app}; Check: MyCheck(1, True, ExpandConstant('{app}'))
  > `

  Existing scripts using function parameters will need to be updated.
- The functions specified by `{code:...}` constants and by `Check`, `BeforeInstall` and `AfterInstall` parameters may now refer to support functions too, for example:

  > `[Components]
  > Name: adminonly; Description: My Admin Only Component; Check: IsAdminLoggedOn
  > [Files]
  > Source: MyProg.exe; DestDir: {app}; BeforeInstall: Log('About to install MyProg.exe')
  > Source: MyProg.hlp; DestDir: {app}\Help; Check: DirExists(ExpandConstant('{app}\Help'))
  > [INI]
  > FileName: {app}\MyIni.ini; Section: MySettings; Key: ShortApp; String: {code:GetShortName|{app}}
  > FileName: {app}\MyIni.ini; Section: MySettings; Key: AppDrive; String: {code:ExtractFileDrive|{app}}`

- Wizard-related event functions such as `NextButtonClick` are now called on silent installs as well. In fact, silent installs now function almost identically to non-silent ones with the exception that the Next button is automatically "clicked".
- Logging improvements:
  - The filenames of programs spawned in the [Run] section are now logged.
  - The /LOG parameter is now also supported by Uninstall, which causes Uninstall to create a log file in the user's TEMP directory detailing file uninstallation and [UninstallRun] actions taken during the uninstallation process. This can be a helpful debugging aid. See the Uninstall Command Line Parameters topic in the help file for further details.
- A new `ShouldSkipPage` event function has been added, which replaces `SkipCurPage`. Existing scripts that contain a `SkipCurPage` function will need to be updated. Note that unlike the old `SkipCurPage` event function, the page passed to the `ShouldSkipPage` function is not the current page.
- Added support function `Abort`. Calling `Abort` throws an exception to abort the current operation. It does not terminate Setup or Uninstall unless it's still starting up.
- When extracting a file, Setup now pre-allocates all of the bytes in the destination file on disk. This allows the system to know what the final size of the file will be before extraction begins, and avoid fragmenting it.
- The compiler now fully supports script files that use Unix-style line breaks (LF only).
- The Setup section directive `UninstallIconFile` is now deprecated and ignored. As Setup and Uninstall have been merged into a single executable, setting a custom icon for Uninstall is no longer possible.
- The Setup section directive `UninstallStyle` is now deprecated and ignored. Only the "modern" uninstaller style is supported now.
- Based on RemObjects Pascal Script SVN code revision 933.
- The uninstall program's version is now 51.30.0.0.
- A very large number of minor tweaks.
- This version is derived from Inno Setup 4.2.7, and therefore includes all of the features and fixes from that version.

Inno Setup 4.2 & 4.1 Revision History