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 truedirective, 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
.inffile 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.
- Wix# (WixSharp)
- A transpiler that converts a script in a C#-like language into WiX XML markup or straight to an MSI file, allowing you to generate MSI-based installers without having to choke down the infamously obtuse design of WiX’s XML.
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
nsispackage.
…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 -Ausing 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.EXEwhich 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
zipnotecommand 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
advzipfrom AdvanceCOMP. However,advzipwill 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# [1] | |
| Windows 2000+ | 64-bit era InstallShield | NSIS with ExperienceUI or UltraModernUI |
| Win2K/XP era | NSIS with Modern UI [2] | |
| InnoSetup | ||
| Windows 95+ | Win2K/XP era | NSIS with ModernUI [2] |
| Late Win9x era | NSIS with InstallSpiderUI [3][4] | |
| Early Win9x era | InnoSetup 2.0.19 with WizardStyle=classic [5] |
|
| 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. [6] | ||
| Can replace system files | ||
| MS Setup 2.0 [7] | ||
| DOS | Only suits EXE Downloads | Use Info-ZIP‘s self-extractor [8] |
| 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 [9][9] |
|
| Suitable for Floppy Images | Use Info-ZIP‘s self-extractor [8][11] |
Footnotes:
- The instructions for getting WiX# working under Linux are stored in the Codeplex archive. It’s easier to read them via the Wayback Machine.
- Included with NSIS
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.EXEandREADME.1STthe 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 forzipnotedumps so it’s possible to reliably combine custom banner text withadvzip -z4) - 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.BATorINSTALL.EXEto 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.) - 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
-dswitch starting with version 5.5. - Info-ZIP’s
zipsplittool doesn’t require you to swap floppies to make a multi-volume set the way PKZip did. The-roption 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.
Free Installer Creators for All Eras by Stephan Sokolow is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
