Python 获取Windows管理员权限

最近在写一个可以自动更换 hosts 的 python 脚本,但是操作 hosts 需要管理员权限 ,所以就想着要怎么获取。

总结了一下,有三种方法可以获取,下面分别介绍一下。

1. 以管理员运行 cmd

这个方法很简单,也无需多说,右键以管理员运行就可以了,然后在里面运行 python 脚本就有管理员权限了。

2. 用 cmd 脚本获取

假设我要运行的文件是 test.py,则我可以写一个 cmd 脚本,不妨叫做 go.cmd,在里面写入:

@echo off
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d "%~dp0"

start python test.py

保存,与 test.py 放在同一文件夹,双击 go.cmd 运行,会弹出提示,点击“是”就会以管理员运行 test.py 了。

3. 用 python 代码获取

以上两种方法都能用,但是总觉得不够优雅,所以接下来我找到了一种可以直接用 python 代码直接获取管理员权限的方法,可以说是相当优雅了。

以下代码来源:python如果获取windows管理员权限(一)

from __future__ import print_function
import ctypes, sys

def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False
if is_admin():
    # 将要运行的代码加到这里
else:
    if sys.version_info[0] == 3:
        ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
    else:#in python2.x
        ctypes.windll.shell32.ShellExecuteW(None, u"runas", unicode(sys.executable), unicode(__file__), None, 1)

以上代码运行时先判断是否拥有管理员权限,如果没有,则调用那个函数获取权限以后再运行一次代码,所以如果在命令行中运行的话,会再弹出一个小黑框。而且根据原博客,这个不能在 IDE 中运行,但是我没有 IDE ,所以没有进行测试。

4. 不弹出UAC解决方法

有的人可能使用上面的 2 和 3 方法发现不会弹出授权弹框,这可能是因为系统的 UAC 被关掉了,按照以下步骤开启:

  1. win + R,在运行框里输入 msconfig.
  2. 点击 工具,然后点击 更改UAC设置,再点击 右下方的启动.
  3. 将通知调整到 始终通知.

这里也有图文教程:win10系统如何开启UAC

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章