Windows 95 如何判断一个安装程序正在运行?

The Old New Thing (Raymond Chen) 新闻

摘要

Raymond Chen 解释了 Windows 95 如何通过检查可执行文件名中是否包含“setup”或“install”等魔法词来判断一个程序是否为安装程序。

<p>不久前,我提到过 <a title="Windows 95 对安装程序覆盖旧版本文件的防御措施" href="https://devblogs.microsoft.com/oldnewthing/20260324-00/?p=112159">Windows 95 有一些防御措施,防止安装程序用旧版本覆盖文件</a>。这些防御措施会在检测到某个安装程序完成时触发。但问题是,<a href="https://devblogs.microsoft.com/oldnewthing/20260324-00/?p=112159&amp;commentid=143974#comment-143974">系统是如何知道有一个安装程序正在运行的呢</a>?</p> <p>答案是:靠猜测。</p> <p>如果程序名称中包含“setup”、“install”或其他一些魔法词,那么它就被视为安装程序。以下是这些魔法词的列表。</p> <table class="cp3" style="border-collapse: collapse;" border="1" cellspacing="0" cellpadding="3"> <tbody> <tr> <th>魔法词</th> <th>备注</th> </tr> <tr> <td><tt>setup</tt></td> <td>&nbsp;</td> </tr> <tr> <td><tt>install</tt></td> <td>冗余</td> </tr> <tr> <td><tt>inst</tt></td> <td>&nbsp;</td> </tr> <tr> <td><tt>imposta</tt></td> <td>意大利语?</td> </tr> <tr> <td><tt>ayarla</tt></td> <td>土耳其语?</td> </tr> <tr> <td><tt>felrak</tt></td> <td>匈牙利语?</td> </tr> </tbody> </table> <p>条目 <tt>install</tt> 与 <tt>inst</tt> 是冗余的,因为任何包含“install”的字符串也必然包含“inst”。我猜测“install”是首先被添加的,后来有人发现很多安装程序都命名为“<span style="border: solid 1px currentcolor;">blah</span>inst”(其中“blah”代表各种前缀),于是又添加了“inst”条目,但忘记移除冗余的“install”条目了。</p> <p>如果程序名称没有匹配项,Windows 95 还会检查可执行文件的路径中是否包含“Setup”一词。</p> <p>在上述两种情况下,文件检查会延迟到下次启动时进行,因为有些安装程序会意识到文件正在使用中无法替换,于是它们使用 <code>ExitWindowsExec</code> 退出 Windows 返回 MS-DOS,运行一个批处理文件,然后再重新启动 Windows。我们必须等到 Windows 重新启动后才能捕获那些被批处理文件不当修改的文件。</p> <p>作为额外奖励,Windows 95 会在通过 INF 文件安装任何多媒体驱动程序后执行实时文件检查。我猜多媒体团队发现很多驱动程序会在它们的 INF 文件中覆盖系统 DLL,因此他们要求在之后进行一次清理。</p> <p>本文最初发布在 <a href="https://devblogs.microsoft.com/oldnewthing">The Old New Thing</a> 上,原标题为 <a href="https://devblogs.microsoft.com/oldnewthing/20260707-00/?p=112508">How did Windows 95 decide that a setup program ran?</a></p>
查看原文
查看缓存全文

缓存时间: 2026/07/07 22:35

# Windows 95 如何判断安装程序已运行? - 经典旧事 来源:https://devblogs.microsoft.com/oldnewthing/20260707-00?p=112508 不久前我曾提到,Windows 95 对覆盖文件为旧版本的安装程序有一些防御措施(https://devblogs.microsoft.com/oldnewthing/20260324-00/?p=112159)。这些措施会在检测到安装程序完成时触发。但系统是如何知道安装程序正在运行的呢(https://devblogs.microsoft.com/oldnewthing/20260324-00/?p=112159&commentid=143974#comment-143974)? 它靠猜测。 如果程序名称中包含 "setup"、"install" 或其他几个魔法词,则被认为是一个安装程序。以下是魔法词列表。 | 魔法词 | 备注 | |--------|------| | setup | | | install| | | inst | 冗余 | | imposta| 意大利语? | | ayarla | 土耳其语? | | felrak | 匈牙利语? | "install" 这个条目与 "inst" 冗余,因为任何包含 "install" 的词必然也包含 "inst"。我猜 "install" 是先添加的,后来有人发现很多安装程序被命名为各种 "blahinst"(其中 "blah" 为不同值),于是又添加了 "inst",但未能删除冗余的 "install" 条目。 如果程序名称中未匹配到任何词,Windows 95 还会检查可执行文件路径是否包含 "Setup" 一词。 在上述两种情况下,文件检查会延迟到下次启动,因为有些安装程序会意识到文件正在使用中无法替换,于是使用 `ExitWindowsExec` 退出 Windows 回到 MS-DOS,运行一个批处理文件,然后重新启动 Windows。我们必须等到 Windows 重启才能捕获批处理文件错误修改的文件。 作为额外福利,Windows 95 会在通过 INF 文件安装多媒体驱动程序后进行实时文件检查。我猜多媒体团队发现很多驱动程序在其 INF 文件中覆盖系统 DLL,因此他们要求事后进行清理。 ### 分类 ### 主题 ## 作者 Raymond Chen Raymond 参与 Windows 的演进已有 30 多年。2003 年,他创建了一个名为 "The Old New Thing" 的网站,其受欢迎程度远超他最疯狂的想象,这一发展至今仍让他感到不安。该网站后来催生了一本书,巧合的是书名也是《The Old New Thing》(Addison Wesley 2007)。他偶尔出现在 Windows Dev Docs Twitter 账号上,讲述一些毫无实用信息的故事。

相似文章

Windows 在每个人心中引发罗夏墨迹测试

Hacker News Top

这篇博客文章回顾了 Windows 95 和 XP 的包装与壁纸被公众误解的幽默事件,导致设计变更。作者 Raymond Chen 分享了这些来自微软历史的故事。

Windows 95于1995年8月24日发布

Hacker News Top

Windows 95于1995年8月24日发布,作为一款备受期待的操作系统,它引入了现代抢占式多任务处理,并相比前代版本提升了可扩展性。

关于滥用Windows窗口类额外字节的兼容性说明

The Old New Thing (Raymond Chen)

Raymond Chen 讨论了一个历史性的 Windows 兼容性问题,其中一些 16 位程序滥用窗口类额外字节来存储私有数据,以及微软如何在保持向后兼容性的同时,对 32 位和 64 位程序堵住了这个漏洞。