Windows 95 如何判断一个安装程序正在运行?
摘要
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&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> </td>
</tr>
<tr>
<td><tt>install</tt></td>
<td>冗余</td>
</tr>
<tr>
<td><tt>inst</tt></td>
<td> </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 在每个人心中引发罗夏墨迹测试
这篇博客文章回顾了 Windows 95 和 XP 的包装与壁纸被公众误解的幽默事件,导致设计变更。作者 Raymond Chen 分享了这些来自微软历史的故事。
Windows 95于1995年8月24日发布
Windows 95于1995年8月24日发布,作为一款备受期待的操作系统,它引入了现代抢占式多任务处理,并相比前代版本提升了可扩展性。
作为Windows用户,这种安装程序的方式颇为超现实
一篇探讨通过DMG文件在macOS上安装应用程序的超现实体验的文章,并赞美“拖到应用程序”Finder窗口的创意设计。
我们如何确定 CcNamespace.dll 是一组过早卸载的 DLL 中的主谋?
Raymond Chen 解释了他是如何通过分析调试器的已卸载 DLL 列表,并注意命名模式和顺序,从而确定 CcNamespace.dll 是一串过早卸载的 DLL 中的关键 DLL。
关于滥用Windows窗口类额外字节的兼容性说明
Raymond Chen 讨论了一个历史性的 Windows 兼容性问题,其中一些 16 位程序滥用窗口类额外字节来存储私有数据,以及微软如何在保持向后兼容性的同时,对 32 位和 64 位程序堵住了这个漏洞。