2017年現在、これを実現する簡単な方法は次のとおりです。
import ctypes, sys
def is_admin():
try:
return ctypes.windll.shell32.IsUserAnAdmin()
except:
return False
if is_admin():
# Code of your program here
else:
# Re-run the program with admin rights
ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)
Python 2.xを使用している場合は、次の最終行を置き換える必要があります。
ctypes.windll.shell32.ShellExecuteW(None, u"runas", unicode(sys.executable), unicode(" ".join(sys.argv)), None, 1)
また、あなたが実行可能ファイルにあなたのPythonスクリプトを変換した場合ことに注意してください(のようなツールを使用するにはpy2exe
、cx_freeze
、pyinstaller
)あなたが使用する必要があるsys.argv[1:]
のではなく、sys.argv
第四パラメータで。
ここにはいくつかの利点があります:
- 外部ライブラリは必要ありません。標準ライブラリのみを使用
ctypes
しsys
ます。
- Python 2とPython 3の両方で動作します。
- ファイルリソースを変更したり、マニフェストファイルを作成したりする必要はありません。
- if / elseステートメントの下にコードを追加しない場合、コードが2回実行されることはありません。
- 最後の行でAPI呼び出しの戻り値を取得し、失敗した場合にアクションを実行できます(コード<= 32)。可能な戻り値をここで確認してください。
- 6番目のパラメーターを変更して、生成されたプロセスの表示方法を変更できます。
基本的なShellExecute呼び出しのドキュメントはこちらです。