为了防止误解,先声明:我允许 Windows 自动更新来保护设备,但是我不想让 Windows Update 在我预期之外的时间重启我的电脑。
五月中旬更新到 Windows 10 v2004 之后,按照惯例去改了组策略:「更新挂起时,如果有用户登录不自动重启计算机」,然而某天起床发现还是自动重启了,痛定思痛,开始寻找如何更好的防止 Windows Update 意外重启电脑。
在阅读这个 Superuser 讨论后,我大概总结出了以下几种方案:
- 禁用 Windows Update,定期手动运行(这样简直是等着重蹈永恒之蓝的覆辙了,因为必定会忘记手动重新启用)
- 先获取权限,然后在任务计划里删掉 Windows Update Reboot 的计划(似乎几次更新之后就会失效,Windows似乎会定期重设)
- 先获取权限,然后不给 Windows Update 设定任务计划的权限(某次更新后失效,Windows Update 现在已经默认用最高权限了,可以无视 NTFS 权限设置)
- 组策略开启「存在登录用户时不自动重启」(已经确认无效)
- 每天多次定期更新 Active Hours,从而保证 Active Hours 一直覆盖当前时间(看起来最有效)
其中看起来最有趣的是最后一个方法:定时更新 Active Hours。只要保证 Active Hours 总能覆盖当前时间,不就能确保不会自动重启了吗?继续看下去,有两个实现:
- 闭源实现:Reboot-Blocker - Ulrich Decker Software ,胜在简单直接,会自动安装一个系统服务,每个小时把 Active Hours 更新至 [当前小时-1,当前小时+17](网站是德语的,但是安装程序是英语的,安装后无界面)
- 开源实现:GitHub - Maimer/update-active-hours: Creates a scheduled task to continually update the Active Hours to stop forced reboots on Windows 10 Home ,可以自己查看实现,但是部署使用稍微麻烦了一些
我自己用的是上述闭源的 Reboot Blocker,安装至今约一周,中间 Windows 提示过一次需要重启安装更新,但是在我自己重启之前没有自动重启,大概还是有效果的。一直被 Windows Update 困扰的同学不妨试试此法。