我编写了一个程序,通过注册表将目录添加到 PATH 变量,HKCU(用户)或 HKLM(系统)路径,具体取决于输入选项。
它在使用用户路径时工作正常。 但是,在为系统设置路径时,Windows 的行为就好像路径变量是空的,例如
'notepad' 未被识别为内部或外部命令....
然而,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)
最佳答案
如评论中所述,将 REG_SZ
更改为 REG_EXPAND_SZ
就可以了,因为使用“%”的变量未被识别。这在不存在“%”时也有效,因此我也将它用于用户路径,而不需要在两者之间切换。
registry.SetValueEx(env_key,"Path",0,registry.REG_EXPAND_SZ,val_string)
关于python - 通过 Python winreg 在注册表中设置 Windows 系统 PATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38516044/