返回 2026-07-08
⚙️ 工程

Windows 95 是如何判定安装程序已运行的?How did Windows 95 decide that a setup program ran?

早期操作系统在管理程序安装与卸载时面临着缺乏统一标准的挑战,Windows 95 通过引入特定的启发式算法来解决这一问题。系统通过分析可执行文件的特征和运行行为,来自动识别并追踪安装程序的执行状态。这种基于启发式的检测机制,使得操作系统能够在安装完成后自动清理临时文件并更新系统注册表。作者通过历史代码的回顾,展示了早期 Windows 架构在设计上的精巧与妥协。

Raymond Chen

不久前,我曾提到过 Windows 95 具有一些防御机制,以防止安装程序用旧版本覆盖文件。每当检测到安装程序运行结束时,这些防御机制就会启动。但它是如何知道有安装程序正在运行的呢?

靠猜。

如果程序的名称中包含“setup”、“install”或其他一些魔法词汇,它就会被认定为安装程序。以下是这些魔法词汇的列表。

关于“install”的条目与“inst”是冗余的,因为任何包含“install”的名称也必然包含“inst”。我猜想一开始只有“install”,后来有人发现许多安装程序都被命名为各种前缀组合的“blahinst”,所以他们添加了“inst”条目,却忘了移除冗余的“install”条目。

如果程序名称没有匹配到任何词汇,Windows 95 还会检查可执行文件的路径中是否包含“Setup”一词。

在上述两种情况下,文件检查会被推迟到下一次启动时进行,因为某些安装程序会发现文件正在被使用且无法替换,因此它们会使用 ExitWindowsExec 退出 Windows 返回到 MS-DOS,运行批处理文件,然后再重新启动 Windows。我们必须等到 Windows 重启,才能查出那些被批处理文件错误修改的文件。

作为一项额外福利,在通过 INF 文件安装任何多媒体驱动程序后,Windows 95 会进行一次实时的文件检查。我猜多媒体团队发现许多驱动程序会在其 INF 文件中覆盖系统 DLL,所以他们要求在安装完成后进行一次清理操作。

作者

Raymond 参与了 Windows 的演进长达 30 多年。2003 年,他创建了一个名为 The Old New Thing 的网站,其受欢迎程度远远超出了他最疯狂的想象,这一发展至今仍让他感到有些惶恐。这个网站还衍生出了一本书,巧合的是书名也叫《The Old New Thing》(Addison Wesley 出版社 2007 年出版)。他偶尔会出现在 Windows Dev Docs 的 Twitter 账号上,讲一些毫无实用信息的故事。

需要完整排版与评论请前往来源站点阅读。