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

Windows10下Python程序以管理员身份启动后未执行业务代码问题

Windows Python 提权后代码未执行问题修复

问题根因

  • 参数拼接错误:原有代码使用" ".join(sys.argv)拼接命令参数,当脚本路径、Python解释器路径包含空格时,参数会被错误拆分,提权后的Python进程无法识别目标脚本路径,直接报错退出
  • 工作目录偏移:提权后的进程默认工作目录为C:\Windows\System32,使用相对路径生成验证文件时,文件会被写入系统目录而非脚本所在目录,导致误判代码未执行
  • UAC请求未确认:运行时弹出的用户账户控制弹窗如果未点击「是」,提权进程不会启动

修复后完整代码

import ctypes
import sys
import webbrowser
import os

def main():
    # 采用绝对路径生成验证文件,避免工作目录偏移找不到文件
    script_path = os.path.abspath(__file__)
    script_dir = os.path.dirname(script_path)
    test_file = os.path.join(script_dir, "test_success.txt")
    with open(test_file, "w", encoding="utf-8") as f:
        f.write("提权后代码执行成功")
    webbrowser.open('http://google.com')
    # 可选:增加停留逻辑,确认提权进程正常启动
    # input("提权运行成功,按任意键退出")

def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False

if __name__ == "__main__":
    if is_admin():
        main()
    else:
        # 给每个参数包裹双引号,避免空格导致的参数拆分错误
        cli_params = " ".join([f'"{arg}"' for arg in sys.argv])
        # 传入脚本所在目录作为提权进程的工作目录
        ctypes.windll.shell32.ShellExecuteW(
            None,
            "runas",
            sys.executable,
            cli_params,
            os.path.dirname(os.path.abspath(__file__)),
            1
        )

验证说明

  • 运行代码时弹出UAC权限请求必须点击「是」,提权操作才能生效
  • PyCharm控制台不会显示提权后独立进程的打印输出,属于正常现象,直接查看脚本目录下生成的test_success.txt即可验证执行结果
  • 如需排查错误,可在main函数中增加异常捕获逻辑,将错误信息写入绝对路径的日志文件定位问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:42:00