From 设置 Windows PowerShell 环境变量 https://stackoverflow.com/a/2571200/3416774,我用它作为管理员:
PS D:\>[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\bin", "Machine")
我重新启动 shell 并检查它是否有效:
PS D:\> $env:path.contains("C:\bin")
False
这是为什么?
The 系统.设置环境变量 https://learn.microsoft.com/en-us/dotnet/api/system.environment.setenvironmentvariable?view=net-7.0调用操作保存持久环境的系统注册表项。使用具有相同参数的 GetEnvironmentVariable 的调用应显示它已在持久注册表中设置。但是,您的检查是启动一个新流程。新进程从父进程继承其环境,在从桌面启动命令提示符的情况下,父进程是资源管理器。需要告知资源管理器环境已发生变化。更改环境的系统对话框会广播WM_SETTINGCHANGE https://learn.microsoft.com/en-us/windows/win32/winmsg/wm-settingchange消息来执行此操作。然后资源管理器重新读取持久的注册表项,新进程将使用新的环境变量值启动。
您可能需要广播 WM_SETTINGCHANGE 消息来通知进程更改。然而,当我在 PowerShell 中尝试您的示例(作为管理员)时,它确实有效。所以广播窗口消息应该已经为你完成了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)