Free Installer Creators for All Eras

Since my list of installer-construction resources has grown so huge, I thought I’d move it out of my list of DOS/Win16 programming resources into its own post. After all, it extends all the way up to the modern era and it was sort of taking over.

I’ve cleaned it up a bit and I also added a mention of NSIS version 1.x, which is still available if you want to replicate the old “WinAMP Installer” feel.

The Resources:

HJ-Install
A freeware installer builder for Win32 that’s been around long enough to be on one of my 1998 shovelware compilations.
It’s free for commercial use, but I’d try an appropriate version of InnoSetup or NSIS first. HJ-Install’s 138KiB base overhead is two to four times theirs and they’re more featureful.
Info-ZIP
The open-source DOS self-extractor stub and Zip-modification tools you’ll need to build your own free-for-commercial-use self-extracting archives for DOS.
InnoSetup 1.2.16
The last release of InnoSetup which can target Windows 3.1. Open-source, but requires Borland Delphi 1.x to build.
InnoSetup 2.0.19
The last release of InnoSetup which supports WizardStyle=classic. Open-source, but requires Borland Delphi 2.x (and nothing newer) to build.
InnoSetup 5.4.3 (non-unicode version)
The last release of InnoSetup which can target Windows 9x. Starting with version 4.x, InnoSetup supports Pascal scripting for full customization. Open-source but requires Borland Delphi to build. (Delphi 2.x-5.x or 2009, if the requirements are the same as the latest release.)
Microsoft Setup Toolkit 2.0 (also locally mirrored, originally from conradshome.com).
According to the included LEGAL.TXT, the 2.0 version of the installer bundled with early releases of the Windows 3.1 SDK is effectively freeware. (Just don’t sell it without combining it with “another software product which adds substantial value”.)
NSIS 3.x
The Nullsoft Scriptable Install System. As long as you don’t use the Unicode true directive, it supports Win32 targets all the way back to Windows 95. (According to the features list and the changelog for the most recent minor version as of this writing, which is 3.02). Open-source.
NSIS 1.98
Use this open-source tool if you want the distinctive “WinAMP installer” look. Open-source, but I’m not sure where the source is.
Open Watcom C/C++‘s installer
If you don’t mind your installer stub being under a “publish the source, even for private uses” license and having to figure out how to build it yourself, OpenWatcom C/C++ has a nifty, powerful, single-file installer which runs off a .inf file and can target DPMI-extended DOS, Win32, and, assuming it hasn’t bit-rotted, Win16 via Win386 (Watcom’s 32-bit extender).
V8Power
The DOS utility similar to dialog which FreeDOS uses to build their CD installer out of batch files. Open-source.

Tips:

  • Different major versions of InnoSetup can be installed on the same machine without stepping on each others’ toes.
  • While UnZipSFX from Info-Zip can be compiled to support a post-extraction command, doing so disables support for extracting to locations other than the current working directory.
  • NSIS 3.x can be used for cross-building Windows installers from Debian-family Linux systems (eg. Ubuntu) via the nsis package.

…for Info-ZIP Self-Extractors:

  • Before installer builders started to support single-file output natively, a common solution for downloadable installers was to wrap their output in a self-extracting PKZIP or WinZIP archive, but no “free for commercial use” option I’ve found supports automatically unpacking to a temporary folder, running an installer, and then cleaning up when it exits.
  • Info-ZIP and ARJ both offer fully open-source ways to produce self-extracting archives for DOS, but, according to Maximum Compression, ARJ loses out to a good Zip compressor and, from what I remember, the only significant advantage it held over Zip back in the day was that PKZip’s support for split archives was a mess.
  • Info-ZIP lets you build DOS self-extractors from other platforms. Just grab the UnZipSFX stub from a DOS copy of Info-ZIP, concatenate the Zip file onto the end of it, and then run zip -A using your native copy of InfoZip to fix up the offsets in the Zip file.
  • You don’t strictly need to fix up offsets to make the UnZipSFX stub work… it just keeps it from complaining and ensures that you retain compatibility with external extractors like PKUNZIP.EXE which aren’t smart enough to compensate for offsets rendered invalid by prepended garbage.
  • Shareware distributors who had enough money to pay for an archive tool, but lacked the money to buy an install builder or the skill to write one would use a self-extracting archive with custom banner text.
  • You can customize the second line and beyond of the UnZipSFX banner text by setting an archive comment. Info-ZIP supports editing archive comments while I couldn’t find a way to do so using p7zip.
  • The zipnote command for editing archive comments is very picky about its input data.
  • Zip compression can be optimized by either generating the Zip file using 7-zip/p7zip or recompressing it using advzip from AdvanceCOMP. However, advzip will strip the comment if you set it before optimizing the compression.
  • While some FreeDOS versions of 7-zip include a DOS self-extractor stub, you don’t want it because it requires an external DPMI host.

My Recommendations:

Target OS Desired Experience Installer to Use
Anything .msi WiX
Windows 2000+ 64-bit era InstallShield NSIS with ExperienceUI or UltraModernUI
Win2K/XP era NSIS with Modern UI [1]
InnoSetup
Windows 95+ Win2K/XP era NSIS with ModernUI [1]
Late Win9x era NSIS with InstallSpiderUI [2][3]
Early Win9x era InnoSetup 2.0.19 with WizardStyle=classic [4]
Borrow Open Watcom C/C++’s installer
Windows 3.1x Single EXE or split archive InnoSetup 1.2.16
Open Watcom C/C++’s installer may be usable like this. [5]
Can replace system files
MS Setup 2.0 [6]
DOS Only suits EXE Downloads Use Info-ZIP‘s self-extractor [7]
Good for EXE Download or CD Image Borrow Open Watcom C/C++’s installer
Wait until I have time to write my planned installer kit.
Only suits CD Images Write an INSTALL.BAT using V8Power [8][9]
Suitable for Floppy Images Use Info-ZIP‘s self-extractor [7][10]

