MAKEMSI is a freeware tool which enables you to easily and reliably create low overhead "MSI" or "Windows Installer" based installers (some user feedback). Windows Installer is a Microsoft developed and backed installer format or technology for building reliable installation packages.
Help and support is available from the extensive manual and from Microsoft's own forums or from the dedicated MAKEMSI user group with 500+ members.
Some advantages of an MSI include (also see this lockergnome video):
MAKEMSI utilizes simple XML like text files for the reliable creation (or updating) of MSI based installers. Once set up subsequent rebuilds are automated, reliable, quick and in general require no MSI skills. Not only does MAKEMSI build the MSI but it creates HTML documentation for it as well! As an MSI creator MAKEMSI generates small files, unlike those built by other tools which can be huge!
MAKEMSI is aimed at both beginners as well as advanced users. If required you have full control over every Windows Installer table and row (you can even create your own). You can also just point MAKEMSI at a complete directory tree or a registry file and it will create the appropriate Windows Installer entries (components, GUIDs, cab files) and doing this doesn't prevent the use of the more advanced capabilities. MAKEMSI can actually build or update any Windows Installer database types, for example ICE validation suites or merge modules. It is the simplest tool available for MSI automation.
This is probably about the shortest useful example of a complete
MSI:
#include "ME.MMH" ;;Load and configure MAKEMSI, apply my branding to MSI
<$DirectoryTree Key="INSTALLDIR" Dir="c:\program files\SomeDir" CHANGE="\" PrimaryFolder="Y">
<$Files "WhatIWant\*.*" SubDir="TREE" DestDir="INSTALLDIR">
The above example also generated a HTML based report which describes the MSI
in a non technical way (contents can be configured).
It also validated the created MSI against a quite comprehensive suit
of tests (both during the build and looking at the MSI as a whole).
The folder "c:\program files" was automatically translated to the special folder
"ProgramFilesFolder" as that is the default MAKEMSI behaviour.
My MSIDIFF tool (an "MSI to TEXT" utility) can be used to compare two MSIs or decompile a complete one into a very human readable format (which is better than those of any "visual" or "GUI" programs I have seen). As the output can also be processed by MAKEMSI, this capability is frequently used by people who wish to automate changes which they may currently be making with table editors such as "orca.exe".
In case you need help there is a MAKEMSI user group (500+ members) and MAKEMSI installs a searchable windows compiled help file with index. This extensive documentation includes a huge "tips and tricks" section and is also available online (if Java disabled). As MAKEMSI just creates stock standard MSI installers you can also visit any standard Windows Installer groups such as "microsoft.public.platformsdk.msi".
As text files are used these are easy to compare or store in source revision control systems (PVCS etc). Note that basic version and product information is held in separate files (by default) as in general the build script need not be updated from release to release, just the version information.
You can create an MSI (or other windows installer databases) via Windows Explorer shell extensions or the command line and not only is the process both fast and "hands off" but it can be built into automated build procedures (perhaps using NMAKE, ANT, NANT or even just batch files etc).
The tool encourages reuse of common MSI "logic", I have actually created many sets of 2 line scripts where the complex logic was centralised thereby allowed people without MSI skills to create these MSIs. Some two lines script examples are for Workstation RIS images, deployment of J2EE ear/war files and Jetform form packages.
MAKEMSI can gather required information from virtually anywhere (such as SQL databases or text files).
You can perform low level table and row manipulation, use MAKEMSI's higher level macros or both (that is you have as much or as little control over how the MSI is created as you want or need).
The HTML report that MAKEMSI generates shows most of the major details such as files and their attributes (datestamp, size MD5 checksum etc). Have a look at a sample generated report (this includes the source code used at the end). The report can be highly customised both for what is displayed and how it looks. By default this report is installed along with the product and is available via the "support information" in the add-remove applet.
The file "verify" button on the generated HTML report can be used to can see how any installed files differ from those in the MSI (or to see which components containing files are installed).
For situations where there are no relevant high level MAKEMSI commands
you can use MAKEMSI's table and row manipulations to create, update or
delete tables or rows (you can also create your own custom tables).
You can use "where" clauses and validate success.
The following demonstrates some low level table/row manipulation:
;--- Move to Between "InstallValidate" and "InstallInitialize" actions ---
<$Table "InstallExecuteSequence">
<$Row Action="RemoveExistingProducts" Sequence="1451"> ;;Move action
<$/Table>
;--- Delete property ---
<$Table "Property">
<$RowsDelete where=^`Property` = 'ComponentDownload'^>
<$/Table>
;--- Fix control which is too short (optionally) ---
#define? UISAMPLE_LENGTHEN_TITLE_TEXT_CONTROL Y ;;Default is Y" = we will increase length
#if ['<$UISAMPLE_LENGTHEN_TITLE_TEXT_CONTROL>' = 'Y']
<$Table "Control">
#(
<$Row
@Where="Dialog_ = 'ProgressDlg' AND Control = 'Title'"
@OK='=1'
Width="300" ;;Previous value = 200
Height="30" ;;Previous value = 15
>
#)
<$/Table>
#endif
As the whole of MAKEMSI is simply PPWIZARD programming, you can also create your own commands (and all of the existing MAKEMSI source is available as example code)!
Note that there are some other products appearing that will do similar things however some are only designed to tweek EXISTING MSI files and they don't have the inbuilt power of a programmable preprocessor. Everything MAKEMSI does is done via PPWIZARD programming. MAKEMSI is designed to allow you to build an MSI (or merge modules etc) from scratch (starting without any tables) or from an "empty" template.
All MSI steps are validated and as much as possible any input by you will be checked. The final MSI is passed though ORCA style validation (although you can filter out messages you don't wish to see). The MSIs will be built consistently, its just up to you to test what you do.
The intention is to make is so simple that just about anyone with minimal MSI knowledge can create MSI packages (and no MSI knowledge should be required to build future releases of the same product - unless largish MSI modifications required - rare). File changes, even directory changes need not require any changes to be build script.
Note that all of the above is without writing code although you can imbed VBSCRIPT (but you normally shouldn't need to). Basically you define how your MSI should be created, all error handling is generally handled by MAKEMSI. The script is in some ways XML like and as far as possible simply lists resources ("I have some files, registry and shortcuts to install").
The "Table" and "Row" commands allow you to modify any table (just like table editing in "ORCA" - but automated).
Known to work (tested in) in Windows 98SE, NT4, 2000, 2003 and XP. It is expected to work in Windows 95 and ME.
MAKEMSI can build from the command line, make files or as the following flash animation shows, explorer:
Download links:
Note that my MSIDIFF tool (to compare/disassemble databases) is now a separate installer.
If you have any problems installing or creating MSIs please tell me so I can save others suffering the same issue (please indicate the operating system being used). Some things to try (in order, based on previous solutions):
msiexec.exe /i "C:\TMP\makemsi.msi" /l*v "c:\TMP\makemsi.txt"
I would very much appreciate feedback on this download. It can be extended to cover anything not currently supported or of course you can simply use the low level table and row commands. MAKEMSI is not perfect (just more perfect than other tools)! I expect to be enhancing it for quite a while to come... If you don't like something MAKEMSI does or you believe it has limitations it shouldn't then tell me (remove spam protection from email address)! The feedback and queries I get will help direct my efforts to where the "real need" is. The frequency, location and amount of future enhancements will depend of the interest shown.
There are many ways it can be used and there are many options, if it doesn't work the way you think it should it can probably be configured to do so, if I need to make changes I will do so.
While the tool is not "open source" all source code is provided, this can be used as sample code for you to create new commands. If so I would appreciate it if you would send code for inclusion into future releases or make it available from your web site (in which case I will link to it).
Some other tools similar to MAKEMSI are "MSI2XML" and "WIX", all three attempt to use text files to automate MSI creation however MAKEMSI creates better MSI installers with less effort and requiring less Windows Installer knowledge (and therefore in general more reliably). The other tools don't do much for you, they mainly help with the task of automating the building (which of course MAKEMSI also does). MAKEMSI also builds quite good HTML documentation (see example) which also includes a file or product verification ability (do all installed files match what we'd expect).
I used to have a product called WISEINST, this no longer exists and has been replaced with the much better "MAKEMSI", it is much more advanced and does not require any commercial 3rd party tools.
MAKEMSI uses base Windows Installer functionality and so does not requires Wise Installer Pro to function. MAKEMSI will also be a lot easier to use and the steps involved are integrated more. MAKEMSI can even create merge modules and Windows Installer tables this is something not possible with "WISEINST". Even commands like "Row" which might appear similar between the 2 products have major differences with the MAKEMSI version being much more powerful (for example it accepts literals as well as expressions - WISEINST required a fair bit of stuffing around to do similar).
MAKEMSI is quite different and only rarely did I try too hard about
keeping them similar (I had to do a fair bit of conversion myself).
If you have used "WISEINST" before take my word for it, the conversion will
be worth it.
Unframe "makemsi.htm"
Sunday July 16 2023 at 1:46pm