By Sarah Chen, Tech Daily
Older software may still be stored as Win16 binaries created during Windows 1.x, Windows 2.x, Windows 3.0, or Windows 3.1. On a 64-bit Windows host, winevdm is the adapted 16-bit Windows emulator that lets those binaries run, and the relevant runtime names are otvdm.exe, otvdmw.exe, winevdm.exe, install.inf, and otvdm.ini.
For MyTechDailyNews readers, the main software-level conclusion is narrow but useful: winevdm is for Win16 program execution and installer behavior; it is not a complete replacement for DOSBox or MS-DOS Player when DOS emulation is required.
For direct program launch, drag a Win16 executable onto otvdm.exe, or start otvdmw.exe.
If the failure message says VCRUNTIME140.dll is missing, add Microsoft Visual C++ Redistributable for Visual Studio 2017 (32-bit).
winevdm.exe [--app-name app.exe] command line winevdm.exe CALC.EXE
The same winevdm.exe command path can also launch DOS executables in a DOS emulator-like manner. Use the VDMDOSVER environment variable to set the DOS version.
DOS emulation is incomplete. For DOS workloads that need fuller compatibility, choose DOSBox or MS-DOS Player.
| Reader task | winevdm path | Documented note |
|---|---|---|
| Run an older Windows program | otvdm.exe or otvdmw.exe | Win16 binaries can be executed directly after installation. |
| Run a 16-bit installer | install.inf | 64-bit Windows can start an alternative installer which is not 16-bit when it detects a 16-bit installer. |
| Preserve a settings file location | Redirected %WINDIR% path | Some Win16 programs save settings in %WINDIR%<filename>.ini; recent Windows does not allow that save location, so winevdm redirects it. |
| Run a DOS executable | winevdm.exe in a DOS-emulator-like mode | DOS emulation is incomplete; DOSBox or MS-DOS Player are recommended. |
| Rebuild the project | Visual Studio 2017 or cmake | Build paths are separate from runtime paths. |
The program contains an emulator and compatibility layer rather than a single launcher. One documented reason for a CPU Emulator is that 64-bit Windows cannot modify LDT because NtSetInformationProcess(,ProcessLdtInformation,,) always returns error.
A sample conversion function is:
BOOL16 WINAPI DestroyWindow16 ( HWND16 hwnd )
{
return DestroyWindow ( WIN_Handle32 ( hwnd ) );
}
A sample autogenerated relay line is:
53 pascal - ret16 DestroyWindow ( word ) DestroyWindow16
Configuration is stored in otvdm.ini.
The project uses a Windows installer behavior: when 64-bit Windows sees a 16-bit installer, it can launch an alternative installer that is not 16-bit.
Some Win16 programs try to save settings to %WINDIR%<filename>.ini. In recent Windows versions, saving to %WINDIR% is not allowed, so winevdm redirects the save path.
git clone https://github.com/otya128/winevdm.git cd winevdm mkdir build cd build cmake .. make
The guide is based on the winevdm material and preserves the cited facts: Windows 1.x, Windows 2.x, Windows 3.0, Windows 3.1, Win16, Win32, 64-bit, 16-bit, 32-bit, otvdm.exe, otvdmw.exe, winevdm.exe, install.inf, Windows Update, Microsoft Visual C++ Redistributable for Visual Studio 2017, Visual Studio, cmake, git, github.com, wine, DOSBox, MS-DOS Player, 53, install, and 2017.