微软资深员工雷蒙德·陈(Raymond Chen)最近分享了Windows发展史上的一个有趣故事——Windows 95如何处理安装程序破坏系统文件的问题。
这个问题可以追溯到16位Windows时代,当时许多系统组件都是可重新分发的。安装程序可以包含这些组件的副本并将其放置在目标计算机上。安装程序应该比较系统上现有文件和要复制文件的版本号,只有在要安装的文件版本号更高时才进行覆盖。
与现在创建安装包时需要担心注册表被完全破坏或依赖项不是开发者认为的那样相比,那时的情况要简单得多。
"这个规则依赖于Windows保持向后兼容性的特点,因此即使旧程序使用新版本文件也能正常工作,"陈写道。
在实际应用中,没有任何机制阻止安装程序完全忽略这个规则。安装程序简单地覆盖路径上的任何文件,用Windows 3.1的组件替换Windows 95组件的情况并不罕见。
"你可以想象这给系统其余部分造成了多大的灾难,"陈说。
虽然距离Windows 95时代已经过去了几十年,读者可能会好奇为什么操作系统要允许这种情况发生。答案是向后兼容性:阻止文件操作可能会破坏安装程序本身。
"这最终造成了更多问题,"陈解释道。"一些安装程序会声明安装失败并放弃。其他程序会向用户显示错误消息,询问用户下一步该怎么做。(好像用户知道该怎么做似的。)"
"你甚至会遇到采取更极端措施的安装程序,它们会说:'好吧,我不能覆盖这个文件,那我就重启系统,然后通过批处理文件覆盖文件,看你能不能阻止我。'"
微软的解决方案是创建一个隐藏目录(c:\\windows\\sysbckup)来存放经常被覆盖的文件。安装完成后,Windows会悄悄检查磁盘上文件的版本号。较高版本号的文件会被复制到隐藏目录中,或者隐藏目录中的文件会替换版本号较低的文件。
"基本上,"陈写道,"Windows 95会等待每个安装程序完成,然后回头检查其工作,修复安装程序犯的任何错误。"
这种双重保险的方法依赖于操作系统能够感知到安装程序正在翻查其内部文件。
如今——基于最近的表现——用户应该更少担心安装程序,而更多地关注微软自己对Windows系统文件做了什么。
Q&A
Q1:Windows 95时代的安装程序有什么问题?
A:当时的安装程序经常忽略版本检查规则,直接覆盖系统文件,用Windows 3.1的旧组件替换Windows 95的新组件,给系统造成严重问题。
Q2:微软如何解决安装程序破坏系统文件的问题?
A:微软创建了一个隐藏目录(c:\\windows\\sysbckup)存放重要文件的备份。安装程序完成后,Windows会自动检查文件版本号并修复被错误覆盖的文件。
Q3:为什么Windows 95不直接阻止安装程序覆盖系统文件?
A:为了保持向后兼容性。直接阻止文件操作可能导致安装程序失败、显示错误或采取更极端的措施,反而会造成更多问题。
热门跟贴