Python程序自動以管理員權限運行的實現(xiàn)方法
前言
由于Windows的安全機制,Python寫的腳本缺少了管理員權限,運行就會受到一些限制。
文章介紹Python 腳本自動以管理員權限運行的方法,
也就是如果腳本不是以管理員運行,就自動提升到管理員權限。
核心API函數(shù)
將python提升到管理員權限運行需要調(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: # 以管理員權限重新運行程序 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程序,則應將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: # 以管理員權限重新運行程序 win32api.ShellExecute(None,"runas", sys.executable, __file__, None, 1)
如果是Python 2,將except OSError
這一行改為except IOError
。
本方法優(yōu)點:
- 適用于Python 2和Python 3。
總結
到此這篇關于Python程序自動以管理員權限運行實現(xiàn)的文章就介紹到這了,更多相關Python自動以管理員權限運行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python實現(xiàn)將pvr格式轉(zhuǎn)換成pvr.ccz的方法
這篇文章主要介紹了python實現(xiàn)將pvr格式轉(zhuǎn)換成pvr.ccz的方法,涉及Python實現(xiàn)格式轉(zhuǎn)換的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-04-04Python實現(xiàn)對相同數(shù)據(jù)分箱的小技巧分享
這篇文章主要給大家介紹了關于Python實現(xiàn)對相同數(shù)據(jù)分箱的小技巧,文中通過實例代碼介紹的非常詳細,對大家學習或者使用python具有一定的參考學習價值,需要的朋友可以參考下2022-01-01pandas計數(shù) value_counts()的使用
這篇文章主要介紹了pandas計數(shù) value_counts()的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-06-06