The Traditional Software Installer

Software is generally provided in the form of an installer. The installation is primarily a combination of writing files and entries into the Windows file system, often utilizing system utilities to perform registration activities.

Most of the software you work with comes in the form of an EXE or MSI based installer. The MSI installer is usually preferred for packaging as it uses a set of tables that can be easily examined and manipulated, while the EXE-based installer tends to be less transparent. Sometimes the EXE-based installer embeds an MSI that is used as part of the process. But ultimately, the EXE-based installers and any custom actions included in an MSI are binary “black boxes” that we can only understand by watching what they do.

The purpose of the vendor installer is not only to place the appropriate components in place on the system but also to configure the application for the user. Often, this involves some decision-making from the installer's side based on the environment it is being installed on.

This adaptation to the environment could potentially include examining the machine, the OS, the end-user, as well as other software on the machine, and even the surrounding network including other servers or services.

The role of the packager and packaging software is to end up with a generic package that may then be deployed to any system with organization-wide customized defaults. Special care is required when the techniques used include a repackaging process. Issues can arise in repackaging due to the unintentional capture of unwanted components or configurations by the installer that are specific to the capture machine.

The goal of any repackaging process that you are involved with should be to produce a clean and customized package that will work on any intended system, along with appropriate documentation that would allow that same package to be reproduced in the future.