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

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