4

私はPython3.xで自己学習プロジェクトとして小さなプログラムを書いています。私の考えは、プログラムがユーザーに2つのテキスト入力フィールドを許可し、ユーザーの入力を2つの特定のレジストリキーの値にプラグインすることです。

現在のユーザーがレジストリにアクセスできるかどうかを確認する簡単な方法はありますか?制限された領域にアクセスしようとしているため、プログラムが混乱してクラッシュするよりも、管理者権限が必要であることをユーザーに明確に伝えたいと思います。

プログラムが起動したらすぐに、ユーザーに入力オプションが与えられる前に、このチェックを実行したいと思います。これにはどのようなコードが必要ですか?

編集:それが明らかでない場合、これはWindowsプラットフォーム用です。

4

4 に答える 4

12

サードパーティのソリューションをインストールせずに、ユーザーがファイルシステムに対するroot / admin権限を持っているかどうかをテストするには、単純なWindows/Posixソリューションが必要でした。環境変数に依存する場合に脆弱性があることは理解していますが、それらは私の目的に適していました。このアプローチを拡張して、レジストリの読み取り/書き込みを行うことができる場合があります。

WinXP、WinVista、WineでPython 2.6/2.7を使用してこれをテストしました。これがPyton3.xおよび/またはWin7で機能しないことを誰かが知っている場合は、アドバイスしてください。ありがとう。

def has_admin():
    import os
    if os.name == 'nt':
        try:
            # only windows users with admin privileges can read the C:\windows\temp
            temp = os.listdir(os.sep.join([os.environ.get('SystemRoot','C:\\windows'),'temp']))
        except:
            return (os.environ['USERNAME'],False)
        else:
            return (os.environ['USERNAME'],True)
    else:
        if 'SUDO_USER' in os.environ and os.geteuid() == 0:
            return (os.environ['SUDO_USER'],True)
        else:
            return (os.environ['USERNAME'],False)
于 2012-05-20T07:43:42.850 に答える
7

pywin32では、次のようなものが機能するはずです...:

import pythoncom
import pywintypes
import win32api
from win32com.shell import shell

if shell.IsUserAnAdmin():
   ...

はい、pywin32はPython3をサポートしているようです。

于 2010-06-01T01:14:42.557 に答える
4

これは、アプリケーションに昇格された特権が必要かどうかを判断する方法に関する短い記事です。

pywin32またはctypesを使用してCreateProcess()呼び出しを行うことができます。

現在Pythonで標準になっているので、ctypesをお勧めします。ここにctypesでCreateProcessを使用する良い例があります。

于 2010-06-01T01:08:10.917 に答える
1

最も簡単な方法は、最初にキーをスタブ値に変更することです。それが失敗した場合は、エラーをキャッチしてユーザーに通知します。

于 2010-06-01T01:08:17.893 に答える