[解決済み] PythonスクリプトからUACの昇格を要求する?
2022-10-18 23:10:13
質問
PythonスクリプトをVistaでファイルコピーしたい。通常の
cmd.exe
ウィンドウから実行すると、エラーは発生しませんが、ファイルはコピーされません。もし私が
cmd.exe
を実行し、スクリプトを実行すると、正常に動作します。
ユーザー アカウント制御 (UAC) は通常、多くのファイル システムの動作を阻止するため、これは理にかなっています。
Python スクリプト内から UAC 昇格要求 (「このようなアプリには管理者権限が必要です。よろしいですか? " 」のようなダイアログ) を呼び出す方法はありますか?
それが不可能な場合、私のスクリプトが少なくとも昇格されていないことを検出し、優雅に失敗することができる方法はありますか?
どのように解決するのですか?
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
を第4パラメータで指定します。
ここでの利点はいくつかあります。
-
外部ライブラリは不要です。使用するのは
ctypes
とsys
を標準ライブラリから取得します。 - Python 2 と Python 3 の両方で動作します。
- ファイルリソースの変更、マニフェストファイルの作成は不要です。
- if/else文の下にコードを追加しなければ、コードが二度実行されることはありません。
- 最終行でAPI呼び出しの戻り値を取得し、失敗した場合(code <= 32)にアクションを起こすことができます。返り値の可能性を確認する はこちら .
- 第6パラメータを変更することで、生成されたプロセスの表示方法を変更することができます。
基礎となる ShellExecute 呼び出しのドキュメントは です。 .
関連
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] Pythonでファイル名から拡張子を抽出する
-
[解決済み] Pythonスクリプトのプロファイリングはどのように行うのですか?
-
[解決済み] スクリプトを実行しているPythonのバージョンを確認するにはどうしたらいいですか?
-
[解決済み] [Solved] バッチファイルを自動昇格させ、必要に応じてUACの管理者権限を要求するにはどうすればよいですか?
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] SQLAlchemy: 日付フィールドをフィルタリングする方法は?
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] Pythonによる一対のクロスプロダクト [重複] (英語)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PythonでファイルのMD5チェックサムを計算するには?重複
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] Pythonのインスタンス変数とクラス変数
-
[解決済み] SQLAlchemy: 日付フィールドをフィルタリングする方法は?
-
[解決済み] tensorflowのCPUのみのインストールでダイナミックライブラリ 'cudart64_101.dll' を読み込めなかった
-
[解決済み] Pythonで、ウェブサイトが404か200かを確認するためにurllibをどのように使用しますか?
-
[解決済み] Django filter queryset __in for *every* item in list
-
[解決済み] 新しいpip backtrackingの実行時問題の解決
-
[解決済み] Python の sorted() はどのようなアルゴリズムを使っているのですか?重複
-
[解決済み] Alembicアップグレードスクリプトでインサートやアップデートを実行するにはどうすればよいですか?