通过pythonwinreg在注册表中设置windows系统路径

2024-06-01 05:14:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个程序,通过注册表将目录添加到PATH变量中,根据输入选项,可以是HKCU(用户)或hkl(系统)路径。在

使用用户路径时效果良好。 但是,在为系统设置路径时,Windows的行为就好像path变量是空的,例如

'notepad' is not recognized as an internal or external command....

但是,echo %path%会正确地打印出所有内容,没有任何语法错误。类似地,如果我在系统属性GUI中查看变量,它会相应地显示我的完整路径,例如

%SystemRoot%\system32;%SystemRoot%;

现在,如果我在GUI中手动打开这个变量,并添加或删除后面的分号(即进行一个明显但似乎不相关的更改),那么路径似乎可以正常工作。在

是的,我正在打开一个新的命令窗口来检查路径。重启机器似乎也没什么用。在

有什么想法吗?在

代码摘录如下:

import _winreg as registry

#HKEY_LOCAL_MACHINE\
SYS_ENV_SUBPATH = r"SYSTEM\CurrentControlSet\Control\Session Manager\Environment"

#HKEY_CURRENT_USER\
USR_ENV_SUBPATH = r"Environment"

def update_reg_path_value(paths_to_add,privilege):
    env_key = open_env_registry_key(privilege)
    current_path = get_path_from_registry_or_create(env_key)
    val_string = create_new_path_value(current_path, paths_to_add)
    registry.SetValueEx(env_key,"Path",0,registry.REG_SZ,val_string)


def open_env_registry_key(privilege):
    if privilege == 'system':
        return registry.OpenKey(registry.HKEY_LOCAL_MACHINE,SYS_ENV_SUBPATH,
                            0,registry.KEY_ALL_ACCESS)
    return registry.OpenKey(registry.HKEY_CURRENT_USER,USR_ENV_SUBPATH,
                        0,registry.KEY_ALL_ACCESS)

Tags: orpathkey用户路径envlocal系统
1条回答
网友
1楼 · 发布于 2024-06-01 05:14:28

在注释中,将REG_SZ改为REG_EXPAND_SZ起了作用,因为使用“%”的变量无法识别。这在不存在“%”的情况下也有效,因此我也将其用于用户路径,而不需要在两者之间切换。在

registry.SetValueEx(env_key,"Path",0,registry.REG_EXPAND_SZ,val_string)

相关问题 更多 >