2010-06-01 8 views
3

Я пишу небольшую программу в качестве самообучающегося проекта в Python 3.x. Моя идея заключается в том, чтобы программа разрешала пользователю вводить два поля ввода текста, а затем вставляла вход пользователя в значение двух конкретных разделов реестра.Python - проверка наличия у пользователя прав администратора

Есть ли простой способ проверить, может ли текущий пользователь получить доступ к реестру? Я бы предпочел, чтобы он ясно сказал пользователю, что ему или ей нужны права администратора, чем для программы, чтобы сходить с ума и сбой, потому что он пытается получить доступ к запрещенной зоне.

Хотелось бы, чтобы эта проверка была выполнена сразу после запуска программы, прежде чем пользователю будут предоставлены любые параметры ввода. Какой код нужен для этого?

Редактировать: в случае, если это не очевидно, это касается платформ Windows.

ответ

1

Самый простой способ - это изменить ключ в начале, возможно, на значение заглушки - если это не удается, поймайте ошибку и сообщите пользователю.

+0

В зависимости от ситуации это может колошматить значение существующего ключа, в этом случае вам может понадобиться прочитать его первым, сохранить это значение, попробуйте изменить его, и не забудьте установить его обратно, если это удастся , Все в порядке, пока кто-то не нажимает ctrl-c, или мощность не выходит за последние два шага. Это простое решение со сложными краевыми случаями. – Eloff

6

С pywin32, что-то вроде должно работать ...:

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

if shell.IsUserAnAdmin(): 
    ... 

И да, это кажется pywin32 делает поддержка Python 3.

6

мне нужен простой, Windows/Posix решение для тестирования если пользователь имеет права root/admin для файловой системы без установки стороннего решения. Я понимаю, что есть уязвимости при использовании переменных среды, но они соответствуют моей цели. Возможно, можно расширить этот подход для чтения/записи реестра.

Я тестировал это с помощью Python 2.6/2.7 на WinXP, WinVista и Wine. Если кто-нибудь знает, что это не будет работать на Pyton 3.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) 
+0

Это первый хороший ответ, потому что он фактически проверяет, имеет ли сценарий привилегии администратора вместо проверки учетной записи. – Bluscream

Смежные вопросы