大家知道怎么在 windows 环境下以管理员模式运行 python 么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
dtfm
V2EX    Python

大家知道怎么在 windows 环境下以管理员模式运行 python 么?

  •  
  •   dtfm 2016-07-03 02:04:22 +08:00 12995 次点击
    这是一个创建于 3396 天前的主题,其中的信息可能已经有所发展或是发生改变。
    是这样,实在看不惯 WIN10 非活动窗口的惨白,就自己些写了个脚本一键修改注册表,使其和前台窗口颜色同步,但需要涉及到注册表 create 操作,需要管理员权限, Google 了半天也没找到怎么执行成功的方法。
    附上代码:
    import winreg
    def regcolorchange():
    key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"SOFTWARE\Microsoft\Windows\DWM")
    #获取前台窗口的注册表颜色值
    regAccentColor=winreg.QueryValueEx(key, "AccentColor")
    #元组内 value 为颜色值, type 为类型
    value=(regAccentColor[0])
    type=(regAccentColor[1])
    #赋给 AccentColorInactive ,修改后台窗口颜色
    winreg.SetValueEx(key,"AccentColorInactive",0,type,value)
    regcolorchange()
    20 条回复    2016-07-03 17:03:29 +08:00
    fy
        1
    fy  
       2016-07-03 02:40:27 +08:00
    你搞个管理员权限 cmd 去执行就好了。
    xupefei
        2
    xupefei  
       2016-07-03 02:50:33 +08:00
    HKCU\SOFTWARE\Microsoft\Windows\DWM 写入并不需要管理员权限。
    如果 py 坚持要管理员权限,你可以直接调用 WIN32 API 。
    emric
        3
    emric  
       2016-07-03 02:54:15 +08:00
    不能用 bat 或者 reg 吗
    dtfm
        4
    dtfm  
    OP
       2016-07-03 03:05:05 +08:00
    @fy 不能啊,还是拒绝我访问啊
    dtfm
        5
    dtfm  
    OP
       2016-07-03 03:05:55 +08:00
    @xupefei 不需要么?难道是我写法上有问题, winreg 这个库不是太熟,抱佛脚看的文档就上了。
    dtfm
        6
    dtfm  
    OP
       2016-07-03 03:06:42 +08:00
    @emric 不会啊,习惯了用 python 写点小玩意,并没有冲动去搞 bat 啊。
    emric
        7
    emric  
       2016-07-03 03:38:30 +08:00

    for /F "skip=1 tokens=1,2,*" %%i IN ('reg query "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\DWM" /v AccentColor') DO set COLOR=%%k
    reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa" /v AccentColorInactive /t REG_DWORD /d %COLOR% /f


    存至 bat ,右键管理员运行
    mxalbert1996
        8
    mxalbert1996  
       2016-07-03 03:51:30 +08:00 via Android
    管理员权限的 cmd 里运行的所有程序都具有管理员权限,如果还不行那就说明不是管理员权限的问题。
    xupefei
        9
    xupefei  
       2016-07-03 05:20:40 +08:00
    Document of _winreg.OpenKey(key, sub_key[, res[, sam]]):

    sam is an integer that specifies an access mask that describes the desired security access for the key. Default is KEY_READ.

    sam 权限不对。

    改正后应该是不需要管理员权限就能用的。
    BMW
        10
    BMW  
       2016-07-03 07:05:26 +08:00 via iPhone
    搞开发的就不应该用 windows 吧
    kindjeff
        11
    kindjeff  
       2016-07-03 10:16:36 +08:00 via iPhone
    用管理员方式打开 cmd 然后在 cmd 里执行不行么
    dtfm
        12
    dtfm  
    OP
       2016-07-03 11:34:43 +08:00
    @emric 虽然不怎么看得懂语法,但我试了下,没有效果啊,注册表没有得到修改。
    ksc010
        13
    ksc010  
       2016-07-03 11:45:03 +08:00
    rem 在 win7 下右击此脚本,然后以管理员身份运行
    rem 需要 把 python.exe 所在的目录加入环境变量

    @echo off
    if not "%1" == "uac" (
    echo 申请 UAC 权限...
    goto GetUAC
    ) else ( goto DO )

    :GetUAC
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo UAC.ShellExecute "%~s0", "uac", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    exit /B

    :DO
    if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
    pushd "%CD%"
    CD /D "%~dp0"


    python.exe %~dp0XXXXX.py
    pause

    XXXXX.py 是脚本名称
    存储为 bat 文件
    双击运行自动弹出 UAC 授权
    emric
        14
    emric  
       2016-07-03 12:00:02 +08:00
    ```
    @echo off
    for /F "skip=1 tokens=1,2,*" %%i IN ('reg query "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\DWM" /v AccentColor') DO set COLOR=%%k
    reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\DWM" /v AccentColorInactive /t REG_DWORD /d %COLOR% /f
    ```
    @dtfm 拿我之前的脚本改的。忘记改第二行的路径了... 这个就没问题了。
    dtfm
        15
    dtfm  
    OP
       2016-07-03 12:09:03 +08:00
    @xupefei 感谢,你这个给了我思路,应该是忘了加上读写权限了,虽然_winreg 是 Python2 时代的语法了。
    这一行应该是这样:
    key = winreg.OpenKeyEx(winreg.HKEY_CURRENT_USER, r"SOFTWARE\Microsoft\Windows\DWM",0,winreg.KEY_ALL_ACCESS)
    dtfm
        16
    dtfm  
    OP
       2016-07-03 15:21:28 +08:00
    @emric 可以这个可以,不过我也用 python 写出来了,之前是 READ 权限,不能写。
    dtfm
        17
    dtfm  
    OP
       2016-07-03 15:22:24 +08:00
    @ksc010 这个是直接向系统申请权限的写法?
    dtfm
        18
    dtfm  
    OP
       2016-07-03 15:23:26 +08:00
    感谢楼上的诸位,已经完全搞定,介绍放在了知乎专栏上: https://zhuanlan.zhihu.com/p/21477137
    下载地址: https://1drv.ms/f/s!AplN36d0zPo8hR8x1KgzdIuyBS7t
    ksc010
        19
    ksc010  
       2016-07-03 16:43:22 +08:00
    @dtfm 是 双击后通过 vbs 脚本申请 UAC 授权 同意后执行 python 脚本 不用对注册表做修改
    somebody
        20
    somebody  
       2016-07-03 17:03:29 +08:00 via Android
    对可执行文件和快捷方式,右键-属性-兼容性-以管理员权限运行
    .py 文件不知道,不过你可以建一个.lnk 快捷方式调 Python
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5146 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 03:54 PVG 11:54 LAX 20:54 JFK 23:54
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86