Windows 10 有多烂?

我相信有很多跟我一样的 Windows 10 Insider 在体验过 Insider 版本后, 都趁着去年 Windows 10 的正式发布, 将系统恢复至了正式版本. 然而, 正式版本也没有我想象中的那样稳定.

升上正式版本后不久, 我就遇到了几大 Windows 10 特有的bug, 这让我对 Microsoft 好不容易积累下的一些好感荡然无存. 还记得当时 SurfaceBook 的发布让我兴奋了一天, 但很快我就对其失去了兴趣, 因为软件实在太垃圾, 而我恰好又不是真的那么的傻逼.

Bug

Bug #1: 自带拼音输入法卡住整个系统

Windows自带的微软拼音输入法为什么会占用巨大的内存? - 知乎

这个 bug 实在是让我整个人都无语了, 连如何复现都没有人知道, 只是偶尔会出现, 而且一旦出现就会让你愤怒无比.

他妈的怎么一个输入法可以把整个系统卡住? 我就不懂了, 好在我是 24 GB 内存, 每次卡住暴涨的 2 ~ 4 GB 内存对我的机器来说根本就连屁都不是, 但即便如此整个系统还是会失去响应能力 10 ~ 90 秒左右, 同时吃掉我一整个 CPU 核心的运算资源.

难道跟轮子哥说的一样, 是因为打字速度太快了, 输入法的选词功能跟不上? 我用全拼输入的平均速度是120字/分钟, 这个速度已经满足我平时写写文章的需要, 同时我也很享受这种高速击键的感觉, 所以我从来没有考虑过去用双拼输入法, 试想如果我切换到自带的双拼输入法, 岂不是会卡得更加频繁?

现在唯一的解决办法就是换一个第三方输入法, 自从我换上了 Rime, 就再也没有在 Windows 10 上遇到输入法卡住整个系统的问题.

Bug #2: 开始菜单不显示内容

win10开始菜单打不开怎么办? - 知乎

这也是个神奇的问题, 虽然很多人只是描述说打不开, 但实际上我遇到过好几种可以称为"打不开"的状态, 而且网上能找到的解决方法试了一圈没有一个是对我有用的.(经评论区网友提醒, 我遇到的情况应该是Rime的TSF前端的问题, 卸载Rime可解)

可以说这是一个比自带输入法卡住系统还要恶心的bug, 开始菜单是开启一切程序的最方便快捷的途径, 而恰好每次在生产力最高的时候, 想要打开一个程序, 结果就遇到了这个bug, 开始菜单一片空白, 谁能忍住不骂娘呢?

这个 bug 最终使得我忍无可忍将系统重新进入 Insider 版本, 因为重装的成本实在是太高了, 当时我是这么想的:

既然这是一个 Windows 10 正式版的bug, 那么肯定在更新的版本里已经被修复了.

结果是他妈的没有修复! 然后变本加厉进化出了另外两种形态:

Bug #3: 点击桌面左下角的开始菜单图标没有反应

是的, 没有反应, 连菜单都没有出现, 对我来说这跟不显示内容是一样的.

Bug #4: 点击开始菜单的内容没有反应

开始菜单打开了, 内容也显示了, 然后点内容没有反应.

? ? ?

我真是操了微软开发人员全家了.

你们到底是做了什么才会让一个 bug 变成更多的 bug? 而且 Windows 的升级安装似乎从来就没有办法修复 bug, 从 Windows 7 的时代开始就是这样了, 所以每当我安装新系统, 都是格盘重装, 从来不会考虑用"升级"功能升级到新系统, 因为我知道每次如果我选择了升级, Windows 就会像养蛊一样把问题积累得越来越有新意, 然后你们的母亲又得在我口中死掉至少2次.

我当时也真的是脑子烂掉才会相信进入 Insider 版本会修复问题.

Bug #5: 调整命令行窗口大小会导致 npm 启动出错

"Error: This socket is closed" when running any npm command · Issue #12887 · npm/npm

这个 bug 对我而言真的是很好复现, 因为是 100% 成功的.

每次我修改了终端的窗口大小, 然后遇到这个错误提示:

events.js:160                                                                                                  
      throw er; // Unhandled 'error' event                                                                     
      ^                                                                                                        

