简介
Windows 设置里默认只能把更新暂停一小段时间。如果只是想避免它在工作、上课或者打游戏时突然重启,可以通过修改注册表,把 Windows Update 的暂停时间写到很久以后。
这个方法本质上就是修改下面这个注册表路径:
1 | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings |
把更新的开始时间和结束时间写进去,让系统认为更新已经暂停到 100 年后。
需要注意的是,这不是永久禁用 Windows Update。大版本升级、系统修复、组策略、企业或学校设备策略,都可能重新覆盖这些设置。个人电脑临时控制自动更新的话,一般已经够用了。
暂停 Windows 更新
先用管理员权限打开 PowerShell 或 Windows Terminal:
1 | 右键开始菜单 -> 终端(管理员) |
也可以搜索 PowerShell,然后右键选择以管理员身份运行。没有管理员权限的话,修改注册表时一般会提示拒绝访问。
然后直接执行下面这条命令:
1 | $ErrorActionPreference="Stop"; $start=Get-Date; $end=$start.AddYears(100); $p="HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings"; if(!(Test-Path $p)){New-Item -Path $p -Force | Out-Null}; $s=$start.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ"); $e=$end.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ"); $strings=@{"PauseUpdatesStartTime"=$s;"PauseUpdatesExpiryTime"=$e;"PauseFeatureUpdatesStartTime"=$s;"PauseFeatureUpdatesEndTime"=$e;"PauseQualityUpdatesStartTime"=$s;"PauseQualityUpdatesEndTime"=$e}; foreach($k in $strings.Keys){New-ItemProperty -Path $p -Name $k -Value $strings[$k] -PropertyType String -Force | Out-Null}; $dwords=@{"PauseUpdatesActive"=1;"PauseFeatureUpdates"=1;"PauseQualityUpdates"=1}; foreach($k in $dwords.Keys){New-ItemProperty -Path $p -Name $k -Value $dwords[$k] -PropertyType DWord -Force | Out-Null}; Write-Host "已尝试暂停 Windows 更新到:$end" -ForegroundColor Green |
执行成功后会看到类似输出:
1 | 已尝试暂停 Windows 更新到:2126/xx/xx ... |
检查是否生效
建议重启电脑后再查看:
1 | 设置 -> Windows 更新 |
如果页面显示更新已暂停,说明设置已经生效。
不同 Windows 版本的显示方式可能不一样。有些系统不会直接显示 100 年后的日期,但只要注册表里的暂停时间已经写入,通常就可以正常起作用。
恢复 Windows 更新
之后如果想恢复更新,还是用管理员权限打开 PowerShell,然后执行:
1 | $p="HKLM:\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings"; $names="PauseUpdatesStartTime","PauseUpdatesExpiryTime","PauseFeatureUpdatesStartTime","PauseFeatureUpdatesEndTime","PauseQualityUpdatesStartTime","PauseQualityUpdatesEndTime","PauseUpdatesActive","PauseFeatureUpdates","PauseQualityUpdates"; foreach($n in $names){Remove-ItemProperty -Path $p -Name $n -ErrorAction SilentlyContinue}; Write-Host "已清除暂停更新设置" -ForegroundColor Green |
运行后重启电脑,再进入:
1 | 设置 -> Windows 更新 |
手动检查更新即可。
常见问题
拒绝访问
如果提示:
1 | 拒绝访问 |
一般是因为 PowerShell 没有用管理员权限运行。重新以管理员身份打开终端再执行命令即可。
Set-ItemProperty 不支持 Type 参数
如果把命令写成下面这样,可能会报错:
1 | Set-ItemProperty -Path xxx -Name xxx -Value xxx -Type String |
原因是 Set-ItemProperty 没有 -Type 参数。
需要指定注册表值类型时,可以使用:
1 | New-ItemProperty -PropertyType String |
上面的脚本已经使用了这种写法。
相关字段
脚本主要写入这些字段:
1 | PauseUpdatesStartTime |
其中 PauseUpdatesExpiryTime 表示暂停更新的到期时间。脚本把它设置成当前时间往后 100 年。
如果只是想防止 Windows 自动更新打断使用,这个方法比较直接。要更彻底地禁用更新,就需要配合组策略、服务、任务计划程序等方式,不过风险也更高,可能影响安全补丁。