I recently finished reading The Definitive Guide to the Windows Installer and, quite frankly, I’m amazed I’ve been in the industry this long without knowing much about installation technology. In the old days the installer was something that got written in the last few weeks of the project by some poor soul who got handed a set of artefacts and was told to get on with it. The modern trend seems to be for producing an installer as part of the build process. At my previous company I set up a large number of Cruisecontrol builds. The last step of some of these was to generate an installer for the desktop application. The natural choice for this was to use Wix which uses an XML syntax for declaring what actions an installer should take.
Wix itself is great and makes it very easy to do simple installations. The trouble comes when you want to do something more complicated. Wix is both a processor for generating windows installer tables and a set of custom actions for doing standard things (like installing web sites), and sometimes it is hard to see how these things interact. Hence the book mentioned above. It is fantastic. The author takes a number of scenarios and gets you to use the ORCA tool (parts of the windows installer SDK) to look at the installer tables within the msi to see how the installer puts things together to get the product installed. He takes you through defining custom actions which you need to make transactional so that their effects are undone if the installer rolls back the installation at any point, and various other scenarios. Reading the book made it clear why Wix only allows you to do certain things.