Footnotes:

  1. Included with NSIS
  2. CAUTION: I wouldn’t use InstallSpiderUI without first substituting replacement icons and wizard sidebars. The default sidebar art says “Powered by NSIS” at the bottom and I’m skeptical that the author created such a convincing knock-off of unInstallShield’s distinctive sidebar art rather than just yanking every bit of art he used from a copy of InstallShield.
  3. So far, I have only tested InstallSpiderUI on Windows 98 SE and am suggesting it for Win9x based on the fact that NSIS itself still supports Windows 95. Do your own testing!. Also, in my tests, SimpleBg silently refused to activate on a real Windows 98 SE machine, so this can’t be used to replicate early Win9x-era stuff.
  4. I haven’t found a way to achieve maximum authenticity by disabling the confirmation prompt InnoSetup displays before progressing to the screen-filling gradient background. If I find time, I may examine the source code to get a definitive answer.
  5. The source repository for Open Watcom C/C++ suggests that it should be possible to compile a version of the installer GUI for Watcom’s Win386 extender for Win16, but I haven’t tried it. That code may have bit-rotted.
  6. Microsoft’s “MS Setup” cannot bundle all of your files into a single archive, but explicitly supports installing off multi-floppy sets in resource-constrained contexts and, judging by the documentation, has much more comprehensive support than InnoSetup for performing installs which must restart Windows 3.1x to replace system components.
  7. The self-extractor stub from real-mode DOS versions of Info-ZIP can be added to a Zip file using a native build of Info-ZIP. Here’s how you’d build an un-split self-extractor on a POSIXy OS like Linux:
    #!/bin/bash
    NAME="testapp2"
    SFX_STUB="infozip/UNZIPSFX.EXE"
    FILES="testapp"
    ENDFILES="SETUP.EXE README.1ST"
    BANNER="Test Application v2.01
    By: Foobar Software
    
    Synopsis and/or company slogan here
    
    "
    
    # -- Configuration Ends --
    
    # Ensure relative paths are relative to this script
    cd "$(dirname "$(readlink -f "$0")")"
    
    ZIPNAME="$NAME".zip
    EXENAME="$NAME".exe
    
    # shellcheck disable=SC2086
    zip -rT9 "$ZIPNAME" $FILES $ENDFILES -z <<< "$BANNER"
    
    cat "$SFX_STUB" "$ZIPNAME" > "$EXENAME"
    zip -A "$EXENAME"
    rm "$ZIPNAME"

    Note that I’ve added two newlines to the end of the banner and taken advantage of the fact that files will be decompressed in the order they were added to the file to make SETUP.EXE and README.1ST the last two file names which the extractor will print to the screen before it exits. (At some point in the future, I might make a proper reader/writer abstraction for zipnote dumps so it’s possible to reliably combine custom banner text with advzip -z4)

  8. Without the need to worry about the awkwardness of manually unpacking, running the installer, and then deleting the unpacked temporary files, you’ve got a lot more freedom.Do as FreeDOS does. Put the pieces of V8Power which are relevant to your needs into a folder and call them from INSTALL.BAT or INSTALL.EXE to make a fancy, professional-looking install wizard. (Run the included demos and examples inside DOSBox to get an idea for which effects are portable and how to accomplish them.)
  9. If you still feel the need to compress the files to be installed, rather than distributing the whole ISO inside some more modern kind of compression like 7-zip, the UnZipSFX stub allows your frontend to specify a destination directory using the -d switch starting with version 5.5.
  10. Info-ZIP’s zipsplit tool doesn’t require you to swap floppies to make a multi-volume set the way PKZip did. The -r option will allow you to leave a specified amount of room on the first disk for your installer frontend. However, not having all the V8Power bits remain resident in memory means that you’ll either need to do all of your configuration prompting before you turn the job over to the Zip extractor or, alternatively, build your own GUI.

If I can find the time to finish it, I’ve started experimenting with using Free Pascal to write a DOS analogue to InnoSetup or NSIS which functions as a scriptable Zip self-extractor stub. (Though, unfortunately, it won’t be suitable for floppy sets (at least in v1.0) because of how much storage overhead I’m incurring from depending on DPMI, unzip code not intended to be an SFX stub, and Turbo Vision.)

Given that my goal is to use this sort of thing for nostalgic retrocomputing, I may even use the copy of Delphi 1.x on my Borland Delphi 2.x CD to to write a fork of 16-bit InnoSetup that can better mimic other nostalgic Win16 installers. though I’ll probably wait and see if the Win16 efforts by the Free Pascal crew reach a point where I wouldn’t be sharing new source that depends on a proprietary compiler.

CC BY-SA 4.0 Free Installer Creators for All Eras by Stephan Sokolow is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

This entry was posted in Geek Stuff. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

By submitting a comment here you grant this site a perpetual license to reproduce your words and name/web site in attribution under the same terms as the associated post.       Also, please be aware that non-constructive comments will have their URL field erased before being approved in order to combat SEO spam.