C#设置环境变量

C#设置环境变量,c#,C#,我正在尝试使用下面的代码修改环境变量 Environment.SetEnvironmentVariable("MyEnv", "True"); 在下一行的同一个程序中,我正在尝试重试它 string myEnv=Environment.GetEnvironmentVariable("MyEnv"); 但是我得到的是环境变量中的旧值,而不是新值。 任何指向这个问题的指针都会有帮助。 在重新启动托管进程之前,使用c#和.Net4.0将无法识别新值,除非将EnvironmentVariableTa

我正在尝试使用下面的代码修改环境变量

Environment.SetEnvironmentVariable("MyEnv", "True");
在下一行的同一个程序中,我正在尝试重试它

string myEnv=Environment.GetEnvironmentVariable("MyEnv");
但是我得到的是环境变量中的旧值,而不是新值。 任何指向这个问题的指针都会有帮助。
在重新启动托管进程之前,使用c#和.Net4.0将无法识别新值,除非将EnvironmentVariableTarget设置为“process”:


当存储这样的环境变量时,它们只在流程运行时存储。如果关闭程序,变量将消失

    static void Main(string[] args)
    {
        string MyEnv = string.Empty;

        MyEnv = Environment.GetEnvironmentVariable("MyEnv");
        Console.WriteLine("MyEnv=" + MyEnv);

        MyEnv = "True";
        Environment.SetEnvironmentVariable("MyEnv", MyEnv);
        MyEnv = Environment.GetEnvironmentVariable("MyEnv");
        Console.WriteLine("MyEnv=" + MyEnv);

        MyEnv = "False";
        Environment.SetEnvironmentVariable("MyEnv", MyEnv);
        MyEnv = Environment.GetEnvironmentVariable("MyEnv");
        Console.WriteLine("MyEnv=" + MyEnv);

        Console.ReadLine();
    }
输出:

MyEnv=
MyEnv=True
MyEnv=False

我无法在LinqPad中复制您的问题。您的程序是否有更多可能导致此问题?您是如何观察
myEnv
变量的?它对我有效,根据上面给定的链接,可能会重复设置环境变量,但如何在下一行中获取新值。您提供的代码在LinqPad中工作(我强烈怀疑它在VS中也工作)。您没有正确地观察结果,或者其他因素影响了结果。您的建议与OP的代码相同(
Process
是两个调用的默认值)-不确定您为什么认为显式指定它有帮助。您是以管理员身份还是以提升的权限运行该流程?如果没有,尝试一下,让我知道会发生什么。如果它在这种情况下工作,您可能希望将requestedExecutionLevel添加到已签名的应用程序清单中。
MyEnv=
MyEnv=True
MyEnv=False