2017-02-10 1 views
0

"C:\\"(テスト目的のみ)にzipアーカイブを解凍します。したがって、私は管理者権限が必要なので、現在のユーザーを昇格させて管理者権限を取得しようとしています。Pythonを使用しているユーザー

if __name__ == "__main__": 
    ASADMIN = 'asadmin' 

    if sys.argv[-1] != ASADMIN: 
     script = os.path.abspath(sys.argv[0]) 
     params = ' '.join([script] + sys.argv[1:] + [ASADMIN]) 
     shell.ShellExecuteEx(lpVerb='runas', lpFile=sys.executable, lpParameters=params) 
     main() 

UACからの呼び出しメッセージは、それが必要として来ているが、私は、私はまだ取得していますzipファイルを解凍したい場合、「例外IOError:[errnoが13]アクセス許可が拒否されました」。

私はここで間違っていますか?

答えて

2

新しい権限で同じスクリプトを再実行することが目標のようです。

あなたがやっているやり方は、新しいプロセスでスクリプトをもう一度実行してから、そこに "asadmin"フラグがあることを確認してすぐに終了します。その後、元のプロセス(権限の昇格なし)はmainを実行します。

if __name__ == "__main__": 
    ASADMIN = 'asadmin' 

    if sys.argv[-1] != ASADMIN: 
     script = os.path.abspath(sys.argv[0]) 
     params = ' '.join([script] + sys.argv[1:] + [ASADMIN]) 
     shell.ShellExecuteEx(lpVerb='runas', lpFile=sys.executable, lpParameters=params) 
    else: 
     main() 

また、あなたは権限がチェック行うには良い方法を見つけたいことがあります。それはasadminが設定されている場合にのみ実行されますので、

はおそらくelseブロックにmainへの呼び出しを載せていきたいと思います。このスクリプトをadminとして実行すると、はまだが "asadmin"フラグを設定するために再実行する必要があります。また、通常のユーザーとして実行し、asadminを手動で設定した場合、スクリプトは機能しません。おそらくどこかのAPIがあります。

+0

Hmmあなたのようにコードを変更しましたが、終了コード0のUACの直後にプログラムが終了します。 –

+0

まあ、shell.ShellExecuteExがブロッキング呼び出しであるかどうかわかりません。それがノンブロッキングであれば、元のスクリプトの実行は直ちに終了し、同じスクリプトを持つ新しいプロセスはメインにあるものをすべて実行して別々に実行し続けます。 また、この質問も参照してください:http://stackoverflow.com/questions/130763 – zstewart

関連する問題