"""设置 9999 天(0x270f)更新暂停 - 使用字符串格式"""
try:
# 核心注册表路径
UX_SETTINGS_PATH = r"SOFTWARE\Microsoft\WindowsUpdate\UX\Settings"
POLICIES_PATH = r"SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate"
# 十六进制值 0x270f = 十进制 9999
PAUSE_DAYS = 0x270f
# 1. 禁用更新服务
try:
# 尝试停止服务(忽略1062错误)
subprocess.run(['sc', 'stop', 'wuauserv'],
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL)
except:
pass
# 确保服务被禁用
subprocess.run(['sc', 'config', 'wuauserv', 'start=', 'disabled'],
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL)
# 2. 计算9999天后的日期 (字符串格式)
future_date = datetime.datetime.now() + datetime.timedelta(days=PAUSE_DAYS)
date_str = future_date.strftime("%Y-%m-%dT%H:%M:%SZ")
# 3. 设置暂停参数 (使用字符串格式)
with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, UX_SETTINGS_PATH, 0,
winreg.KEY_WRITE | winreg.KEY_CREATE_SUB_KEY) as key:
# 设置暂停天数
winreg.SetValueEx(key, "FlightSettingsMaxPauseDays", 0, winreg.REG_DWORD, PAUSE_DAYS)
# 设置暂停截止日期为字符串
winreg.SetValueEx(key, "PauseFeatureUpdatesEndTime", 0, winreg.REG_SZ, date_str)
winreg.SetValueEx(key, "PauseQualityUpdatesEndTime", 0, winreg.REG_SZ, date_str)
winreg.SetValueEx(key, "PauseUpdatesExpiryTime", 0, winreg.REG_SZ, date_str)
# 额外设置以确保暂停生效
winreg.SetValueEx(key, "PauseUpdatesStartTime", 0, winreg.REG_SZ, "2020-01-01")
winreg.SetValueEx(key, "IsPaused", 0, winreg.REG_DWORD, 1)
# 4. 设置更新策略
with winreg.CreateKey(winreg.HKEY_LOCAL_MACHINE, POLICIES_PATH) as key:
winreg.SetValueEx(key, "NoAutoUpdate", 0, winreg.REG_DWORD, 1)
winreg.SetValueEx(key, "DisableOSUpgrade", 0, winreg.REG_DWORD, 1)
winreg.SetValueEx(key, "SetDisablePauseUXAccess", 0, winreg.REG_DWORD, 1)
# 5. 禁用相关任务计划
TASKS = [
r"\Microsoft\Windows\UpdateOrchestrator\Reboot",
r"\Microsoft\Windows\UpdateOrchestrator\USO_UxBroker",
r"\Microsoft\Windows\UpdateOrchestrator\MusUx_UpdateInterval",
r"\Microsoft\Windows\UpdateOrchestrator\Maintenance Install"
]
for task in TASKS:
try:
subprocess.run(['schtasks', '/Change', '/TN', task, '/DISABLE'],
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL)
except:
pass
# 6. 阻止Windows Update Medic服务
try:
subprocess.run(['sc', 'stop', 'WaaSMedicSvc'],
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL)
subprocess.run(['sc', 'config', 'WaaSMedicSvc', 'start=', 'disabled'],
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL)
except:
pass
return True, date_str
except Exception as e:
print(f"操作失败: {e}")
return False, None