David Thielen  
Home On Programming Articles, Etc. Blogs Resume

What is needed in an Install Program

I recently spent close to a week trying to use InstallShield, WISE, and InstallAnywhere to create some very simple .msi install packages. For anyone who has used these packages, this will probably come as no surprise to you – these packages are awful. At the end of the week I stuck with the Visual Studio installer because it was as useful as any of the others, and a lot simpler to use.

I Found It!

Subsequent to writing this article I discovered WIX. WIX is everything you need in an installer, and it's open source.

Missing Features

  1. Don’t put your name in the installer. When I create a chm file with RoboHelp, it doesn’t put “RoboHelp”Help in the file. When I create a program with VisualStudio, it doesn’t pop-up a message box saying “Created by Visual Studio” when it starts.
  2. Have better art for the install dialogs (Wise has very nice 8-bit art) – and in 32-bit color.
  3. Make it easy to show the readme file (Wise and ZeroG have this).
  4. Allow an install folder at “Program Files/Company/Product” (InstallShield and ZeroG have this).
  5. Have install typical, custom, and all (Wise and ZeroG have this).
  6. Allow copying a file to GAC as a feature (InstallShield can do this – but considers it an error).
  7. VJSRedist – can either include or have as a prerequisite (each of you support just one of these options). For a prerequisite, have the url at Microsoft to get the installer for it (Visual Studio does this).
  8. Can require any office component as a prerequisite (ZeroG has this) – and can set a minimum version number of that component.
  9. Can set a condition based on if a named process is running.
  10. Can set to force reboot if a named process is running. (A lot of install programs could use this.)
  11. A method to return if a process is running would be a good general addition to the API too.
  12. Can install HxS files.
  13. Make it easy to edit dialogs (Wise is very easy).
  14. Intelligently add to classpath – at beginning or end. This means do not add duplicates to it.
  15. Explain how to write a script (this is central to an installer yet none of you show someone how to do this).
  16. Explain how to write a dll called by the installer (as scripts are not allowed by many anti-virus programs).
  17. Explain how to write conditions (again there are some samples but no comprehensive help for this).
  18. Support if a value matches a regular expression. This would make it easy to parse a registry value in a condition.
  19. Support calling a program during uninstall (InstallShield and Wise support this).
  20. Another interesting requirement that just came down the pike for people writing Office add-ins. Microsoft is now recomending that add-ins be linked to specific libraries for each version of Office. What this means for you is that most people writing an add-in will have a different list of files to install for each version of Office. So it’s not just that you need a way to say Word 2000 is a pre-requisite but then to have one list of files for Word 2000, another for Word XP (2002), and a third for Word 2003 or later.

I think most of the above capabilities are basic to a .NET installer. I was very surprised at how basic needs for pretty standard installs are not supported. I also think all three programs have a long way to go to be considered easy to use. For example, to learn the basics of RoboHelp was about 2 hours. To learn the basics of JPobe was less than an hour. To learn IntelliJ very very well was under 4 hours. Yet I spent 3 days on each installer, and still couldn’t figure out basics like writing a script (except for copying samples).

In the meantime, where I work, we have one developer whos only job for the last 6 months has been to write install programs using InstallShield. This is not “easy to use.”