How Windows 98 Supported Setup.exe Installers

In Microsoft Windows 98, installing software via a Setup.exe file relied on a hybrid architecture that bridged 16-bit DOS/Windows legacy code with modern 32-bit Windows operating system features. This article explains how Windows 98 executed these installers, how third-party installer engines orchestrated file extraction, how the operating system registered libraries and tracked modifications in the Windows Registry, and how the OS replaced locked system files through reboots.

Execution and Binary Compatibility

When a user ran Setup.exe in Windows 98, the operating system's loader examined the executable header to determine its architecture. Windows 98 provided native backward compatibility, allowing Setup.exe to run whether it was compiled as a 16-bit New Executable (NE) from the Windows 3.1 era or a 32-bit Portable Executable (PE) designed for the Win32 API. If the installer was a legacy 16-bit application, Windows 98 executed it within the Win16 subsystem (Win16 on Win32, running under a shared virtual machine), while 32-bit installers ran in their own protected address spaces.

Third-Party Installation Frameworks

Setup.exe was rarely an independent executable; it typically served as a bootstrap loader for dedicated installation frameworks such as InstallShield, Wise Solutions, or Microsoft ACME Setup. Upon launch, Setup.exe unpacked compressed archive files (such as .CAB files or proprietary data archives) into the system's temporary directory (C:\WINDOWS\TEMP). The bootstrap program then initialized the main setup script, presented graphical wizard interfaces to the user, and handled hardware or system requirement checks before moving files to user-defined destinations, such as C:\Program Files.

File Deployment and Version Checking

Windows 98 provided standard Win32 file manipulation APIs to assist installers in file transfer and version verification. When copying shared Dynamic Link Libraries (DLLs) to C:\WINDOWS\SYSTEM, installers utilized system version APIs (GetFileVersionInfo and VerQueryValue) to compare the version of the file being installed against existing files. This was intended to prevent older files from overwriting newer ones, an issue commonly known as "DLL Hell." If an installer encountered a locked or in-use system file, it scheduled a file replacement operation.

Delayed File Replacement via WININIT.INI

Because Windows 98 did not allow running processes or in-use operating system DLLs to be directly overwritten while the GUI was active, it utilized a delayed replacement mechanism. Installers wrote queued file moves and deletions to an initialization file named WININIT.INI, located in the C:\WINDOWS directory. When the installer prompted the user to restart the PC, real-mode MS-DOS processed WININIT.INI during system startup before the Windows 98 graphical shell loaded, executing the file transfers without lock conflicts and then deleting the initialization file.

Registry Integration and Component Registration

Throughout the installation process, Setup.exe interacted with the Windows 98 Registry to persist configuration data. Installers created paths under HKEY_LOCAL_MACHINE\Software and HKEY_CURRENT_USER\Software to store application settings. For component-based software, the installer registered COM (Component Object Model) components and ActiveX controls by calling the exported DllRegisterServer entry point within DLL and OCX files, often utilizing the system utility REGSVR32.EXE.

Add/Remove Programs and Shell Integration

To ensure the software could be managed by the user, Windows 98 required installers to register uninstallation strings. The Setup.exe routine generated shortcut files (.LNK) inside the C:\WINDOWS\Start Menu\Programs directory via the IShellLink COM interface and created a subkey under HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall. This registry key stored values such as DisplayName and UninstallString, which populated the application inside the "Add/Remove Programs" applet in the Windows 98 Control Panel, allowing users to remove the software using its bundled uninstaller.