记Windows的一个存在了十多年的bug
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的更多相关文章
- 使用MFC开发有十多年了,结合自身的体会,随便说几句(不能样样都依赖别人,C体系的人,绝对不怕人踢馆)
挺长时间了吧,这个帖子还没沉下去,使用MFC开发有十多年了,结合自身的体会,随便说几句:1.MFC是一个C++的基础类库,封装了绝大多数的API函数,主要是用来创建带UI的应用程序,服务端程序或着不带 ...
- 困扰多日的C#调用Haskell问题竟然是Windows的一个坑
最近一直被C#调用Haskell时的“尝试读取或写入受保护的内存”问题所困扰(详见C#调用haskell遭遇Attempted to read or write protected memory,C# ...
- 把 Nginx 创建为 Windows 的一个服务
译序:Nginx 不是为 Windows 而写.Nginx 是用在软件的工作环境中的.但软件开发环境一般都是 Windows,有时调试的需要也要装 Nginx,但 Nginx 并没给 Windows ...
- Vue折腾记 - (3)写一个不大靠谱的typeahead组件
Vue折腾记 - (3)写一个不大靠谱的typeahead组件 2017年07月20日 15:17:05 阅读数:691 前言 typeahead在网站中的应用很多..今天跟着我来写一个不大靠谱的ty ...
- Java中,一个存在了十几年的bug...
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
- 记一次亲身踩过的hibernate的bug
记一次亲身踩过的hibernate的bug 在写实体类时,经常会对域增加校验,例如@NotNull表示哪个字段不能为空,昨天晚上调试代码,就遇到了问题, @Entity public class Ap ...
- 怎样才能提交一个让开发人员拍手叫好的bug单
怎样才能提交一个让开发人员拍手叫好的bug单 软件测试人员写得最多的文档就是测试用例和BUG,现在测试用例和BUG都没有标准的模板,每个公司使用的缺陷管理工具都有可能不一样,如果你换了一家公司就有可能 ...
- 面试题(造火箭必备技能):请举例一个最有成就感的性能bug
当前,绝大部分招聘都有性能要求或者把其作为加分项(会性能优先),哪怕你不是面试的性能,面试的时候可能会问性能,所以大家才会有"面试造火箭,进去拧螺丝"的共鸣.至于企业为什么重视性能 ...
- 定时器:为 Windows 实现一个连续更新,高精度的时间供应器
原著:Johan Nilsson 翻译:lxhui 原文出处:MSDN Magazine March 2004(Timers...) 原代码下载: HighResolutionTimer.exe (4 ...
随机推荐
- centos7更改中文
这是在CentOS7中设置,CentOS6的是在 .etc/sysconfig/i18n 配置文件下.在root用户下操作,使用 locale 命令查看语言环境,看到 LANG=en_US.utf8 ...
- 第五天python3 内建函数总结
id() 返回对象在内存中的地址 hash() 返回对象的hash值 type() 返回对象的类型 float() int() bin() hex() oct() bool() list() tup ...
- DTS搭载全新自研内核,突破两地三中心架构的关键技术|腾讯云数据库
随着企业规模的扩大,对数据库可用性要求越来越高,更多企业采用两地三中心.异地多活的架构,以提高数据库的异常事件应对能力. 在数据库领域,我们常听的"两地三中心"."异地多 ...
- css基础06
精灵图就是只要导入一张照片(这张照片里面有很多很多的小图标和照片),然后通过background-position来移动位置,使网页显示出对应图片或者图标.一般都是负值. 下载然后导入项目里. 不同浏 ...
- MySQL表操作过程的基础代码解析
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. MySQL 的表有很多种,对表的操作主要是增删改查,今天来浅谈一下这些操作的底层代码和流程,以下以 tmp table为例 ...
- Java多线程超级详解(只看这篇就够了)
多线程能够提升程序性能,也属于高薪必能核心技术栈,本篇会全面详解Java多线程.@mikechen 主要包含如下几点: 基本概念 很多人都对其中的一些概念不够明确,如同步.并发等等,让我们先建立一个数 ...
- Luogu4391 [BOI2009]Radio Transmission 无线传输 (KMP)
\(最小循环节\) \(=\) \(lenghth - next[lenghth]\) #include <iostream> #include <cstdio> #inclu ...
- PerfView专题 (第七篇):如何洞察触发 GC 的 C# 代码?
一:背景 上一篇我们聊到了如何用 PerfView 洞察 GC 的变化,但总感觉还缺了点什么? 对,就是要跟踪到底是什么代码触发了 GC,这对我们分析由于 GC 导致的 CPU 爆高有非常大的参考价值 ...
- Hadoop相关WebUI端口记录
以下均为默认端口号,可根据配置文件修改:HDFS:50070yarn:8088Hive:10002HBase:60010Spark:8080Flink:8081Storm:8080
- Dubbo源码(九) - 服务调用过程
1. 前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 源码分析均基于官方Demo,路径:dubbo/dubbo-demo 如果没有看过之前Dub ...