更新环境变量 PATH 时是否可能出现竞争条件?这是可以避免的吗?

问题描述 投票:0回答:2

如果在 Windows 上运行的两个或多个应用程序尝试同时将文件夹名称附加到环境变量

PATH
,是否可能会出现竞争条件,导致附加的值之一丢失?

避免这些竞争条件的标准方法是什么?

windows concurrency path environment-variables race-condition
2个回答
2
投票

不,没有这样的危险。每个流程都有其自己的环境。因此他们只会更新自己的 PATH 环境变量副本。当进程终止时,此类更改也不会持久并消失。

对环境进行全局更改需要编写注册表。否则会暴露在控制面板的系统小程序中。此类更改需要注销+登录才能对每个进程生效。


0
投票

我遇到的情况表明,在 Windows 中更新环境变量时很可能出现竞争条件。

这是我到目前为止的推断:

旧变量值:

old_value
一个程序将其设置为新值:
new_value

此后立即启动的其他程序,首先读取变量的值:

old_valuenew_value
(两个值的串联)。过了一会儿,当我再次手动运行另一个程序时,它显示为
new_value

注意事项: 第一个程序是 PowerShell,重新读取我的 PowerShell 配置文件脚本的新版本。

第二个程序是我自己的。

发生这种情况的场景是这样的:

  • 从 PowerShell 执行的 dotfiles 管理程序 chezmoi 更新我的 PowerShell 配置文件脚本
  • PowerShell 执行其配置文件脚本,将环境变量设置为新值
  • chezmoi 然后运行我自己的程序来读取更新的环境变量

因此,在短时间内我得到了意想不到的读数。现在我需要处理这个怪癖并在我的代码中解决它。

© www.soinside.com 2019 - 2024. All rights reserved.