Error: This socket is closed                                                                                   
    at WriteStream.Socket._writeGeneric (net.js:672:19)                                                        
    at WriteStream.Socket._write (net.js:724:8)                                                                
    at doWrite (_stream_writable.js:307:12)                                                                    
    at writeOrBuffer (_stream_writable.js:293:5)                                                               
    at WriteStream.Writable.write (_stream_writable.js:220:11)                                                 
    at WriteStream.Socket.write (net.js:650:40)                                                                
    at Object.Gauge._doRedraw (E:\Program Files\nodejs\node_modules\npm\node_modules\npmlog\node_modules\gauge\
index.js:208:26)                                                                                               
    at Object.Gauge.hide (E:\Program Files\nodejs\node_modules\npm\node_modules\npmlog\node_modules\gauge\index
.js:162:8)                                                                                                     
    at EventEmitter.log.clearProgress (E:\Program Files\nodejs\node_modules\npm\node_modules\npmlog\log.js:127:
14)                                                                                                            
    at EventEmitter.log.disableProgress (E:\Program Files\nodejs\node_modules\npm\node_modules\npmlog\log.js:88
:8)

这之后我就必须退出这个终端并重新开一个.

有时候我的两个屏幕DPI缩放大小是不同的, 根据 Windows 10 的"拉伸适应机制", 如果我把这个终端从一个屏幕拖到另一个屏幕, 那么结果是100%这个终端会不再能够正常运行 npm.

哦, 对了, 最开始我还以为是 npm 的问题呢, 直到我看到那个 issue 里有微软的工程师站出来说问题已经被修复, 将在下一个 Insider 版本里修复. 关键不是这个, 关键是他的发帖时间是6月15日, 而我是在7月17日遇到这个问题的. 这件事只有以下两种解释可能:

  1. 这个问题已经被修复了, 但在新版本里又再次出现了.

  2. 这个问题从来就没有被修复.

我能说什么呢?

疑似 Bug #6: 自带 UWP 无法打开 / 打开后不加载资源

我们知道 Windows 10 的最大变化是使用了一种全新的应用格式, 即 UWP, 系统内置的很多应用都是 UWP 实现的, 开始菜单应该也是, 所以某种程度上这个 bug 和开始菜单的 bug 是一样的.

因为这个 bug , 自带的什么 电影 / 音乐 / 图片浏览器, 我真的是没爽着用过, 要么是极慢的加载速度, 要么是根本加载不了, 就直接给我显示一个 UWP 载入时会显示的等待画面, 然后自己崩溃.

最让我受不了的是加载速度很慢的情况, 凭我在软件开发时的经验, 我真的理解不了为什么会有这种情况出现, 我一开始是怀疑我的垃圾硬盘速度太慢, 但当我用 Potplayer 打开同样一个视频文件的时候, 我发现根本就不是我硬盘的问题, 肯定是 UWP 的程序有问题.

有时候 UWP 的崩溃还会连带着 explorer.exe 一起崩溃, 无语了, 真的无语.

这个问题在得知 Rime 可能影响 UWP 应用后变成了疑似 bug, 参考 bug #1, Windows 10 的程序会因为输入法存在问题而出现各种异常表现, 可能算得上一个设计问题.


Bug #7: 拖动窗口导致系统蓝屏崩溃

Windows 10 Insider 14279 - BSOD when draging window between monitor • Discussions • DisplayFusion • Binary Fortress Software

打死我我也想不到这个 bug 是跟 DisplayFusion 有关的.

我不知道 Windows 10 在那次更新里做了什么修改, 我只知道当我"碰了"窗口的标题栏, 就有很大可能导致蓝屏, 有时候不碰也会蓝屏. 我花费了很多的时间去寻找到底是什么程序导致了 Windows 10 蓝屏, 从来没有想过这个蓝屏是 Windows 10 把 API 更新得不稳定才导致蓝屏的. 后来我由于某些原因把 DisplayFusion 关了, 很长时间都没有遇到蓝屏, 这才认识到问题的根源.

在一次 Windows 10 更新后, 又不再蓝屏了, DisplayFusion 的版本没有任何变化, 只能说, 呵呵.

