首先我重新定义一下两个名词:定制和精简。定制是指以标准的方法(能在微软文档找到)对系统进行修改以满足使用需求;精简则是以标准或非标准的方法对系统进行修改以达到减少资源占用的目的。他们部分存在一些重叠,比如关闭某个功能、删除某个应用等。
你可以根据自己的技术能力,选择不同的操作方式,按复杂程度大致可以分成四个层级:
1. 使用原版系统(包括 LTSC 在内),然后去设置里面逐个关掉不需要的功能(有些关不了或不彻底)
2. 安装原版系统,然后使用无人值守文件或 winutil 这类优化工具做一个在线定制(实际上是运行一些脚本,以修改注册表、运行某些程序为主)
3. 离线定制系统,提前把设置都搞好,这样装完系统就是你定制好的样子
4. 离线定制、精简系统(可能暴力删除文件)
但 Windows 是一个闭源系统,没有对 Windows 系统的了解( IT 运维层面)和一定的逆向能力,就很难真正搞清楚各个组件之间的依赖关系,大多数时候只能靠猜。即便猜对了完美删除了某个系统功能,也无法保证第三方软件不会因此出问题(一些软件假定系统具备某个功能)。比如我自己遇到过,删了 Print Spooler 服务之后,Acrobat 安装的时候就直接回滚了。winutil 之前也出现过一个问题:删除 Recall 导致文件资源管理器出现问题,因此将代码回滚了,后来发现是微软犯了一个错误:
<amp-youtube data-videoid="G9FRadIkkE0" layout="responsive" width="480" height="270"></amp-youtube><amp-youtube data-videoid="gBqIUkmVel8" layout="responsive" width="480" height="270"></amp-youtube>
很多所谓的“大神”其实只是投入了更多时间去反复试错,积累了更多的经验。甚至有些人不懂逆向分析、不会 Windows 编程,连自动化脚本都不会写,只是重复性地在 NTLite 这类工具点点按钮、敲敲键盘,最后还说耗费了很多精力(可不吗)。其实只要掌握一点自动化工具的使用,发布新版本的精简系统并不是什么难事。
从技术的角度上来说,精简无非是保证系统不去使用某个文件,然后就可以安全地把这个文件删除或修改了。
我对精简始终保持一个怀疑态度,即便是 Windows 的开发人员也未必完全了解整个系统的组件的依赖关系。Windows 系统很复杂了,纯粹依靠经验和试错是不行的。如果定制系统禁用某个功能,就像 if (false) 一样,那是可以接受的。但如果是暴力删除文件等行为导致这个功能失效,则是非常严重的错误。尽管他们在结果上相同,但后者是不可以接受的,经验法则此时就无法区分出两种情况。
比如 Windows 10 的拼音输入法的候选框依赖于另一个看起来毫不相关的 appx ,删除就不显示候选框和 emoji 面板:
https://www.423down.com/13227.html/comment-page-7#comment-340247 。可见这些作者也只是(只能)根据经验来精简系统。
而且 Windows 的变化非常频繁,微软经常塞一堆新功能进来,想精简最新系统就必须不停追踪更新,了解每次更新新增了什么内容,怎么去除这些新组件。这就要求你经常在网络上搜索资料,在各大社区(比如 My Digital Life )追踪最新的修改方法。更别提现在很多功能都捆绑在一起了,根本无法部分移除,修改 DLL 等二进制文件吗?不太现实,数字签名也不会允许这么做。
另一个不容忽视的问题是安全。即使精简版系统的制作者主观上没有恶意,他也很难保证整个构建链条的安全性,尤其是使用了一些非官方的闭源工具的时候,一些系统封装工具可能是重灾区。我想起很旧以前用老毛桃官方 PE 重装系统的经历:那次我安装的是原版镜像,用的是官方最新版的 WinNTSetup ,但浏览器主页还是被篡改了,我发现后又立马重装了。修改主页还是可以被观测到的轻微的问题,谁知道是否还有其他更加恶劣的行为。我现在只使用官方的 PE (只有一个 CMD 窗口)——在系统安全性这件事上,再怎么小心都不为过。
如果是安装在虚拟机中,而且对安全性没有要求,比如测试一个离线运行的软件,那使用这些精简版系统其实也挺方便。有时候我也装来看看,才知道哦原来这个功能是可以关闭的啊,学习了。我自己也会做一些定制,但目的不是为了节省硬盘空间或显著提升性能,只是为了不想看到 Windows 那些乱七八糟的预装内容,眼不见为净。我不提倡暴力精简(以减少镜像体积),但我提倡定制系统来禁用不需要的功能。
我设想过做二进制可重现构建的 WIM 镜像,但发现这需要非常多的工作,尤其是在 Windows 闭源的现状下——哪怕只是挂载一次注册表、什么都不改,它的内容也会发生变化。这样我还得去理解注册表的文件结构以及为什么改变了,太累了!其实我有点羡慕 Linux ,一切都是公开的,或许哪天我会把 Linux 当成主力吧。
https://github.com/ChrisTitusTech/winutilhttps://github.com/memstechtips/UnattendedWinstall