返回

文章详情

仍然可以在 Windows 11 上运行的最古老 GUI 应用程序

Hacker News2026年10月26日 17:56

早期调查 我一直在思考一个愚蠢的问题,那就是,什么是仍然可以在 Windows 11 上运行的最古老的 GUI 应用程序,而不需要修改或仿真。考虑到 Windows 的优秀向后兼容性,我原以为答案会是某个令人印象深刻的古老应用程序。遗憾的是,Windows 11 本身无法运行 16 位 Windows 程序,因为 64 位 Windows 没有 NTVDM,因此我们需要找到一些来自早期 NT 时代的东西。我记得我之前在一个匿名论坛上问过这个问题,有人指给我 Win32s,并建议我找到一个早期版本,内含 FREECELL.exe。因此我确实做到了这一点,结果发现,FREECELL.EXE 的修改日期为 1993 年 2 月 22 日,在最新版本的 Windows 11 上运行且完全可玩:在这篇文章发布时,这个应用程序的年龄为 33 年零 8 个月,几乎与我一样老。因此我觉得“酷”,认为这是一个解决了的谜团,随后便忘了它。但不知为何,这个问题最近又浮现在我脑海中,这次我决定进一步调查,看看能否找到更古老的东西。 进一步努力 通过互联网档案馆深入挖掘旧版本的 Windows,我发现了一些早期的 NT 3.1 预发布版本,似乎很有前景,但主要问题似乎是与今天的可执行格式不兼容或者后续开发中的 API 更改。最早的 1991 年版本使用了不兼容现代 Windows 的草案 PE 格式,而到 1992 年中期的版本假设使用 cdecl 调用约定,而不是 Windows API 调用的 stdcall,因此参数会被移除两次,如此: push hwnd ; 4 个字节的参数 call [ShowWindow] ; Win11 ShowWindow 是 stdcall,以“ret 4”结束并移除它们 add esp, 4 ; 1992 年的调用者再次移除它们 这自然会导致程序崩溃。然而,有一个应用程序引起了我的注意,那就是来自 Build 347 的 CDPLAYER.EXE,链接日期为 1992 年 11 月 16 日。到那时调用约定已经固定,但该构建中的其他程序在捆绑的 C 运行时中崩溃。CDPLAYER.EXE 通过使用系统的 crtdll.dll 避免了这一点,而 Windows 11 仍然在 SysWOW64 中提供了 crtdll.dll。如果你启动这个程序,你会看到这样的内容: 这是因为,我的电脑没有 CD-ROM 驱动器。但你可以使用一个小 DLL(cdemu.dll)来模拟一个和一些虚假的音频数据,实际上让它播放音频:对于一个几乎 34 年的程序来说,这真是太酷了! 如果我们作弊呢? 所以我之前提到,16 位程序不再适用,因为它们不再受支持。但如果你愿意,你可以使用像 otvdm 这样的工具来运行较旧的 Windows 应用程序。瞧,一个完整可玩的 REVERSI.EXE 版本,日期为 1985 年 11 月 15 日,能够在 Windows 11 上运行,来自 Windows 1.01:虽然使用 otvdm 确实感觉像是作弊,但我觉得它足够酷,因此决定将其包括在这篇文章中。

阅读全文 →

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

☕请我喝杯咖啡