另外, Potplayer 的64位版本安装文件也在某个 Windows 10 更新中会导致蓝屏.

Bug #8: 桌面的显示范围存在适应问题

前几天我把电脑连上电视准备玩一玩生化奇兵: 无限, 结果电脑连电视, 桌面的显示是不全的, 这很奇怪, 电脑和电视的分辨率都是对的, 然后我就怀疑是电视的分辨率有问题.

折腾了半天还是没有搞定, 我想起自己的 PS4 也是 1080P, 接上电视根本没有任何问题, 抱着试一试的心态, 我没有管桌面的显示范围, 直接运行了游戏.

结果游戏的显示范围是正常的.

Bug #9: 右键菜单 - 在此处打开命令窗口 直接导致 explorer.exe 崩溃

大概是从和与 npm 有关的 bug 一样的 Insider 版本开始的, Shift + 右键 - 在此处打开命令窗口 这种堪称神技的操作会导致 explorer.exe 崩溃.

无奈.

Bug #10: 命令行自动阻塞

为什么Windows的命令行某些时候会卡住? - 知乎

这个 bug 是真的存在, 只是遇到的人很少, 而且根本就不知道是什么原因导致的, 同时也无法复现.

我也就是提一下, 但这肯定是 Windows 10 的 bug, 因为我在各种程序里都遇到过这个 bug, 只是机率不高.

Bug #11: 锁屏界面循环登录

周年更新后遇到的 bug

这是我重装到周年更新后遇到的 bug, 我对微软真的太失望了.

这个 bug 的表现形式是锁屏界面输入密码后会再一次进入锁屏界面然后无限循环, 这之后还有可能自动进一次校验密码的载入画面, 如果你选择重启, 重启画面也可能进入多次.

Bug #12: 设置应用的搜索结果不能就绪

周年更新后遇到的 bug

在“设置”中搜索无法反馈正确结果 - Microsoft Community

提示说几分钟后重试, 反正就是永远都不会就绪, 我机器都重装2天还在搜集, 科科.

Bug #13: Alt+Tab 切换窗口严重延迟, 预览画面在两种显示方式间反复切换

周年更新后遇到的 bug

我比较怀疑这个是其他软件造成的, 按下Alt+Tab切换窗口时, 有时候会显示成另外一种预览画面, 每次显示错误都会导致系统响应变慢, 如果一直按住Alt+Tab键, 会发现整个操作都被卡到延迟了, 即使松开按键, 也需要等待十秒以上的时间让系统的切换窗口功能反应过来.

Bug #14: 微软拼音不显示选词框

周年更新后遇到的 bug

我以前遇到过的输入法不出选词框, 好歹我可以盲打猜选词, 然后按数字键选我要输入的内容. 微软拼音不是这样的, 它的选词框不是隐藏了, 是根本就不出来了, 所以你按数字键是没用的, 因为程序压根就没有让选词框这个东西载入.

Bug #15: 系统语言切换是笑话

周年更新后遇到的 bug

系统升级后一部分语言设置就会被还原到你装机时使用的语言.

Bug #16: 开机后鼠标点击无效

周年更新后遇到的 bug

会变成只能点击桌面, 其他任何程序(包括桌面以外的任务栏)都无法响应鼠标事件.

有时候 Win + L 锁定再解锁可解.

现在预定要覆盖安装一月的新系统, 看看能不能在不影响已安装的应用程序的情况下修复现有的问题.

设计问题

系统激活根据 MAC 地址验证唯一性

修改mac地址可能导致win10变成未激活-远景论坛-微软极客社区

按道理说, 不应该用帐户验证系统激活的合法性吗? 之前还有人说用主板验证的.

可是, 为什么我软改了网卡 MAC 地址, 就让我重新输入 Key 激活呢? 虽然我是有 Key 的正版的 Windows 10, 可是每次都要重新输入还是很麻烦的好不好?

我是怎么确定这和 MAC 地址有关的呢?

因为我之前用 C# 写了一个小程序, 可以很方便的将自己的网卡 MAC 地址修改成一个指定厂商的随机 MAC 地址, 然后借此做一些特殊的事情. 我用那个小程序的时候, 几乎天天都在提醒我激活 Windows.

