通过 Python winreg 在注册表中设置 Windows 系统路径

2024-03-08

我编写了一个程序,通过注册表将目录添加到 PATH 变量,HKCU(用户)或 HKLM(系统)路径,具体取决于输入选项。

使用用户路径时效果很好。但是,当设置系统路径时,Windows 会认为路径变量为空,例如

'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)

正如评论中所说,改变REG_SZ to REG_EXPAND_SZ成功了,因为使用“%”的变量未被识别。当不存在“%”时,这也适用,因此我也将它用于用户路径,而不需要在两者之间切换。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 Python winreg 在注册表中设置 Windows 系统路径 的相关文章

随机推荐

  • opencv矩阵存入共享内存

    我想在两个 Linux 进程之间共享一个 CvMat 对象 OpenCV 库中的矩阵 为此我使用共享内存 一个进程 服务器 将从网络摄像头捕获一帧 矩阵 将其转换为灰度 使用共享内存共享它并在屏幕上显示该帧 另一个进程 客户端 将读取共享帧
  • Zend 框架 - Zend_Form 装饰器问题

    我有一个像这样扩展 Zend Form 的类 简化 class Core Form extends Zend Form protected static elementDecorators array ViewHelper Errors a
  • 如何使用 tie() 仅为某些包重定向 STDOUT、STDERR?

    我需要使用一些不幸记录诊断的库 发送至 STDOUT 和 STDERR 的消息 通过使用tie 我可以重定向那些 写入捕获这些的函数 既然我不想要全部 我的程序的 STDOUT 和 STDERR 输出通过 捆绑手柄 我只想对某些包裹执行此操
  • 在 Android 4.4 上使用非默认短信应用程序发送短信

    我可以不使用默认短信应用程序发送短信吗安卓 4 4 奇巧 这意味着 我可以在无法写入短信提供商的情况下发送短信吗 我对 Android 4 4 Kitkat 上的这一点感到困惑 我想知道我是否可以使用非默认短信应用程序发送短信 即使您的应用
  • argparse 参数顺序

    我有一个小问题 I use argparse来解析我的论点 而且效果很好 为了获得参数 我这样做 p args parser parse args argv args dict p args get kwargs 但问题是p args是我不
  • 从前台服务观察LiveData

    我有一个存储库 其中包含 LiveData 对象并由两者使用 通过 ViewModel 的 Activity 和前台服务 当我开始从活动中观察时 一切都按预期进行 但是 从服务中进行观察不会触发观察 这是我使用的代码 class MySer
  • Google 地图 - 如何获取两点之间的距离(以米为单位)?

    我有这些坐标 45 463688 9 18814 46 0438317 9 75936230000002 我需要 我认为是通过 Google API V3 来获取这两点之间的距离 以米为单位 我该怎么做 如果您想使用 v3 谷歌地图 API
  • 如何开始制作 C# RSS 阅读器?

    我想做一个 RSS 阅读器有一段时间了 只是为了好玩 但我完全不知道从哪里开始 我对RSS一无所知 有没有关于 RSS 的好的教程以及如何在应用程序中实现它 不是关于如何制作 RSS 阅读器的教程 那太简单了 See http msdn m
  • 变量名中的美元符号

    我偶然发现了一些像这样的 C 代码 int T S 首先我以为这是某种PHP https en wikipedia org wiki PHP代码或错误粘贴在那里的东西 但它可以很好地编译和运行 在2008年MSVC https en wik
  • Scikit Learn SVC Decision_function 和预测

    我试图理解 Decision function 和 Predict 之间的关系 它们是 SVC 的实例方法 http scikit learn org stable modules generated sklearn svm SVC htm
  • 如何使用新的controllerAs语法和面向对象的控制器在Angular中实现两种方式的绑定?

    我害怕 范围汤 人们将太多的功能挂在 scope 之外 因此 我正在尝试面向 OO 的控制器 新的controllerAs 并在我的控制器中使用 EC5 样式的 getter setter 这很有效 但现在我想以两种方式将指令的范围绑定到控
  • React CSS 模块 - 某些 CSS 未应用(对于 NavLink 组件设置的“活动”类)

    我的CSSactive class尽管 CSS 的其余部分实际上已应用 但似乎并未应用到渲染的组件上 CSS 是使用CSS 模块应用的 自从NavLinkReact router dom 包的组件将类设置为活动类 我在 CSS 文件中选择了
  • 在更改图像资源时在 ImageView 上创建动画

    我只有一个ImageView在我的布局中 当检测到气体事件时 我正在更改其资源 我只想在更改 ImageView 资源时显示动画 我可以用吗ViewFlipper with one图像视图 对于单个图像视图 您可以使用此辅助函数 publi
  • Pandas:如何将某些列移动到行中?

    假设我有df以下 我想合并价格列和价值列 以便所有价格都在一个列中 所有数量都在另一列中 我还想要第三列来确定价格水平 例如 unit1 unit2 and unit3 import numpy as np import pandas as
  • Numpy:ValueError:所需数组的对象深度太小

    我正在尝试将 MATLAB 代码转换为 Python 但我不知道如何将此行导入到 Python YDFA xa p interp1 data 1 data 2 YDFA lam p 1e9 linear 1e 24 现在对于 Python
  • 将文本列表格式化为列

    我正在尝试将字符串值列表输出为 2 列格式 将字符串列表制作为 普通文本 的标准方法是使用字符串连接方法 但是 它只需要 2 个参数 因此我只能使用 n 创建一个列 我认为尝试创建一个循环 只需在列之间添加一个选项卡就可以做到这一点 但逻辑
  • 如何在sbt项目中声明对Scalding的依赖?

    我想弄清楚如何创建一个build sbt为我自己的文件Scalding https github com twitter scalding为基础的项目 烫源结构无build sbt文件 相反 它有project Build scala构建定
  • 无法安装Python和GDAL(DLL加载失败)

    我正在尝试在我的 Windows 7 工作站上安装 GDAL 和 Python Python 版本 2 6 6 Gdal 1 8 视觉 Visual C Studio 2010 Express 我按照以下说明进行操作http ucsb pb
  • 欺骗 IP 地址以使用 Sitecore 8 测试 GEOIP 查找

    我是 Sitecore 的新手 我正在尝试实现以下流程类来覆盖GeoIP用于测试目的的值 我找不到在哪个名称空间Tracker 类位于 请注意 我正在使用站点核心 8托管在本地主机上 Sitecore 博客 sitecorejohn 博客
  • 通过 Python winreg 在注册表中设置 Windows 系统路径

    我编写了一个程序 通过注册表将目录添加到 PATH 变量 HKCU 用户 或 HKLM 系统 路径 具体取决于输入选项 使用用户路径时效果很好 但是 当设置系统路径时 Windows 会认为路径变量为空 例如 notepad is not