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
I Found It!
Subsequent to writing this article I discovered
WIX. WIX is everything you need in an installer, and it's open
- 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
- Have better art for the install dialogs (Wise has very nice
8-bit art) – and in 32-bit color.
- Make it easy to show the readme file (Wise and ZeroG have this).
- Allow an install folder at “Program Files/Company/Product” (InstallShield
and ZeroG have this).
- Have install typical, custom, and all (Wise and ZeroG have
- Allow copying a file to GAC as a feature (InstallShield can
do this – but considers it an error).
- 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).
- Can require any office component as a prerequisite (ZeroG has
this) – and can set a minimum version number of that
- Can set a condition based on if a named process is running.
- Can set to force reboot if a named process is running. (A lot
of install programs could use this.)
- A method to return if a process is running would be a good
general addition to the API too.
- Can install HxS files.
- Make it easy to edit dialogs (Wise is very easy).
- Intelligently add to classpath – at beginning or end.
This means do not add duplicates to it.
- Explain how to write a script (this is central to an installer
yet none of you show someone how to do this).
- Explain how to write a dll called by the installer (as scripts
are not allowed by many anti-virus programs).
- Explain how to write conditions (again there are some samples
but no comprehensive help for this).
- Support if a value matches a regular expression. This would
make it easy to parse a registry value in a condition.
- Support calling a program during uninstall (InstallShield and
Wise support this).
- 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),
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
are not supported. I also think all three programs have a
long way to go to be considered easy to use. For example, to
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,
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.”