从 VBS 到 VB6. 从 VB6 到 VB.NET, 再从 VB.NET 到 C#, 从 Win32 到 WinForms, 从 WinForms 到 WPF, 微软的那套开发环境我很早就在用了, 其实我挺喜欢微软干的这些事情的, 但操作系统能不能上点心? 为什么要让一个可以被软件修改(Windows 自带修改 MAC 的功能和我的软件原理一致)的值当作验证唯一性的参数?

Windows Defender 在家庭版很难彻底关闭

其实 Windows 10 是自带关闭 WIndows Defender 功能的, 但是只能关闭一会, 之后就会自己开启. 关闭 Windows Defender 是因为这个东西存在性能问题, 而且是从 Windows 8 开始就存在性能问题了, 不过前段时间我给一台老机器换了今年的周年更新版本, 似乎性能问题终于被修复了(更新: 并没有修复).

我是在别人的机器上发现 Windows Defender 无法在家庭版中关闭的, 我自己用的专业版可以通过组策略彻底关闭 Windows Defender, 然而家庭版没有组策略.

我也试过别的方法, 比如用专门关闭 Windows Defender 的工具, 比如修改注册表(我相信那些工具也是同样原理), 但最终都没有真的彻底关闭, 过一段时间就会自行启动, 而且操作起来很麻烦.

当然这个世界上存在一些从根部解决问题的方法, 但这真的有点过了. 于是, 微软强制开启 Windows Defender 又不给出一个彻底关闭的选项这件事, 我可以拿来黑一辈子.

开始菜单的索引功能将英文字母与拼音区分显示

所有你用拼音A开头的汉字, 都会被索引到拼音A, 而不是A. 这他妈是一件很愚蠢的事情, 全世界那么多的 Launcher 和别的软件大多都会把拼音和字母混在一起, 即便没有这么做也是把汉字开头的程序全部列进未分类的列表里, 你 Windows 10 既然有能力区别拼音, 为什么还做这么多余的事情?

当你想找一个软件的时候, 即使是拼音A, 那也应该分类在A里面, 妈的拼音A和字母A开头到底有什么区别有什么必要区分成两种? 搞得一个开始菜单的分类多到需要动一下鼠标滚轮才能全部显示. What the fuck?

自动安排重启

我他妈半夜挂着个程序跑测试, 第二天起来发现啥都没了.

PowerShell 自创了一个 curl

其实之前调试CouchDB的时候就想说了, PowerShell 的 curl 跟 unix 的 curl 不兼容你建这个别名干啥?

微软拼音无法输入部分多音单字

比如"了liao", 只能通过"le"输入(后来改了, 但是了在le的候选词里得翻好几页才能找到).

大概是全世界最蠢的设计

废除"适配器和绑定"选项

在之前的 Windows 系统里, 用户可以通过"网络连接"的高级设置对"适配器和绑定"选项进行配置, 从而调整网络适配器的连接优先级, 在 Windows 10里该功能似乎被废除, 导致用户无法手动设置网络优先级.

Windows 10的默认优先级为LAN > WLAN, 所以如果你想在 Windows 10里反其道而行之, 恐怕是做不到了.

所以

我要退出 Insider, 我要重装系统了, 而且还得是不会像个傻逼似的在安装过程中念诗的英文版.

肯定有人想问我为什么不用 Linux, 说实话, 我享用自带的 Bash on Windows 已经几个月了, 同时我也很喜欢 PowerShell 秒杀 Unix 命令行的先进设计理念, 它已经满足甚至替代了我绝大部分有关 Linux 的需要, 所以我已经没有理由在桌面端用 Linux 了.

之前用 Linux 的一大阻碍就是如果我想要让整个系统都走 Shadowsocks, 我需要配置 iptables 和 redsocks, proxychains 等好几个程序, 即使完全配置好, 也会遇到这样那样的新问题, 而且使用起来并不爽. 所有这一切通过我在 Windows 上买的 Proxifier 都可以非常轻松清爽的解决, 甚至我的 Chromebook 都可以直接让所有程序走代理(即便 Chrome OS 是基于 Linux 的), 我为什么要浪费时间在配置 Linux 上呢?

但愿重装后的 Windows 10 周年更新不会让我失望.