Skip to main content
  1. Posts/

系统环境变量配置不生效

·823 words·
loading
·
Tech PATH

重启解决99%的问题

非常值得吐槽的是系统环境变量竟然就存储在一个文件里 在powershell里使用命令$env:Path即可查看文件内容 你甚至可以通过命令$env:Path += ";<路径>"来实现对path的增加(并不全局,见下文)

既然是文件,就会有一个很蛋疼的地方 ——对单个软件(或者其他使用path的程序)来说不实时更新

比如说你打开了一个软件,这个软件需要你把某个路径加入path,这样软件才能正确调用

  • 首先你运行软件,发现报错了,显示找不到可执行文件
  • 然后你去搜了一下,发现是某个东西没加进path,软件检索不到
  • 于是你更改了path,但是没有重启软件,再次运行,还是检索不到
  • 这是因为软件启动时已经将path文件读入了,且不会故意再去读
  • 所以重启软件就能解决

但是更为惊喜的是我遇到的情况

  • 众所周知一些软件是可以唤出powershell的,比如我用的github desktop
  • 原本我认为powershell是单独的软件,启动时应该是自行初始化的
  • 但事实是,如果你不重启github desktop,无论你重启多少次powershell,这个powershell就是不更新path,甚至你调用$env:Path方法读取到的内容也没有更新
  • 也就是说,由软件唤起的powershell会继承软件的一部分数据,包括读取到的path
  • $env:Path方法并不是读取全局的path

经过一些调查可以发现 在 Windows 上,环境变量可以在三个作用域内定义:

  • 计算机(或系统)作用域
  • 用户范围
  • 流程范围

Process 作用域包含当前进程或 PowerShell 会话中可用的环境变量。 该变量列表继承自父进程,并由 Machine 和 User 作用域中的变量构造而成。

在 PowerShell 中更改环境变量时,更改仅影响当前会话。 此行为类似于 Windows 命令外壳中的 set 命令和基于 UNIX 的环境中的 setenv 命令的行为。 要更改 Machine 或 User 作用域中的值,必须使用 System.Environment 类的方法。

要更改计算机作用域的变量,还必须拥有相应权限。 如果你尝试在没有足够权限的情况下更改值,该命令将失败并且 PowerShell 将显示错误。

Related

WSL-01 安装WSL和Ubuntu
·774 words·
loading
Tech WSL Ubuntu
WHY WSL?
··459 words·
loading
Tech WSL Ubuntu Clash Linux
如何调试微信中的网页
·1423 words·
loading
Tech Debug
《把自己作为方法》
·6692 words·
loading
Book Book Extract
《工作、消费主义和新穷人》
·37052 words·
loading
Book Book Note
web-07 网站维护
·486 words·
loading
Website Github Obsidian Web