Python写入名称含反斜杠的Windows注册表子项问题
Python写入名称含反斜杠的Windows注册表子项问题
我太懂你这个坑了!之前我也踩过类似的——想用Python给注册表某个键加个值项,结果因为值项名称带反斜杠,被SetValue()当成子键路径拆成了一串嵌套键,完全不是想要的效果。
问题根源其实是用错了API:winreg.SetValue()的作用是创建子键并设置该子键的默认值,所以它会把第二个参数当成子键的层级路径来解析,反斜杠自然就被当作分隔符了。而你真正需要的是在已打开的父键下创建一个名称包含反斜杠的单个值项,这时候得用winreg.SetValueEx(),这个函数才是专门用来设置指定键下具体值项的,它会完整保留值项名称里的特殊字符。
给你改好的代码,顺便补上了必要的sys导入和资源释放逻辑:
import winreg import sys path = ['SOFTWARE', 'Microsoft', 'DirectX', 'UserGpuPreferences'] registry = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER) # 打开目标父键,获取写入权限 key = winreg.OpenKey(registry, '\\'.join(path), 0, winreg.KEY_WRITE) try: # 值项名称直接用sys.executable(带反斜杠也没问题) value_name = sys.executable value_data = 'GpuPreference=2;' # 用SetValueEx创建值项,第三个参数是保留值,传0就行 winreg.SetValueEx(key, value_name, 0, winreg.REG_SZ, value_data) finally: # 务必关闭打开的注册表键,避免资源泄漏 winreg.CloseKey(key)
运行这段代码后,你打开注册表编辑器(regedit)导航到HKEY_CURRENT_USER\SOFTWARE\Microsoft\DirectX\UserGpuPreferences,就能看到名称是Python可执行文件完整路径的REG_SZ值项了,完全符合你的需求,不会再拆成子键树。
备注:内容来源于stack exchange,提问作者tmlen
相关产品推荐
相关产品推荐

