Lately I've been creating an installer for our Geocortex Optimizer product. I've created simple installers before using InstallShield, but I thought that this time I'd give WIX a try. After all, WIX seems to be the installer technology of choice at Microsoft these days and therefore, it seemed reasonable that WIX should suffice for Optimizer's minimal installation needs. I estimated creating an installer for Optimizer should take 5-7 days. Our installation consists of 10-15 files, installing SQL Server Express and has a few Optimizer specific custom dialogs. 3 weeks later, the Optimizer project has an installer that works pretty well. Creating it only took 3 times longer than I anticipated but no problem. It's the journey is what matters right? Here is what I learned.
- There is no definitive reference for WIX. Only an MSI reference on MSDN and a number of WIX tutorials scattered about the Web. If anyone wants to write "WIX For Dummies" or "WIX unleashed", I'm pretty sure they would make a killing. Without the book, allow a few days to read all you can about WIX and MSI.
- Doing simple things can take an extraordinary amount of time to figure out how to do. Simple tasks such as manipulating combo boxes or enumerating SQL Servers are much more involved than you would imagine. I found that it helps if you forget everything you know about writing WinForms or Web applications and put your WIX thinking cap on from the beginning.
- WIX has native support for editing settings files, installing Windows services and creating databases. If you find yourself writing code to perform these tasks, your approach is likely wrong.
- Using the right tools can help you out tremendously. Editing dialog boxes using Notepad2 is not a lot of fun and very unproductive. I refused to go down that path and used the WixAware from the beginning. This was the right thing to do. InstallAware is currently in Beta and has a number of issues to work out but, it also has enough useful functionality in it to save a lot of time. I'm looking forward to their final release.