Nov 5, 2010

Make MSI from InnoSetup installer

Last time my company customers ask for installer in Windows Installer MSI format. Company product is complex system, containing thousands of files and plenty of tasks. It cannot be quickly ported to other installer system. But result need to be ASAP.

Windows installer is complex product too, and even Microsoft itself make open source XML based project Wix to simplify tasks. Other good project is MakeMsi, used simply text files to describe tasks.


I found MakeMsi reach featured and easy to use. First what you will need is to download and install MakeMsi. Second thing is to look samples. Copying TryMe sample is good point to start. Files TryMe.mm and Try.ver is enough for beginning. Right click on TryME.mm in explorer and choose Build MSI. It will generate sample MSI installer file.

What we need next is to change some properties in source files to change labels on result installer. If you see something not in your source files, you can search MakeMsi folder and copy any files to your source directory and change them. When anything is looks great, we can go to run your old InnoSetup installer.

First, what I try to use Binary Table to store old installer, it works well for generic executable, but seems have issues with InnoSetup. I have to choose copying old installer to temporary folder and execute from msi installer.

<$DirectoryTree Key="INSTALLDIR" Dir="c:\program files\YourProduct" CHANGE="\" PrimaryFolder="Y">
<$Directory Key="TMP" PARENT="TempFolder" Dir="inst" >
<$Files "YourProduct.exe" DestDir="TMP">
#(
   <$ExeCa
;;      Binary="YourProduct.exe"
  EXE="[TMP]YourProduct.exe"
  Args=^/SP- /SILENT /SUPPRESSMSGBOXES /LANG=English /NOCANCEL /DIR="[INSTALLDIR]"^
  Description="Performing installation"
   CONDITION=^<$VBSCA_CONDITION_INSTALL_ONLY>^
  Type="Deferred System Sync"
  Rc0="N"
  Seq="InstallODBC-"
   >
#)

No comments:

Post a Comment