Janek's weblog where all posts go to Eleven
All views and documentation expressed here are mine and not necessarily those of my employer.
Update (14.12.2007): Please see my comments below.
The nice article about the deployment of client-side Java applications by Keyboardsamurais reminds me that I wanted to warn of ZeroG's InstallAnywhere.
On paper, InstallAnywhere looks like the perfect solution for all your installation needs; but if you look closer it's full of bugs -- from small and subtle to downright embarrassing.
The feature list:
Let's start with the file format and parser -- one of the embarrassing bugs. Up to InstallAnywhere 5, InstallAnywhere projects were renamed Java class files. With version 5, they decided to store the project information in XML. It was promoted as the ideal solution for hand editing, XSL transformations etc. But while the format is XML it is still a meaningless externalization of InstallAnywhere's internal object representation. The structure is undocumented and unreadable. But you'll learn that they use java.util.Vector a lot.
The file parser is a complete nightmare. Some genius decided to write the XML parser inhouse. He must have been under the impression that all the complete, fast and correctly implemented parsers out there aren't good enough. The result? You're in trouble if you use XSLT to make changes to the project file. For instance, it is valid to have more than one CDATA section:
<tag><![CDATA[Two]]><![CDATA[cdata sections]]></tag>
InstallAnywhere's XML parser can't process that. It may look stupid, but it's coming out of XSLT processors. That means you not only execute a simple XSL transformation; you must perform complex text transformations with sed or Ant as well.
On Windows, InstallAnywhere can register services. Of course, it only covers the basics -- registration of the program, start mode and a description. More complex things, such as dependencies, are not implemented. So if you're service depends on another service your out of luck. Unless you read the stuff up and write the needed registry keys yourself.
It's the same with the uninstaller. InstallAnywhere can create an uninstaller and register it with the Software applet in the Control Panel. The applet supports individual icons for uninstallers. But with InstallAnywhere it displays a generic, ugly icon. Either you accept it or set the registry key by hand.
Sorry, but that's exactly the kind of know-how that I don't want to have.
Installer localization is another pet peeve. The quality of the translations is good. Also, you can customize them in the designer. But only for English. If you need to customize another language you have to edit a property file. As all of our installers are currently in German, we edit that file a lot. To make matters worse, InstallAnywhere likes to overwrite that file from time to time.
What really upsets me is that the localization file contains more than just language. An example: you can create new text files from the installer. We use it to create configuration files. The content of those files is also stored in the localization file. It took me a couple of days to figure that out. I was changing something in the designer, but the installer never executed it. It turned out that if you change the file's content in the designer, it only changed the English localization file.
I could go on and on. Work with InstallAnywhere has never been pleasant but often surprising. If your in the market for a cross-platform installer shop around. If you think, InstallAnywhere suits your needs, download the evaluation copy. It's unrestricted in functionality. Don't buy before you completely implemented the installer and are ready to ship.
The experiences above were made with InstallAnywhere Enterprise Edition 5.0.7. We never updated to version 6. It's too much hassle for way too much money.
My friends Michael Hauf and Daniel Schulz contributed to this post.
Update (14.12.2007): I got contacted by a representative of Macrovision, InstallAnywhere's producer. He assured me that the current version, InstallAnywhere 2008, has improved a lot. Unfortunately, I don't have the time to review the new version. I suggest you download the evaluation copy and try for yourself.
When we bought InstallAnywhere 3 years ago, we thought we had to support lots of platforms but then only shipped on Windows and Linux. Today, we use NSIS on Windows, which is a great open source script-based installer. Our Linux users are either sophisticated or have administrators: We send them tar files. In case you need to support more than those two platforms: I've heard good things about install4j although I haven't used it so I don't know if it's true.
In any event, I still stand by my suggestion made in 2004: Regardless of the installer you'll choose, implement it completely using the evaluation version and don't buy before you're ready to ship.