话说那个微软的老工程师 Raymond Chen 前两天又出来跟大家聊聊往事了,这回他聊的是当年 Windows 95 是怎么防止被那些“不安分”的安装程序搞崩的。咱们都知道,当年 Windows 的历史上确实藏了不少好玩的东西,像什么系统里藏着的小彩蛋,或者是那些能让旧电脑快一点启动的冷门招数,大家伙儿都挺感兴趣的。这事儿还得从那会儿说起,好多第三方软件的安装包里头其实都带着一套系统可再发行的组件,这就好比是给软件配上的一套“弹药”,好让它能在用户的电脑上跑得顺溜。 微软那会儿给开发者定的规矩挺明白:程序在往系统里复制这些文件的时候,得先检查一下系统里头到底有没有同名的文件,还有就是版本新不新。只有确认系统里没有或者版本更旧了,你才能动手覆盖。不过现实嘛,总是没那么理想。有些开发者比较任性,根本不管那一套版本检查的事儿,直接就把自己带着的文件替换上去,管你原来的是新版本还是旧版本。 这么一来问题就大了!本来 Windows 95 的关键组件已经更新到了比较新的版本,结果却被这些安装程序给回滚成老版本了。这就好比是把一辆开得好好的新车给拆了零件换成老款的,其他依赖新版本的软件自然就会出幺蛾子,系统的稳定性那是直线下降。面对这种被“倒带”的风险,微软最后想了个挺实用的主意:在系统盘的根目录下弄了个叫 C:\\Windows\\SYSBCKUP 的隐藏备份文件夹。 这个文件夹里专门存着那些最容易被安装程序误删或者替换的关键组件的副本。当安装程序运行完了之后,Windows 95 就会在后台偷偷摸摸地干一件事:拿着现在系统里的新文件跟 SYSBCKUP 里的备份一一对比。要是发现哪个文件被换成更旧的版本了,系统就会在你毫不知情的情况下把它给替换回来。这就好比是自动帮你“撤销”了那次错误的操作。 要是检测到安装程序确实是带来了更高版本的组件呢?那系统也会顺便把 SYSBCKUP 里对应的备份文件给更新一下,留着以后接着当恢复基准用。Chen 觉得从技术角度看这招确实挺“原始”,但比起微软最开始想的那几个粗暴办法要强多了。比如他们一开始试过直接阻止程序覆盖系统文件,这确实能保护系统不被搞坏,但代价就是好多安装过程都得失败了。 还有一个思路是让安装程序去写“假文件”,看着像是覆盖成功了其实根本没动真格的文件。但这招也不行啊,因为很多程序写完文件后还要校验一遍内容和校验值呢。要是发现不一样了就会弹出错误提示直接终止流程。 在这些办法都被发现不靠谱之后,利用 SYSBCKUP 这个文件夹来做“事后纠错”的机制就成了当时在可靠性和灵活性之间最好的平衡点。它既让第三方的安装程序能顺利装完活儿,又在后台默默地把它们对系统造成的破坏给补回去了。这就大大降低了普通用户平常装软件的时候“装着装着就把 Windows 弄坏了”的概率。