Начиная с 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, __file__, None, 1)
Если вы используете Python 2.x, вам следует заменить последнюю строку на:
ctypes.windll.shell32.ShellExecuteW(None, u"runas", unicode(sys.executable), unicode(__file__), None, 1)
Также обратите внимание, что если вы преобразовали свой скрипт Python в исполняемый файл (используя такие инструменты, как py2exe
, cx_freeze
, pyinstaller
), то вам следует заменить четвертый параметр на пустую строку (""
).
Вот некоторые из преимуществ:
- Не требуется никаких внешних библиотек (ни расширение Python для Windows). Используется только
ctypes
из стандартной библиотеки.
- Работает как на Python 2, так и на Python 3.
- Нет необходимости ни изменять файловые ресурсы, ни создавать файл манифеста.
- Если вы не добавите приведенный ниже код в оператор if / else, код никогда не будет выполнен дважды.
- Вы можете легко изменить его, чтобы иметь специальное поведение, если пользователь отклоняет приглашение UAC.
- Вы можете указать аргументы, модифицирующие четвертый параметр.
- Вы можете указать способ отображения, модифицирующий шестой параметр.
Документация для основного вызова ShellExecute: здесь .