InstallShield X is the Worst Program Ever Made
I was assigned a project a month or two ago that involved an attempt to brand an Installshield X installer as well as extend its functionality to be able to write some keys to the registry that an ActiveX control would read from later.
This was one of the most aggravating things I have ever had to do in my life, and led me to the conclusion that InstallShield X is the most horrible program ever created:
- InstallShield X understands 1 graphics format: BMP
Isn't that just wonderful? Espcially when you are trying to build a package for web deployment where download size is of a huge concern, the marketing people's obsession with color branding has doubled the size of my installer package thanks to InstallShield's ability to only work with bitmaps.
- Surely you didn't REALLY want to delete that image
I discovered this nifty little "feature" when I kept receiving new images for the branded scheme. I would replace one image on the dialogs with another image (BMPs, remember). I was then rather dismayed to see that as I swapped in smaller images (optimized), the size of my installer increased rather than decreased. Come to find out, any piece of binary data that you add to an InstallShield X project at any time gets stuffed into one of their project tables, the "Binary Data" table. You can remove every reference in your project, but the binary data is still there. You have to manually open this table up, then delete the unused rows.
- Changing fonts and colors? Are you kidding me?
So we had to make some of our text green and a certain size of Verdana. Most GUI-editing applications will have some sort of a drop-down box allowing you to specify your font & color.
However, that would make too much sense. With InstallShield X, you have to edit one of their buried properties tables to actually define your own "class" of font, including face type, size, and color. However, assigning a hex value or an RGB value would be just too easy. Here is the exact text from their help documentation regarding colors:
"This column specifies the text color displayed by a Text Control. All other types of controls always use the default text color. The value put in this column should be computed using the following formula: 65536 * blue + 256 * green + red, where red, green, and blue are each in the range of 0-255. The value must not exceed 16777215, which is the value for white. The value is 0 for black, 255 for red, 65280 for green, 16711680 for blue and 8421504 for grey. Leaving the field empty specifies the default color."
Of course, why would they just stop at colors?
"A combination of bits indicating the formatting for the text.
The individual style bits have the following values."
- A custom action with 0 lines of code compiles to 250k
Part of this activity was to write a custom action for X that would set a flag in the registry. Their "recommended" way of doing this was to use their InstallScript language, with its own API hooks into the Windows operating system. The code was simple enough (although their documentation was very sketchy), so I proceeded to compile my installer. My 25 lines of code proceeded to add 250k to my project. Thinking maybe it was the API calls that imported some extra libraries, I tried to remove those and compiled again. No change. I then deleted all the contents of my script file, then compiled it, and discovered that a 0kb custom InstallScript action will compile to 250k. By contrast, I rewrote this later using VBScript which added a whopping 250 bytes of weight. So I suppose the formula is:
InstallScript Compiled Size = VBScript * 10^3
- InstallScript requires an 800k dynamic download by the client
Whenever an X project contains an InstallScript custom action, when the client tries to run the Installer it will automatically trigger an 800K download of the InstallScript runtime. Of course, we had no warning of this until we actually got it deployed to test the first time.
So the final penalty of trying to use the *recommended* customization language = 250k of bloated compiled garbage + 800k runtime download = 1.05 MB of total worthless download weight (compared to 250 bytes of VBScript).
I found something that describes my demeanor after this project to the letter
. (A little on the violent side)