Inno Setup 5
Revision History

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

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.
- 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