News Archive

Inno Setup Review

Forums / Groups

Mozilla-Delphi Project

Pascal Newsletter




Vote For Us:
Irongut's Delphi Pages
Pascal Newsletter

Contact Details

Legal Stuff

eBook Inno Setup
Inno Setup Review
By Dave Murray <irongut at vodafone dot net>

Inno Setup by Jordan Russell is a free installer for Windows programs. First introduced in 1997, Inno Setup rivals and even surpasses many commercial installers in feature set and stability. I've been using it for a couple of years so I was keen to see what new features are in the latest version. (4.0.10 2003-11-28) (4.1.3 2004-01-28) (4.1.6 2004-02-19) (4.2.7 2004-06-27)

Inno Setup is a script based installer for all 32-bit Windows versions. It is very flexible and customisable and produces small, single EXE installers. There are third-party extensions available and it supports Pascal scripting for further customisation. Its key features include:

Welcome Dialog
Figure 1 - Welcome Dialog

Working with Inno Setup

When you run Inno Setup you get a dialog offering to create a blank script, create a new script using a wizard or open an existing script; see Figure 1. There are several examples that help explain how to create scripts or perform certain tasks during installation. I recommend you use the wizard to setup the initial outline of your script.

The wizard asks for all the usual information like application name and version, company name and website, install directory, filenames and shortcuts. It also has some more advanced options like creating an Internet shortcut to your website and showing files before and/or after installation. You can see a script created with the wizard in Figure 2.

Typical Script
Figure 2 - Typical Wizard Created Script

As you can see from Figure 2, Inno Setup scripts look very similar to inifiles. Script files are usually edited from the Setup Compiler but you can edit them with any text editor and some of the third-party extensions take advantage of this. Each section of a script controls a different aspect of the installation, for instance the [Setup] section contains global settings used by the installer and uninstaller and the [Tasks] section defines user-customisable tasks performed during installation. Items within the sections can take one or more parameters. For instance, the AppPublisherURL item in the [Setup] section takes your website address. The majority of items can have constants embedded in them. These predefined strings are translated to their literal values depending on the user's choices and system configuration; e.g. {sys} refers to the Windows System directory. There are a lot of sections and items that a script can contain but don't worry, the documentation is excellent.

After you have finishing writing your script, the next step is to compile it. The compiler creates a complete, ready-to-run installer based on your script. By default, this is created in a subdirectory named Output under the directory containing the script. Figure 3 shows the results of compiling my simple script. There is also a command line compiler that can be used as part of an automated build process.

Compile Results
Figure 3 - Compile Results

The final step is to test your installer. The installer and uninstaller programs accept optional command line parameters that can be useful to system administrators and to other programs calling them. Parameters include /SILENT, /LANG and /DIR. Both programs also return an exit code which can be used to tell if and why an install or uninstall failed.

Figure 4 - Installer in Action

New in Version 4.0

Version 4 added run-time scripting support to Inno Setup. The scripting engine is Innerfuse RemObjects Pascal Script by Carlo Kok. This modern Delphi-like scripting language allows sophisticated customisation of your installer. Possibilities include: adding custom wizard pages at run-time; removal of types, components and / or tasks under custom conditions; installation of items based on custom conditions. An integrated run-time debugger for Pascal scripts is included.

Multilingual support has also been added and localised versions of all the various information files can be specified. The [Languages] section defines the languages available to the installer, which searches for a LanguageID that matches both the primary language and sub-language identifiers of Windows' language or locale. If it can't match both, it makes do with just a primary language identifier match. If all else fails, it defaults to the first language specified in the [Languages] section. A Select Language dialog can be displayed which gives the user an opportunity to override the language chosen. And the optional [LangOptions] section can be used to define language-specific settings, such as fonts, used by the installer and uninstaller.

Many other new features and improvements were added in version 4. Some of the more useful include unsafe files (DLLs), silent install / uninstall, IDE improvements and disk spanning now supports CDs and DVDs.

Latest Features

(v4.1.3 2004-01-28)

Since I originally wrote this review several minor versions of Inno Setup have appeared with lots of improvements. The installer produced has undergone a facelift with simplified wording, improved scaling of non-standard fonts and images and improved multi-monitor support. It now contains customisable version information and you can specify its icon.

COM Automation support provides the ability to control other applications and call ActiveX DLLs during setup. This enables you to configure IIS or SQL Server, read and write XML, read and write MS Office documents and a whole lot more.

A new Permissions parameter allows you to grant modify permission on files, directories and registry keys to users, groups and / or everyone. The script engine has been updated and new support classes, objects, etc have been added, including: TBitmap, TFolderTreeView, TStrings.LoadFromFile, TStrings.SaveToFile, TStream, THandleStream, TFileStream and TPasswordEdit.

