UPDATE 2021-12-19: Added Installer and InstallerLG for AmigaOS and derivatives
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.
Consider this a one-stop shop for finding a legally free way to make your installers as authentic to a certain aesthetic as possible.
- ClickTeam Install Creator 2 (mirror)
- This install creator for 32-bit Windows is under “freeware, unless you want to remove the final self-promotion screen in your installer” terms that also allow you to redistribute the original install package for the installer builder as long as you don’t modify it, bundle it with anything, charge for it, or ask for donations (so no compilation CDs).
- Since I’m planning make it possible to grab a copy of this whole blog with a single
git pull, I don’t know if they count that as “bundling” it, and their contact system requires me to create a forum account before I can open a ticket, I’m letting Archive.org handle mirroring it instead of hosting a copy myself. (It says “Demo” on the Archive.org page but it is their standard “Do you want the unregistered freeware version or the registered version?” installer.)
- I wouldn’t normally mention something like this when there are completely unrestricted options, but I do remember seeing ClickTeam’s self-promotion screens on the installers for a few pieces of freeware back in the late 90s and early 2000s, and it does still work back to Windows 95 and let you choose the classic looks so, if you’re going for retro-authenticity, this might be something to consider.
- 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 being extended via Pascal Script 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
- Installer v1.03 by Bloody Cactus Development Labs (HTTPS, FTP, Local Mirror)
- A freeware installer builder for DOS with intermediate complexity and an intermediate feature set.
- Takes an
.ini-format project file as input which allows you to specify file groups which may be required or user-selectable (ie. optional features). Also supports displaying a short message and a README file within the installer, and leaving a closing message like “Install finished. Type FOO to start your program,” visible when quitting.
- Uses a custom packfile format rather than something like Zip, but the compiler has built-in support for splitting packfiles to fit your installation volumes and reserving extra space on the first volume for things like README files.
- Includes two example project definitions, one of which defines the installer it’s distributed as.
- Installer and InstallerLG
- The installation tool for AmigaOS 2.1 and beyond, and a compatible reimplementation for things like AROS. See also InstallerGen for automating the task of writing install scripts.
- Loki Setup (GitHub)
- The source for the installer used by Loki Software on their Linux game CDs from 1999 to 2001.
- 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”.)
- It doesn’t produce single-file installers, but it is iconic, capable of updating Windows 3.1x system files from a GUI installer, and it includes a tool for laying out floppy sets for your installer.
- The install wizard for Linux used by GOG.com and many other publishers for non-Steam releases of games.
- Note that, if you’re not actively trying to replicate an aesthetic, I advise using either Flatpak or an archive people can just unpack for modern Linux games. Linux users don’t like Windows-style installers doodling all over their home directories.
- Also, Flatpak makes “build once, run on every distro” easy by allowing you to sandbox both building and running your program to catch any accidental dependencies on the host system.
- msitools (
wixlpackages on Debian-family Linux distros)
- A portable toolset for creating and manipulating MSI files, allowing cross-building MSI installers from Linux.
- 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.
- Qt Installer Framework
- The Qt application framework for C++ and Python includes tooling for building installers for Windows, Linux, and macOS, and it doesn’t appear to be coupled to Qt-based applications any more tightly than “put your installable artifacts in the right folder(s) within the installer project.
- Qt is available under LGPL and GPL licenses, and an installer’s code isn’t linked against what it installs or vice-versa, so your project doesn’t need to be under those licenses but you will need to provide sources for the installer if asked.
- The DOS utility similar to dialog which FreeDOS uses to build their CD installer out of batch files. If you’ve used Norton Batch Enhancer, think of it as a more powerful open-source alternative to that.
- 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. If you really need a GUI interface, Nvninstaller might be an option, though it hasn’t been updated since it was open-sourced in 2018.
- 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|
||WiX#  or msitools|
|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 Installer v1.03 by Bloody Cactus Development Labs.
- 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.
(I should probably also decide whether it would be worthwhile to make a rundown of period-appropriate patching tools like BPatch, given how easy it now is to just download a whole new installer for something sized to fit on a retro PC.)