bug

Windows有一个bug,持续了十多年,从Windows Visita开始(2007年),一直存在,直到Windows11(2021年)才修复(其实也不叫修复,后面我再具体说),而Windows10还能重现这个bug,即便把系统更新到最新(2022年10月5日)。

这个bug用语言来描述就是:使用Windows Explorer(资源管理器)的树形结构初次展开目录时,滚动条会发生不正确的滚动,使得展开的节点贴近了窗口底部的位置,而不是处于我们期待的顶部位置。

有些难懂?我录了一个视频来说明这个bug:视频压缩包(博客园不能上次视频,所以做了个zip),本人基本没学过视频制作,弄得比较粗糙,请见谅。

Windows Vista

Windows Vista出来的时候,我就尝鲜安装了一个,基本上是马上就发现了这个问题,因为Windows XP及之前的所有的Windows操作系统都没这个问题。

为什么我能马上看出来?还不是因为我对资源管理器的使用习惯,我非常喜欢用目录树展开找到我想要的东西,这种习惯来源于我最早接触的Windows操作系统——Windows 95,要说现代Windows的操作模式是从哪来的,那一定是Windows 95,直到现在,Windows 95仍然是我心目中最具“跨越式”发展的操作系统,就是说它步子足够大,颠覆了过往的操作系统,让人耳目一新,开始菜单,底部任务栏,任务管理器,真正的多任务,这些如今我们无比熟悉的东西皆源于Windows 95,比尔盖茨也凭着这个操作系统的发布而登顶了世界首富。这是一些题外话。

我发现这个bug之后,就一直想办法要修复它,到处寻找解决方案,发现了这个问题的人当然不只是我,在MSDN上就有一个回复达到上千的bug反馈,是描述这个问题的,这个帖子的链接如今已经不可访问了,我记得非常清楚,大部分人表示这是个不可理喻的bug,不知道为啥会存在,非常低级,应该很快就能修复。而可气的是微软官方的答复居然说:这是个feature,并把这个问题close了,但大家的跟进仍然很激烈:

  • “因为这个问题我已经失去了对微软的尊重了。”
  • “我对微软早就没有尊重了,我已经打算更换Mac了。“
  • “每次遇到这个问题,我真想把电脑扔下楼,然后去买台Mac。”
  • “微软要是能把以前开发XP的老掉牙的从病床上拉起来并帮他们带好尿袋,我相信这问题会在3分钟内修复。”

帖子中好些微软的MVP在了解情况后非常明确地指出这是个bug! 它不可能是一个feature,因为它行为不一致,而feature即便是再差再糟糕的feature也必须满足行为的一致性,否则只能论作bug,它确实就是个不折不扣的bug。

这个问题对我困扰甚多,所以Vista我基本没怎么用,因为一个bug而放弃一个操作系统,听起来挺荒谬,但事实就是这样,对我而言,这基本上就是个硬伤,我不愿意改变我的习惯,而这个bug真是令我抓狂。

Windows 7

Windows Vista是微软的一个失败的操作系统,最主要的原因是其兼容性的问题,这些问题到了Windows7之后得到了很大程度上的改善,所以很多人都用过Windows7,而没有使用Windows Vista,他们都知道Windows Vista不好,但不好在哪里,他们都说不出来。而对我来说比兼容性更重要的是,这个该死的bug到底有没有修复?Windows7安装上去了之后,我满怀期待地打开了资源管理器按我习惯的操作点击了几下……我靠! 一点都没变! 我先是气愤,后转为失落。

不管怎么说,Windows7都会成为以后几年的主流操作系统了,我得习惯——唉! 我后来确实找到了一个程序,一定程度上能解决这个问题,这个软件的名字叫“Classic Shell”,它的网站目前还能访问:http://www.classicshell.net/,里面包含了一个小小的功能:fix folder scrolling,它的其它功能我如今全忘了,因为当时我只看中了它这个功能。看吧,放弃一件东西往往只因为其中的某个特点,反之,选择一件东西也是这样。Classic Shell这个软件并不能解决所有的问题,它仅仅作用于资源管理器程序中,而Windows的这个bug不只是在资源管理器中有,它在“打开文件”,“选择目录”等系统公共对话框中也存在,但能解决一部分是一部分吧。而作为Windows程序员的我还曾一度想自己修复这个问题,但研究下来无果。

Windows 8

