python代码阻止windows更新9999天

查看 65|回复 6
作者:fengyuwuqing   
def set_9999_day_pause():
    """设置 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

字符串, 格式

xfmiao   

这代码是你自己写的?我问你1062错误是什么?
kobe2024   


hrh123 发表于 2025-8-12 16:52
这代码是你自己写的?我问你1062错误是什么?

@fengyuwuqing 你不在线的话问这个问题即时性不是很强还是算了,你上线后直接回答我这个问题吧:你的代码中所有的except: pass是用来干嘛的?
一般来说,开发中pass要么是用来占位,要么是定义抽象接口或基类时定义空方法或空类,又或者是异常处理但不干预。你的代码里看起来是想实现最后的情况?但事实上subprocess.run()默认check=False,也就是不会抛出异常。也就是说,这些except: pass根本不会运行到,因此我比较好奇你写这些try-except的意义是?
fengyuwuqing
OP
  

运行成功了,感谢感谢
fengyuwuqing
OP
  

我小白问下,windows更新很正常吧,电脑漏洞都是通过更新解决,不更新的话,那漏洞就一直存在了。
你这个脚本,实现的目的是什么?收益是什么?
fengyuwuqing
OP
  


hrh123 发表于 2025-8-12 17:21
@fengyuwuqing 你不在线的话问这个问题即时性不是很强还是算了,你上线后直接回答我这个问题吧:你的代码 ...

1. 1062错误是服务尚未启动
2. except:pass 只是异常处理而已,防止报错
fengyuwuqing
OP
  


kobe2024 发表于 2025-8-13 13:43
我小白问下,windows更新很正常吧,电脑漏洞都是通过更新解决,不更新的话,那漏洞就一直存在了。
你这个 ...

在一些场景是不需要更新的
您需要登录后才可以回帖 登录 | 立即注册

返回顶部