Inno Setup and MSI

  • Supports Installation
  • Supports Uninstallation
  • Supports Upgrades

I have been a big fan of the Inno Setup installer for a long time. I still use it in many of my other software projects and it performs very well. However, an increasing number of users are requesting MSI packages instead the executable installer that the Inno Setup compiler produces.

Create MSI with Inno Setup

The MSI Wrapper was produced to create MSI packages from executable files built with Inno Setup. It puts the setup.exe inside an MSI file and runs it with the specified command line switches when the MSI package is installed.

There are many tools out on the Internet that claims that they will wrap your setup.exe in an MSI package. However, the ones that I have found fails when it comes to uninstallation and software upgrades.

Silent Installation

Normally, you would want the MSI file to install silently. I will recommend that you specify the /VERYSILENT and /SUPPRESSMSGBOXES parameters for the wrapped setup. This recommendation also applies to the uninstall operation. That way you will have a wrapped Inno Setup installer in an MSI package that installs silently.

Inno Setup and GPO

Using the approach described above you will have an MSI package that will deploy silently using a Group Policy Object under Microsoft Active Directory.

Package Versions

One of the big advantages of this tool over other tools that embed Inno Setup executables is that it supports upgrade operations. You need to keep the upgrade code the same between MSI packages that upgrade each other. Another thing that you should remember is that MSI installations only look at the three most significant parts of a version number. Therefore, you must upgrade at least the third part of the version number between MSI packages that upgrade each other.

Example: Version 1.2.3.4 is seen as the same version as 1.2.3.5. You should upgrade to 1.2.4 for the following build.

Restart

You can read more about signaling a pending reboot from the installer in the article about Exit Codes.