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)文章
python實現(xiàn)將文件夾內(nèi)的每張圖片批量分割成多張
這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)將文件夾內(nèi)的每張圖片批量分割成多張,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07Python 中創(chuàng)建 PostgreSQL 數(shù)據(jù)庫連接池
這篇文章主要介紹了Python 中創(chuàng)建 PostgreSQL 數(shù)據(jù)庫連接池,Python 連接 PostgreSQL 是主要有兩個包, py-postgresql 和 psycopg2 , 而本文的實例將使用后者,感興趣的小伙伴可以參考一下2021-10-10Python OpenCV 圖像區(qū)域輪廓標(biāo)記(框選各種小紙條)
這篇文章主要介紹了Python OpenCV 圖像區(qū)域輪廓標(biāo)記(框選各種小紙條),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Python socket實現(xiàn)的文件下載器功能示例
這篇文章主要介紹了Python socket實現(xiàn)的文件下載器功能,結(jié)合實例形式分析了Python使用socket模塊實現(xiàn)的文件下載器客戶端與服務(wù)器端相關(guān)操作技巧,需要的朋友可以參考下2019-11-11Python抓取移動App數(shù)據(jù)使用mitmweb監(jiān)聽請求與響應(yīng)
這篇文章主要介紹了Python抓取移動App數(shù)據(jù)使用mitmweb監(jiān)聽請求與響應(yīng),mitmproxy控制臺方式、mitmdump與Python對接的方式、mitmweb可視化方式,需要的朋友可以參考一下2022-01-01Python實現(xiàn)Web應(yīng)用國際化i18n的示例詳解
這篇文章主要為大家詳細(xì)介紹了如何基于Python的gettext模塊,實現(xiàn)一個靈活、可擴展的多語言支持系統(tǒng),文中的示例代碼講解詳細(xì),有需要的可以參考下2025-02-02python按鍵按住不放持續(xù)響應(yīng)的實例代碼
今天小編就為大家分享一篇python按鍵按住不放持續(xù)響應(yīng)的實例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07Google開源的Python格式化工具YAPF的安裝和使用教程
Google的開發(fā)者文檔中有一套Python的代碼書寫規(guī)范,而在GitHub上同樣開源了一款名為YAPF的命令行程序用作Python的格式化,下面我們就來看下這款Google開源的Python格式化工具YAPF的安裝和使用教程2016-05-05