又过了若干年,Windows 8发行了,这貌似是一个很大的改版,我又满怀期待地安装上去了,结果真是无语,这个bug一点不差地继承了下来。Windows 8的活动磁贴让人很有新鲜感,但随即新鲜感过后觉得其实也没啥营养,活动磁贴适合于平板,但桌面版的Windows强行弄这东西真的合适么?不过最奇葩的还是Windows 8的关机按钮,即便是我这样的老鸟,也费了老大劲才找到。Windows 8是个失败的操作系统,可能是因为步子有点大,和Windows 95的步子大不同,它不合理的地方太多。

Windows 8.1

微软很快意识到了Windows8的问题,所以不久后推出了Windows 8.1,Windows 8.1的UI上更加符合用户传统的操作习惯,但也真的只是小改进罢了。bug呢?——当然完美保留了下来。

而从Windows内部版本上来看,Windows Vista,Windows 7, Windows8,Windows 8.1是相差不大的东西,想知道Windows版本可以在命令行界面中敲“ver”查看,你会了解到:

* 6.0 - Windows Vista
* 6.1 - Windows 7
* 6.2 - Windows 8
* 6.3 - Windows 8.1

不过,从Windows 10开始就不是这样的版本显示了。

Windows 10

Windows10大概从2016年开始渐渐普及,一样的,我安装后的第一件事情就是看看这个bug修正了没有,嗯……还好我没太大的期待,果然还在! 这也说明了一个问题,这个资源管理器的代码应该是直接从之前版本的操作系统中拿过来用的,应该没改过什么。Windows10是一个比较成功的操作系统,发行后,微软多次对它进行了大幅度的迭代,如今的Windows 10跟初代的Windows 10已经差别很大,但对我而言,不修正这个bug都算不上成功。

Windows 11

这个bug最终的解决是在Windows 11上,它,终于消失了,但Windows 11和Windows 10在UI上的差别很大,对我而言这绝对是步子迈得太大扯到蛋的变化,Windows 95的革命性UI变化给人是惊艳的感受,因为进步实在太大,而Windows 11的这些“改进”都只停留在表面上,把开始菜单弄成居中,强行合并任务栏图标,这些除了强制用户改变自己习惯之外,我看没带来什么好处啊,操作更便利了?功能更强大了?更加符合人类直觉了?恐怕都没有吧,就是为了标新立异而已,我不反对一些新的尝试,但至少要给用户一个选项,如果新的方式不好用,能够退回旧的方式啊。但不管怎么说,在Windows 11的资源管理器中,它确实消失了,也许不是修复了,而是微软重构了资源管理器的代码,因为Windows 11的资源管理器跟Windows 10的有着很明显的差别,所以真相很可能就是:微软其实根本没去修正这个bug,只是把资源管理器重新写了一遍,正好没了这个bug罢了。

Windows11的操作方式和Windows10也有着很大的差别,最令人吐槽的便是它的右键菜单,相信是个程序员看了都想开骂——为何要我多点一下。所幸的是要调整回经典右键菜单并不难,而要想让传统的任务栏回归就有点难了,我尝试过许多个方法后,发现比较可靠的,且副作用比较小的,就是用一个叫“StartAllBack”这个软件,它的作用不仅仅是让经典任务栏回归,还能调整开始菜单,以及让资源管理器使用传统风格。

总结

写这篇文章,是为了一些纪念,也是为了总结一些道理:

1. 一个东西,不管其它方面有多好,一个缺点就可以让人很讨厌它
2. 没有充分的理由就不要试图去改变用户的习惯
3. 从根本上去改进产品,而不是停留在表面上
4. 一个产品没有令人厌烦的bug往往比有什么酷炫功能重要
5. 大公司……确实挺傲慢

