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
、などのツールを使用) 、4 番目のパラメーターの代わりに をpyinstaller
使用する必要があることに注意してください。sys.argv[1:]
sys.argv
ここでの利点のいくつかは次のとおりです。
- 外部ライブラリは必要ありません。標準ライブラリからのみを使用
ctypes
します。sys
- Python 2 と Python 3 の両方で動作します。
- ファイル リソースを変更したり、マニフェスト ファイルを作成したりする必要はありません。
- if/else ステートメントの下にコードを追加しない場合、コードが 2 回実行されることはありません。
- 最後の行で API 呼び出しの戻り値を取得し、失敗した場合にアクションを実行できます (コード <= 32)。可能な戻り値はこちらで確認してください。
- 6 番目のパラメーターを変更することで、生成されたプロセスの表示方法を変更できます。
基礎となる ShellExecute 呼び出しのドキュメントはこちらです。