You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python在Windows提权设置系统日期仍提示权限不足求助

解决Windows下Python修改系统日期权限不足问题

你的问题核心在于:调用ShellExecuteW只是启动了一个新的管理员权限进程,但当前执行win32api.SetSystemTime的进程还是原来的普通权限进程,所以权限不足的错误依然会出现。

要解决这个问题,需要分两步处理:

  • 先检查当前进程是否已拥有管理员权限
  • 如果没有,以管理员身份重新启动当前脚本并退出原进程;如果已经是管理员,再执行修改系统时间的操作

修正后的代码示例

import sys
import datetime
import ctypes
import win32api

def is_admin():
    try:
        # 检查当前进程是否拥有管理员权限
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False

def setWinDateHour(date):
    now = datetime.datetime.now()
    win32api.SetSystemTime(date.year, date.month, now.weekday(), date.day, now.hour, now.minute, now.second,
                          int(now.microsecond / 1000))

if __name__ == "__main__":
    # 示例:假设要设置的日期是2024年5月20日
    target_date = datetime.date(2024, 5, 20)
    
    if not is_admin():
        # 以管理员身份重新启动当前脚本
        ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)
        sys.exit()  # 退出原普通权限进程
    
    # 已拥有管理员权限,执行修改操作
    setWinDateHour(target_date)
    print("系统日期修改成功")

关键说明

  1. 权限检查:通过IsUserAnAdmin()判断当前进程权限,避免重复触发提权弹窗
  2. 进程重启逻辑:提权启动新进程后,必须用sys.exit()退出原进程,否则原进程会继续执行后续代码(依然是普通权限)
  3. 动态参数传递:如果需要动态设置日期,可以把日期作为命令行参数传入脚本,在__main__块中解析参数后再调用setWinDateHour

内容的提问来源于stack exchange,提问作者Strauss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 02:03:11