Installation / MSI Development

What is MSI?

MSI (Windows Installer) is the installation technology used by Microsoft Windows for the correct installation of software. Its primary function is the proper tracking of software installations to allow both the software to install correctly and for the machine it is installed on to continue in a perfectly functional state regardless of the outcome of the install. This means that both during a successful installation and a failed/cancelled installation the targeted machine experiences no adverse effects.

From a client/developer perspective, a MSI file is a loosely relative database containing all of the information required to get a product to install on a Windows machine and to function correctly. The base of this database is a Function, as seen in many installations, where different functions of the application are stored and the end-user is able to select their desired functions during install time. Functions can include a dictionary, a set of tools, or a language pack for example.

Within Functions there are Components and these make up the bulk of a MSI installation. Components contain the files that make up an application and dictate where in the file structure of the operating system these files will reside once the installation has completed. Components contain only one executable file, so in the dictionary example from above, dictionary.exe would reside in one component. With this said, dictionary.exe can also reside in a component with all of the .html files required to make the dictionary work, thus we can have a dictionary component as long as there is only one executable.

One of the great things about MSI installations is the auto-repair function. Sticking with the dictionary theme, say for example the user has accidently deleted the P-Q section of the dictionary, a well written MSI will detect that those particualr files are missing from the dictionary component and do an auto-repair to restore them to the machine when the user clicks on dictionary.exe, so the application will continue to function as normal.

MSI is also designed for the sharing of files and functions of applications. So if you have a suite of applications and they share common files but a user may install these applications at a different time, then the MSI can monitor the installation count of these files. So, once again with the dictionary theme, if a user installs one of your products and it comes bundled with a dictionary and they then install another product that also has a dictionary the MSI will record the fact that these files have been installed twice. This has two main effects; if the user decides to uninstall one of these products the shared dictionary component will not be uninstalled, preserving its function in the remaining product; if some of the files are deleted by accident launching the dictionary from either product will restore the component for both.

MSI also deals with shortcuts, browser add-ons, IIS website setup, ODBC database connections, pre-requsite installations such as Java, .NET, Acrobat Reader or any 3rd party product your application requires.

Wrapping all of this up is the extremely powerful MSI user interface (UI) that allows you to present your product to your users in a both unique and intuitive way. From branding to very complicated setup routines the MSI UI tool gives you the opportunity to give your users the first impression your software fully deserves.

Finally in this very brief discription, MSI allows for the coding of custom code to specifically suit your installation needs. The code can be native .NET code, C++, JavaScript or a scripting language of your installation tool of choice. This opens up a world of possibilities from mapping network drives during installation to editing installed files to suit an individual machines needs. With this very powerful extension you can simplify your users installation experience and also ensure that your product is setup exactly how it should be.

Please read our document MSI Packaging in the real world to better grasp MSI technology and how it is utilized in the world today. The document is a collection of information from many sources and compiled into a single, very handy PDF.