MAKEMSI quickly and reliably creates MSI files in a non-programmatic way
Have your say! Join the MAKEMSI discussion list or view archive! Suggest improvements. No question too simple or too complex.
[Bottom][Contents][Prev]: Create New MSI Installers[Next]: Preferred MSI Interface for Building a Complete MSI
Have your say! Join the MAKEMSI discussion list or view archive! Suggest improvements. No question too simple or too complex.
\->MAKEMSI Installs...->Available Frameworks->Create New MSI Installers->Create an MSI from Scratch

Create an MSI from Scratch

You could use (include) "MAKEMSI.MMH" ("OpenMSI.MMH" is probably easier) to create a new MSI starting from nothing or using a basic template. The installed sample file "TryMeCreate[START]OfMsiFromScratch.MM" demonstrates this.

It is likely that you will wish to perform some common things for all MSIs so that you will probably want to create your own header file (perhaps called "CreateMsi.MMH" which does the basic setup (as well as including "MAKEMSI.MMH").

This will require good knowledge of Windows Installer but you could use the "DEPT.MMH" and "COMPANY.MMH" headers as examples. The "Preferred MSI Interface for Building a Complete MSI" is basically a set of header files I have created for you with the aim of making it very easy with minimal (or in some cases no) Windows Installer skills required.

Most people will not use this approach. Almost all will go straight to the "Preferred MSI Interface for Building a Complete MSI".

The Initial Template

Your starting point ("an empty database") is a decision you might wish to think a bit about. The "template" is generally at such a level that it is never modified to create your finished product.

The main options are (all sorts of variations are possible):

  1. In Script
    With this option you start from a completely empty database and build all tables. I think this is the best option except that it has one major downside, it makes the build process a lot slower. The complete MSI is visible in easily human readable text form and so any changes can easily be tracked if you use source management tools.

  2. Import tables
    You start with a clean database and use "TableImportFromIdt" to populate the "template". If you used IDT files directly this process is quite fast and still in a text form (just less readable).

  3. Use Existing "Template" (Windows Installer DB)
    This is what I have done for my "COMPANY.MMH" header (by default). It has the disadvantage that the template is in binary format but is very fast and is the simplest for me to distribute. The template should seldom if ever change.

    The "COMPANY.MMH" header affectively changes the template as it does some row manipulation to modify its normally behaviour (see "logo on dialogs" tip for an example) and in fact the header is one big "template" in its own right.


Microsoft awarded me an MVP (Most Valuable Professional award) in 2004, 2005, 2006, 2007, 2008 & 2009 for the Windows SDK (Windows Installer) area.Please email me any feedback, additional information or corrections.
See this page online (look for updates)

[Top][Contents][Prev]: Create New MSI Installers[Next]: Preferred MSI Interface for Building a Complete MSI


MAKEMSI© is (C)opyright Dennis Bareis 2003-2008 (All rights reserved).
Saturday May 28 2022 at 3:11pm
Visit MAKEMSI's Home Page
Microsoft awarded me an MVP (Most Valuable Professional award) in 2004, 2005, 2006, 2007, 2008 & 2009 for the Windows SDK (Windows Installer) area.