(v4.1.6 2004-02-19)

The guys behind Inno Setup must be working day and night because in the last few weeks they've released three updates! The most significant change is the addition of LZMA compression. LZMA is the algorithm used by Igor Pavlov's 7-Zip archiver. Typically it compresses at least 20% better than the existing bzip method. LZMA compression is activated using the Compression directive in the [Setup] section; with SolidCompression=yes for maximum compression.

The compiler IDE has been improved with a new Run | Terminate command and a new Build | Low Priority During Compile option. The IDE also shows an animated icon and progress bar during compilation and the exit code returned after a test run.

The [Files] section has gained an Excludes parameter that specifies a list of filename wildcards to exclude and a sortfilesbyextension flag that instructs the compiler to compress the files sorted by extension (which can decrease the size of the installer). The Pascal script engine has been updated to the latest CVS version and now supports delay loaded DLLs. And, the help files and examples have been updated to include the latest features.

(v4.2.7 2004-06-27)

The four months since I last updated this article have seen a lot of improvements to Inno Setup. Multilingual support has been greatly improved. The script wizard now uses custom message constants so you don't have to translate any English phrases in generated scripts. A new [CustomMessages] section allows you to easily localise your own entry descriptions and messages. The [LangOptions] section now supports a new directive, LanguageCodePage. By default, languages whose code page does not match the active code page of the user's system will not appear in the Select Language dialog's combo box. And, official translations have been added in Catalan, Czech, Dutch, French, German, Norwegian, Polish, Portuguese, Russian, and Slovenian.

Inno Setup now includes optional 128-bit ARCFOUR encryption. The decryption password can be provided on the command line for silent installs. And, individual files can have encryption turned off with the noencryption flag if necessary.

Enhancements introduced to the Add/Remove Programs Control Panel applet in Windows 2000 are now supported. You can display a "Modify" button and a "Support" dialog with comments, contact info and a link to your readme file.

Compression now defaults to LZMA instead of Zip and a new optimisation pass compresses executable files even further. A new /LOG command line parameter creates a log file in the user's TEMP directory detailing the installation process for debugging. The run-time scripting engine is now based on RemObjects Pascal Script SVN code revision 916. There have been a lot of other changes including improvements to the wizard pages and dialogs and bug fixes.

Third-Party Extensions

One of Inno Setup's strengths is the healthy community of third-party extensions. These include tools like iwz2iss that converts InstallShield projects into Inno Setup scripts and InnoScript that does the same for Visual Basic projects. Translator is a tool that simplifies the process of creating localised installers. There is also a script pre-processor.

The most useful extension is probably ISTool by Bjørnar Henden, a GUI front-end for creating and editing Inno Setup scripts. It gives easy access to all the sections of a script with custom dialogs for editing the items. These dialogs contain fields for all the possible parameters with check boxes for any possible flags. ISTool has full drag and drop support; you can drag files from Explorer and drop them on a directory in the [Files] section. It can also import Visual Basic and InstallShield projects and simplifies the process of creating localised versions.

Figure 5 - ISTool in Action

Several third-party extensions, including ISTool, have recently been repackaged as the Inno Setup QuickStart Pack. They are not official or required but make Inno Setup easier to use, especially for new users. Future releases of the standard version may incorporate these extensions.


Support is provided primarily through newsgroups on news.jrsoftware.org. There are three newsgroups available, one for general Inno Setup issues, one for run-time Pascal scripts and one for third-party extensions. These newsgroups are available only through their news server or experimental web-based interface.

A mailing list is also available to notify you of major new releases. Announcements of small patches are generally not sent to the mailing list but they are always announced in the general newsgroup.


Inno Setup is a great tool for packaging your applications. The scripts are easy to write and the documentation is well written and exhaustive. The initial wizard is actually very helpful and I use it to begin all my scripts. Inno Setup is customisable and extensible and can be used as part of an automated build process. When combined with some of the third-party extensions, it is a product that's hard to beat and the price is nice too!


Inno Setup
jrsoftware.innosetup - Inno Setup
via news server
via web-based interface
jrsoftware.innosetup.code - run-time Pascal scripting
via news server
via web-based interface
jrsoftware.innosetup.thirdparty - third-party extensions
via news server
via web-based interface
Inno Setup Mailing List
Inno Setup Pre-processor
RemObjects Pascal Script
7-Zip Archiver

eBook Download this article in eBook format.
You can download a free eBook reader for Android, Blackberry, iPhone, Palm OS, Windows Mobile and more.

Refer this page to a friend!

Copyright © 2003 - 2010 Conspiracy Software. All Rights Reserved.