C# 在重新启动之前,无法使用GeteVironmentVariable读取对SetEnvrionMemntVariable的更改?

C# 在重新启动之前,无法使用GeteVironmentVariable读取对SetEnvrionMemntVariable的更改?,c#,environment-variables,C#,Environment Variables,envirroment变量用法的新特性 我正在编写项目设置工具,需要跨会话存储一些用户指定的项目目录路径。 有人建议获取/设置环境变量。 因此,我设置了一个带有文本框的Windows窗体来显示路径。 当我加载表单时,它使用GetEvironmentVariable,文本框按预期填充。 但是当我尝试用SetEvironmentVariable更新值时, 文本框为空,在重新启动之前不显示更新的变量 private void button1_Click(object sender, Event

envirroment变量用法的新特性

我正在编写项目设置工具,需要跨会话存储一些用户指定的项目目录路径。 有人建议获取/设置环境变量。 因此,我设置了一个带有文本框的Windows窗体来显示路径。 当我加载表单时,它使用GetEvironmentVariable,文本框按预期填充。 但是当我尝试用SetEvironmentVariable更新值时, 文本框为空,在重新启动之前不显示更新的变量

    private void button1_Click(object sender, EventArgs e)
    {
        Environment.SetEnvironmentVariable("my_project_dir", "C:\path\to\my\project" , EnvironmentVariableTarget.Machine );
        textBox1.Text = Environment.GetEnvironmentVariable("my_project_dir", EnvironmentVariableTarget.Machine);
    }

这是因为您正在将环境变量设置为机器范围的变量。有关更多详细信息,请参阅

环境变量存储或从中检索 HKEY\U LOCAL\U MACHINE\System\CurrentControlSet\Control\Session Manager\Environment在Windows操作系统注册表中输入。 当用户在集合操作中创建环境变量时 操作系统在系统中存储环境变量 注册表,但不在当前进程中。如果本地计算机上有任何用户 机器启动一个新进程,操作系统复制 从注册表到该进程的环境变量

当进程终止时,操作系统将销毁 这一过程中的环境变量。然而,环境 注册表中的变量将一直存在,直到用户将其删除 以编程方式或 通过操作系统工具

重要的是:

当用户在集合操作中创建环境变量时 操作系统在系统中存储环境变量 注册表,但不在当前进程中


您要做的是使用
环境变量target.Process
(这是默认设置,因此您不需要指定任何内容),它将环境变量存储在与当前进程相关联的环境块中。

根据经验丰富的工具编码人员的建议,我选择应用程序设置而不是环境变量。