系统环境变量配置不生效
重启解决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 将显示错误。
Comment