@ZERRITO
Пустой ноль

Почему невозможно добавить файл в автозапуск через реестр?

У меня есть код
import winreg
KEY = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'SOFTWARE\Microsoft\Windows\CurrentVersion\Run', winreg.KEY_SET_VALUE)
winreg.SetValueEx(KEY, 'NEWNAME', 0, winreg.REG_NONE, r'C:\Users\Username\Desktop\REG.py')
key.Close()

По идеи, он должен добавить в реестр значение с файлом для автозапуска. Искал примеры в интернете - ничего толкового не нашёл (разве что этот код). В чём проблема: Если на четвёртой строке использовать winreg.REG_BINARY - ошибка TypeError: Objects of type 'str' can not be used as binary registry values. С winreg.REG_NONE то же самое. При попытке использовать winreg.REG_SZ (зачение, которое я видел в самом реестре) - выдаёт ошибку PermissionError: [WinError 5] Access is denied.

Я знаю про папку Startup, но мне интересен именно вариант с реестром.
  • Вопрос задан
  • 209 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Objects of type 'str' can not be used as binary registry values
в переводчик

Если пишете строку - winreg.REG_SZ

Плюс, неправильно передали параметры
KEY = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'SOFTWARE\Microsoft\Windows\CurrentVersion\Run', 0, winreg.KEY_SET_VALUE)

либо
KEY = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'SOFTWARE\Microsoft\Windows\CurrentVersion\Run', access=winreg.KEY_SET_VALUE)


В общем, winreg.KEY_SET_VALUE должен быть установлен для параметра access. Сам метод выглядит так:
winreg.OpenKey(key, sub_key, reserved=0, access=KEY_READ)

А в вашем варианте вы winreg.KEY_SET_VALUE передали в параметр reserved
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
LaRN
@LaRN
Senior Developer
Похоже что у вас нет прав на запись в эту ветку реестра. Если вы это на своей машине делаете, то вот тут можно почитать как получить нужные права.
https://www.outsidethebox.ms/10539/
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы