Как правильно удалить раздел в реестре Windows? (Python)
Всем доброго времени суток!
Пишу небольшой метод для скрипта на 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 Попытка не городить сложностей, а просто запустить сразу через PsExec сам скрипт от имени "Системы", тоже не удалась. Как лучше всего програмно удалить раздел в реестре Windows, если судя по всему, не хватает прав? Может кто-то может подсказать, что не так в куске кода выше, почему не происходит удаления? Заранее спасибо! |
P.S. если важно (хотя думаю, что не так и уж), то операционка - Win 10, в других версиях не проверял.
|
1. у меня с subprocess.PIPE не выводит в консоль, только без них. В доке на subprocess рекомендуют run вместо call
2. с таким path ошибка, видимо надо его добавить в массив аргументов справа по отдельности ... "delete", "HKLM\\.....", "/f" тогда будет правильная конечная команда. |
Sham, с праздниками Вас, а также большое спасибо за наводку про правильную передачу аргументов и ссыль на доку.
Всё заработало :), ещё был момент, что не нужно было оборачивать путь реестра в кавычки, код получился такой (возможно, кому-нибудь он будет полезен в будущем): Код:
|
Время: 07:24. |
Время: 07:24.
© OSzone.net 2001-