Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] Как правильно удалить раздел в реестре Windows? (Python)

Ответить
Настройки темы
Разное - [решено] Как правильно удалить раздел в реестре Windows? (Python)

Новый участник


Сообщения: 3
Благодарности: 1

Профиль | Отправить PM | Цитировать


Всем доброго времени суток!

Пишу небольшой метод для скрипта на Python, который будет удалять все ключи и их значения по заданному "пути" в реестре Windows.

Изначально чтобы решить этот вопрос использовал стандартный модуль Python - winreg, ну и сам метод рекурсивный.
В целом это работает, но например для "пути" реестра: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR
winreg генерирует исключение "[WinError 5] Access denied".

Пытался побороть эту злонапасть запуская скрипт от имени "Администратора", но без результата.
Также заметил интересную особенность, что если открыть тот же Редактор реестра в Windows от имени "Администратора"
и попытаться открыть подключ "Properties", то будет та же ошибка (ниже скриншот):



Это получилось решить только открыв Редактор реестра от имени "Системы" через утилиту PsExec с параметром -s,
но скрипт на Python мне как раз нужен чтобы не делать всё вручную. Поэтому пришла идея в обработчике исключения,
в скрипте Python, запущенного от "Администратора" вызвать PsExec чтобы тот в свою очередь запустил от имени системы команду reg delete.
Кусок кода, который это делает, выглядит так:

Код: Выделить весь код
# Например path это строка: HKLM\SYSTEM\ControlSet001\Enum\USBSTOR\Disk&Ven_bla_bla_bla
path = "delete \"" + path + "\"" + " /f"

psPath = os.getcwd() + "\\PsTools\\PsExec64.exe"

subprocess.call([psPath, "-accepteula", "-s", "C:\\Windows\\System32\\reg.exe", path], stderr=subprocess.PIPE, stdout=subprocess.PIPE)
Этот кусок отрабатывает без ошибок, но удаления не происходит.
Попытка не городить сложностей, а просто запустить сразу через PsExec сам скрипт от имени "Системы", тоже не удалась.

Как лучше всего програмно удалить раздел в реестре Windows, если судя по всему, не хватает прав?
Может кто-то может подсказать, что не так в куске кода выше, почему не происходит удаления?

Заранее спасибо!

Отправлено: 16:13, 22-02-2023

 

Новый участник


Сообщения: 3
Благодарности: 1

Профиль | Отправить PM | Цитировать


P.S. если важно (хотя думаю, что не так и уж), то операционка - Win 10, в других версиях не проверял.

Отправлено: 16:23, 22-02-2023 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Deadooshka


Сообщения: 2490
Благодарности: 678

Профиль | Отправить PM | Цитировать


1. у меня с subprocess.PIPE не выводит в консоль, только без них. В доке на subprocess рекомендуют run вместо call
2. с таким path ошибка, видимо надо его добавить в массив аргументов справа по отдельности ... "delete", "HKLM\\.....", "/f" тогда будет правильная конечная команда.
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:09, 23-02-2023 | #3


Новый участник


Сообщения: 3
Благодарности: 1

Профиль | Отправить PM | Цитировать


Sham, с праздниками Вас, а также большое спасибо за наводку про правильную передачу аргументов и ссыль на доку.
Всё заработало , ещё был момент, что не нужно было оборачивать путь реестра в кавычки, код получился такой (возможно, кому-нибудь он будет полезен в будущем):

Код: Выделить весь код
 
    # Получили путь до текущей рабочей папки и PsTools
    psPath = os.getcwd() + "\\PsTools\\PsExec64.exe"

    # Запустили удаление reg delete от имени Системы
    # Например path это строка: HKLM\SYSTEM\ControlSet001\Enum\USBSTOR\Disk&Ven_bla_bla_bla
    subprocess.run([psPath, "-accepteula", "-s", "C:\\Windows\\System32\\reg.exe", "delete", path, "/f"])
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:35, 23-02-2023 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] Как правильно удалить раздел в реестре Windows? (Python)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Установка - [решено] Как удалить скрытый раздел автоматически созданный при установке Windows 7? Oleg_SK Microsoft Windows 7 16 15-01-2016 21:56
Установка - [решено] Как правильно удалить вторую копию Windows 10 masterchess Microsoft Windows 10 13 22-11-2015 19:28
CMD/BAT - [решено] Как в реестре создать раздел при помощи .bat charon Скриптовые языки администрирования Windows 3 27-02-2012 17:24
Доступ - Не могу удалить раздел в реестре? vizar_ Microsoft Windows Vista 3 27-12-2008 12:51
Как правильно удалить Windows 2000 - ВОПРОС ЧАЙНИКА chukgek Microsoft Windows NT/2000/2003 4 10-07-2006 14:27




 
Переход