JanLevine
22-02-2023, 16:13
Всем доброго времени суток!
Пишу небольшой метод для скрипта на Python, который будет удалять все ключи и их значения по заданному "пути" в реестре Windows.
Изначально чтобы решить этот вопрос использовал стандартный модуль Python - winreg, ну и сам метод рекурсивный.
В целом это работает, но например для "пути" реестра: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR
winreg генерирует исключение "[WinError 5] Access denied".
Пытался побороть эту злонапасть запуская скрипт от имени "Администратора", но без результата.
Также заметил интересную особенность, что если открыть тот же Редактор реестра в Windows от имени "Администратора"
и попытаться открыть подключ "Properties", то будет та же ошибка (ниже скриншот):
https://i.ibb.co/jbkQq9x/regedit.jpg
Это получилось решить только открыв Редактор реестра от имени "Системы" через утилиту 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, если судя по всему, не хватает прав?
Может кто-то может подсказать, что не так в куске кода выше, почему не происходит удаления?
Заранее спасибо!
Пишу небольшой метод для скрипта на Python, который будет удалять все ключи и их значения по заданному "пути" в реестре Windows.
Изначально чтобы решить этот вопрос использовал стандартный модуль Python - winreg, ну и сам метод рекурсивный.
В целом это работает, но например для "пути" реестра: HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR
winreg генерирует исключение "[WinError 5] Access denied".
Пытался побороть эту злонапасть запуская скрипт от имени "Администратора", но без результата.
Также заметил интересную особенность, что если открыть тот же Редактор реестра в Windows от имени "Администратора"
и попытаться открыть подключ "Properties", то будет та же ошибка (ниже скриншот):
https://i.ibb.co/jbkQq9x/regedit.jpg
Это получилось решить только открыв Редактор реестра от имени "Системы" через утилиту 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, если судя по всему, не хватает прав?
Может кто-то может подсказать, что не так в куске кода выше, почему не происходит удаления?
Заранее спасибо!