Если Python winreg библиотека просто оборачивает соответствующие Windows API, то вам нужно открыть каждый компонент ключа . Вы не можете сказать:
winreg.OpenKey(winreg::HKEY_LOCAL_MACHINE, "FOO\\BAR")
Вместо этого сначала нужно открыть FOO, а затем открыть BAR:
foo_key = winreg.OpenKey(winreg::HKEY_LOCAL_MACHINE, "FOO")
bar_key = winreg.OpenKey(foo_key, "BAR")
Это, вероятно, root вашей проблемы.
Но тут может быть что-то еще. После внесения такого изменения вы должны передать WM_SETTINGCHANGE , чтобы другие процессы (например, оболочка) знали, как сделать недействительными свои кэши и перечитать системные настройки. Вероятно, командлет PowerShell делает это автоматически.
Могут быть и другие проблемы. Например, если вы используете 32-битный Python в 64-битной ОС, вы можете столкнуться с перенаправлением реестра, в зависимости от того, к каким именно частям улья вы пытаетесь получить доступ.
Чтобы уточнить, что вы называете "постоянными значениями пути", является частью системных переменных среды . Если у вас есть права (например, от имени администратора), вы правы в том, что вы можете изменить путь из блока системной среды по этим ключам.
Система объединяет переменные пользовательской среды с переменными системной среды. Если PATH определен в обеих средах, конечный PATH - это конкатенация системных значений, за которыми следуют пользовательские значения. Для других переменных с системным и пользовательским определением (например, TMP) используются пользовательские значения.
Дочерние процессы наследуют копию среды своего родительского процесса. Таким образом, даже с трансляцией WM_SETTINGCHANGE они, вероятно, не обновят свой путь, чтобы отразить изменения, которые вы внесли в блок системной среды.