欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python程序自動以管理員權(quán)限運行的實現(xiàn)方法

 更新時間:2023年11月13日 10:56:41   作者:碼強01  
Windows上為了安全起見,python語言啟動的應(yīng)用程序默認(rèn)都不會使用admin管理員權(quán)限,但是在有些情況下我們又需要使用管理員權(quán)限啟動應(yīng)用,這篇文章主要給大家介紹了關(guān)于Python程序自動以管理員權(quán)限運行的實現(xiàn)方法,需要的朋友可以參考下

前言

由于Windows的安全機制,Python寫的腳本缺少了管理員權(quán)限,運行就會受到一些限制。

文章介紹Python 腳本自動以管理員權(quán)限運行的方法,

也就是如果腳本不是以管理員運行,就自動提升到管理員權(quán)限。

核心API函數(shù)

將python提升到管理員權(quán)限運行需要調(diào)用ShellExecute這個API函數(shù)。

ShellExecute函數(shù)的用法如下(這里僅作了解 ):

ShellExecute(hWnd,Operation,FileName,Parameters,Directory,ShowCmd)
hWnd: 整數(shù) (指定父窗口句柄,如果沒有可用None代替)
Operation: 字符串 (指定動作, 譬如: open、runas、print、edit、explore、find)
FileName: 字符串 (指定要打開的文件或程序)
Parameters: 字符串 (給要打開的程序指定參數(shù))
Directory: 字符串 (缺省目錄)
ShowCmd: 整數(shù) (程序啟動后的窗口顯示方式,
正常為1、最小化為2、最大化為3)

代碼實現(xiàn)(1)

使用Python自帶的ctypes模塊,調(diào)用API函數(shù)的代碼:

import ctypes, sys

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

if is_admin():
    # 主程序?qū)懺谶@里
else:
    # 以管理員權(quán)限重新運行程序
    ctypes.windll.shell32.ShellExecuteW(None,"runas", sys.executable, __file__, None, 1)

如果是Python 2,把最后一行改成這樣:

ctypes.windll.shell32.ShellExecuteW(None, u"runas", unicode(sys.executable), unicode(__file__), None, 1)

如果使用pyinstaller等庫打包python程序,則應(yīng)將ShellExecuteW的第四個參數(shù)替換為""

另外,在ShellExecuteW的第4個參數(shù)中可加入其他的命令行參數(shù),
在第6個參數(shù)中可指定窗口顯示方式,如最小化(為2)、最大化(為3)等。

本方法優(yōu)點:

  • 不需要外部庫,僅使用自帶的ctypes模塊。
  • 適用于Python 2和Python 3。

本方法缺點:

在命令行窗口(cmd)中運行python時,會另外打開一個命令行窗口,造成輸出的消息一閃而過。

(不過,據(jù)了解這似乎是Windows自身的安全機制造成的,而不是程序的bug,可能是用于防止漏洞)

代碼實現(xiàn)(2)

相比于Python自帶的ctypes庫,win32api庫更加廣為人知、使用方便。

使用pip的安裝方法:pip install pywin32使用win32api模塊的代碼:

import sys, os, win32api

def is_admin():
    # 由于win32api中沒有IsUserAnAdmin函數(shù),所以用了這種方法
    try:
        # 在c:\windows目錄下新建一個文件test01.txt
        testfile=os.path.join(os.getenv("windir"),"test01.txt")
        open(testfile,"w").close()
    except OSError: # 不成功
        return False
    else: # 成功
        os.remove(testfile) # 刪除文件
        return True

print(is_admin())
if is_admin():
    # 主程序?qū)懺谶@里
else:
    # 以管理員權(quán)限重新運行程序
    win32api.ShellExecute(None,"runas", sys.executable, __file__, None, 1)

如果是Python 2,將except OSError這一行改為except IOError。

本方法優(yōu)點:

  • 適用于Python 2和Python 3。

總結(jié)

到此這篇關(guān)于Python程序自動以管理員權(quán)限運行實現(xiàn)的文章就介紹到這了,更多相關(guān)Python自動以管理員權(quán)限運行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論