I accidentally broke support for Windows 95/98/ME in dotNetInstaller. I was even more surprised that someone cared. A developer reported the bug, and then my friends in Botswana are saying that Windows 95/98/ME is alive and well all over the place. How can I say no to African children?!
The first problem is locating a Windows 98 CD in the pile of old MSDN distributions, creating a boot disk image in an .IMZ format, converting it to .IMG with WinImage and finally making a VM. Fixing the display driver was a pain. Phew, I now have a booting and running Windows 98 to test after half a day of travelling back 10 years of software development.
MSLU stands for Microsoft Layer for Unicode. Making MSLU work involves not upgrading to Visual Studio 2008 (sigh) and doing a few tricks described in an excellent article in MSDN. I ran all C++ unit tests and fixed those that didn’t run on Windows 98 (a couple of Win32 API calls only). Good.
Carrying unicows.dll is annoying, this is a setup bootstrapper. So I tried embedding it as a resource (RES_UNICOWS CUSTOM "unicows.dll") and am now decompressing it at runtime to %TEMP%\unicows.dll. It works beautifully!