记Windows的一个存在了十多年的bug的更多相关文章

  1. 使用MFC开发有十多年了,结合自身的体会,随便说几句(不能样样都依赖别人,C体系的人,绝对不怕人踢馆)

    挺长时间了吧,这个帖子还没沉下去,使用MFC开发有十多年了,结合自身的体会,随便说几句:1.MFC是一个C++的基础类库,封装了绝大多数的API函数,主要是用来创建带UI的应用程序,服务端程序或着不带 ...

  2. 困扰多日的C#调用Haskell问题竟然是Windows的一个坑

    最近一直被C#调用Haskell时的“尝试读取或写入受保护的内存”问题所困扰(详见C#调用haskell遭遇Attempted to read or write protected memory,C# ...

  3. 把 Nginx 创建为 Windows 的一个服务

    译序:Nginx 不是为 Windows 而写.Nginx 是用在软件的工作环境中的.但软件开发环境一般都是 Windows,有时调试的需要也要装 Nginx,但 Nginx 并没给 Windows ...

  4. Vue折腾记 - (3)写一个不大靠谱的typeahead组件

    Vue折腾记 - (3)写一个不大靠谱的typeahead组件 2017年07月20日 15:17:05 阅读数:691 前言 typeahead在网站中的应用很多..今天跟着我来写一个不大靠谱的ty ...

  5. Java中,一个存在了十几年的bug...

    本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...

  6. 记一次亲身踩过的hibernate的bug

    记一次亲身踩过的hibernate的bug 在写实体类时,经常会对域增加校验,例如@NotNull表示哪个字段不能为空,昨天晚上调试代码,就遇到了问题, @Entity public class Ap ...

  7. 怎样才能提交一个让开发人员拍手叫好的bug单

    怎样才能提交一个让开发人员拍手叫好的bug单 软件测试人员写得最多的文档就是测试用例和BUG,现在测试用例和BUG都没有标准的模板,每个公司使用的缺陷管理工具都有可能不一样,如果你换了一家公司就有可能 ...

  8. 面试题(造火箭必备技能):请举例一个最有成就感的性能bug

    当前,绝大部分招聘都有性能要求或者把其作为加分项(会性能优先),哪怕你不是面试的性能,面试的时候可能会问性能,所以大家才会有"面试造火箭,进去拧螺丝"的共鸣.至于企业为什么重视性能 ...

  9. 定时器:为 Windows 实现一个连续更新,高精度的时间供应器

    原著:Johan Nilsson 翻译:lxhui 原文出处:MSDN Magazine March 2004(Timers...) 原代码下载: HighResolutionTimer.exe (4 ...

随机推荐

  1. 「APIO2010」巡逻 题解

    来源 LCA 个人评价:lca求路径,让我发现了自己不会算树的直径(但是本人似乎没有用lca求) 1 题面 「APIO2010」巡逻 大意:有一个有n个节点的树,每条边权为1,一每天要从1号点开始,遍 ...

  2. Java8新特性: lambda 表达式介绍

    一.lambda 表达式介绍 lambda 表达式是 Java 8 的一个新特性,可以取代大部分的匿名内部类,简化了匿名委托的使用,让你让代码更加简洁,优雅. 比较官方的定义是这样的: lambda ...

  3. if条件控制语句和switch语句

    if条件控制语句(判断范围,在一定区间内容进行判断) if 如果(第一个条件) else if 如果(第二个条件 可以无限加) else 否则(只能有一个 上面都不满足的情况下进入) if和else ...

  4. docker容器技术基础入门

    目录 docker容器技术基础入门 容器(Container) 传统虚拟化与容器的区别 Linux容器技术 Linux Namespaces CGroups LXC docker基本概念 docker ...

  5. cad工具快速选择特性里面是空的解决方法

    工具-选项-文件中,支持文件搜索路径中 添加,再浏览,找到"C:\Program Files\Common Files\Autodesk Shared"确定就OK了.

  6. SAM复杂度证明

    关于$SAM$的复杂度证明(大部分是对博客的我自己的理解和看法) 这部分是我的回忆,可省略 先回忆一下$SAM$ 我所理解的$SAM$,首先扒一张图 初始串$aabbabd$ 首先发现,下图里的$S- ...

  7. java基础Synchronized关键字之对象锁

    java中Synchronized关键字之对象锁    当有多个线程对一个共享数据进行操作时,需要注意多线程的安全问题. 多线程的同步机制对资源进行加锁,使得在同一个时间,只有一个线程可以进行操作,同 ...

  8. Apache DolphinScheduler 3.0.0 正式版发布!

    ​  点亮 ️ Star · 照亮开源之路 GitHub:https://github.com/apache/dolphinscheduler   ​ 版本发布 2022/8/10 2022 年 8 ...

  9. error setting certificate verify locations

    描述 在使用 git clone 克隆 GitHub 或者 Gitee 上的项目时,报如下错误: error setting certificate verify locations: CAfile: ...

  10. Docker 03 镜像命令

    参考源 https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0 https://www.bilibili.com/vid ...