UPDATE 2019-04-12: Added a couple of very basic DOS installer TUIs that sit in front of some other unpacker.
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.
- 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.
- 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.)
- Install 3.0 and 4.0 by Kenneth W. Illig
- An ultra-simple freeware installer TUI for DOS to stick in front of a self-extracting archive. Just tell it the suggested install directory name, the program to tell people to run after the install completes, the name of the self-extracting archive, and a message of up to 79 characters to display. No other customization of the UI is possible.
- The 3.0 version hard-codes the expectation of a single self-extracting archive with an
.exeextension while the 4.0 version adds a few extra fields so you have more flexibility to run up to three additional commands as part of the installation process.
- NOTE: You are required to distribute its
INSTALL.DOCfile (3.1KiB uncompressed, 1.3KiB zipped) along with it so that anyone who receives whatever you’re installing can also use it to build their own installers.
- Mirrored here but originally found as
\DOS\PRGMMINGfolder of the PSL Monthly Shareware CD-ROM, November 1993 and
\PRGMMING\DOS\GEN_INSTfolder of the PSL Monthly Shareware CD-ROM, August 1995 on
- 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).
- Program Installer v2.0.1 for DOS by Pelikan
- A very simple freeware installer TUI for DOS which essentially just presents a UI to let someone pick the install target, verifies that there’s enough free space, and then calls a decompressor of your choice (
PKUNZIP.EXEis used in the example
.inifile) with the appropriate arguments.
- No fancy progress GUI or high degree of customization. On the downside, if you don’t find the
.inifile self-evident, all the documentation is in Slovak and must be fed through Google Translate. On the upside(?), it plays a
.modmusic file of your choice while it’s running, including while it’s shelled out to the decompressor.
- Originally found as
install.zipon the SAC’s SK_MADE archive of shareware and freeware by Slovak authors but, since it’s so obscure, they don’t have per-file detail pages, and hotlinking is bad (mmkay?), I’m mirroring it here.
- 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.
- 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
…for Info-ZIP Self-Extractors:
- Before installer builders started to support single-file output natively, a common solution for downloadable single-file 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 prepending stuff.
- 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.
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.
|Target OS||Desired Experience||Installer to Use|
|Windows 2000+||64-bit era InstallShield||NSIS with ExperienceUI or UltraModernUI|
|Win2K/XP era||NSIS with Modern UI |
|Windows 95+||Win2K/XP era||NSIS with ModernUI |
|Late Win9x era||NSIS with InstallSpiderUI |
|Early Win9x era||InnoSetup 2.0.19 with
|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. |
|Can replace system files|
|MS Setup 2.0 |
|DOS||Only suits EXE Downloads||Use Info-ZIP‘s self-extractor |
|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
|Also suitable for Floppy Images||Use Info-ZIP‘s self-extractor.  The two install TUIs may also work if you can set up your extraction of a split archive properly.
- The instructions for getting WiX# to cross-build MSI installers via Wine 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
README.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 for
zipnotedumps so it’s possible to reliably combine custom banner text with
- 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.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.
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 using Open Watcom C/C++ to write a DOS analogue to InnoSetup or NSIS and I’ve been making a concerted effort to keep the code lean so it will be usable on floppy disk sets. (Including preferring custom wrappers around DOS and BIOS APIs over standard library functions where it will reduce the size of the final binary.)
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.