如何通过Python脚本临时暂停Windows更新触发的系统自动重启?
可行实现方案
方案1:调用Windows内置ShutdownBlockReasonCreateAPI(推荐,无系统级修改)
这是Windows官方提供的专门用于阻止系统意外重启的接口,不需要修改系统更新配置,仅需向系统声明当前有正在运行的关键任务,即可拦截更新触发的自动重启,兼容Windows 7及以上所有系统版本,无需管理员权限,完美适配Jupyter运行环境。
可直接在Jupyter Notebook的Cell中运行以下Python代码实现:
import ctypes from ctypes import wintypes # 加载系统库 user32 = ctypes.WinDLL('user32', use_last_error=True) # 定义函数参数规范 user32.ShutdownBlockReasonCreate.argtypes = [wintypes.HWND, wintypes.LPCWSTR] user32.ShutdownBlockReasonCreate.restype = wintypes.BOOL user32.ShutdownBlockReasonDestroy.argtypes = [wintypes.HWND] user32.ShutdownBlockReasonDestroy.restype = wintypes.BOOL # 注册重启阻止规则 block_reason = "长期计算任务正在执行,禁止系统自动重启" block_success = user32.ShutdownBlockReasonCreate(0, block_reason) if block_success: print("已成功拦截系统自动更新重启")
任务运行结束后执行以下代码解除阻止即可:
user32.ShutdownBlockReasonDestroy(0)
方案2:临时修改注册表暂停更新(适合需要完全禁用更新检查的场景)
如果需要彻底禁止更新触发的所有操作,可以临时修改Windows更新相关注册表项,该操作需要以管理员权限启动Jupyter Notebook才可以执行:
import winreg import datetime try: # 打开Windows更新配置注册表项 update_key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Microsoft\WindowsUpdate\UX\Settings", 0, winreg.KEY_WRITE) # 设置暂停更新至35天后(Windows支持的最长单次暂停时长) pause_deadline = datetime.datetime.now() + datetime.timedelta(days=35) winreg.SetValueEx(update_key, "PauseUpdatesExpiryTime", 0, winreg.REG_SZ, pause_deadline.isoformat() + "Z") winreg.SetValueEx(update_key, "PauseFeatureUpdates", 0, winreg.REG_DWORD, 1) winreg.SetValueEx(update_key, "PauseQualityUpdates", 0, winreg.REG_DWORD, 1) winreg.CloseKey(update_key) print("已临时暂停Windows更新35天") except PermissionError: print("操作失败,请右键选择「以管理员身份运行」启动Jupyter Notebook后重试")
任务结束后删除对应注册表项即可恢复自动更新。
Jupyter环境特殊注意事项
- 无需额外安装第三方依赖,上述方案用到的ctypes、winreg均为Python标准库,虚拟环境中也可正常调用
- 若使用管理员权限操作,仅需右键以管理员身份启动Jupyter服务即可,Notebook运行逻辑不需要额外修改
- 建议将阻止重启的代码放在任务执行逻辑的最开头,在finally代码块中添加解除阻止/恢复更新的逻辑,避免程序异常退出后长期占用系统限制
内容的提问来源于stack exchange,提问作者Gerben Beintema
相关产品推荐
相关产品推荐

