.NET Core程序中,如何获取和设置操作系统环境变量的值

有时候我们在.NET Core程序中需要获取和设置操作系统环境变量的值。本文演示如何使用Environment.GetEnvironmentVariableEnvironment.SetEnvironmentVariable方法,来获取和设置操作系统环境变量的值。

 

首先我们使用Windows命令行cmd,在Windows系统中创建一个环境变量myEnvironmentValue,注意要以管理员身份运行cmd(Run as administrator),cmd命令如下:

setx myEnvironmentValue "MyValue" /M

该命令在Windows系统中创建一个环境变量myEnvironmentValue,并设置其值为"MyValue",注意参数/M指定我们设置的是系统环境变量(不是用户环境变量),详情可以查看这里

命令运行后显示"SUCCESS"就说明成功了:

 

现在我们查看Windows系统的环境变量,可以发现我们刚才通过命令行创建的环境变量myEnvironmentValue如下所示:

 

接下来我们新建一个.NET Core控制台项目,其代码如下所示,注意这段代码要求以管理员身份运行(Run as administrator)Visual Studio:

using System;

namespace NetCoreEnvironmentVariable
{
    class Program
    {
        static void Main(string[] args)
        {
            string myEnvironmentValue = Environment.GetEnvironmentVariable("myEnvironmentValue", EnvironmentVariableTarget.Machine);//获取操作系统环境变量myEnvironmentValue的值,如果操作系统不存在环境变量myEnvironmentValue,则Environment.GetEnvironmentVariable方法会返回null,注意参数EnvironmentVariableTarget.Machine指定了我们获取的是系统环境变量(不是用户环境变量),注意Environment.GetEnvironmentVariable方法并不需要我们的.NET Core程序要以管理员身份运行(Run as administrator),就能成功取出系统环境变量的值
            Console.WriteLine($"myEnvironmentValue:" + myEnvironmentValue);

            myEnvironmentValue = "UpdatedValue";//环境变量myEnvironmentValue的新值
            Environment.SetEnvironmentVariable("myEnvironmentValue", myEnvironmentValue, EnvironmentVariableTarget.Machine);//设置操作系统环境变量myEnvironmentValue的值,如果操作系统不存在环境变量myEnvironmentValue,那么Environment.SetEnvironmentVariable方法会在操作系统中创建一个名为myEnvironmentValue的环境变量,注意参数EnvironmentVariableTarget.Machine指定了我们设置的是系统环境变量(不是用户环境变量),而这要求我们的.NET Core程序要以管理员身份运行(Run as administrator),否则Environment.SetEnvironmentVariable方法会抛出异常

            myEnvironmentValue = Environment.GetEnvironmentVariable("myEnvironmentValue", EnvironmentVariableTarget.Machine);//再次获取操作系统环境变量myEnvironmentValue的值
            Console.WriteLine($"myEnvironmentValue:" + myEnvironmentValue);

            Console.WriteLine("Press key to end...");
            Console.ReadKey();
        }
    }
}

其中需要注意Environment.GetEnvironmentVariable和Environment.SetEnvironmentVariable方法的EnvironmentVariableTarget参数,用于指定我们获取和设置的是Windows操作系统的系统环境变量,EnvironmentVariableTarget是一个枚举类型,其所有值解释如下:

字段
Machine2在 Windows 操作系统注册表的 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment 项中存储或从其中检索环境变量。 此值应仅用于在 Windows 系统上运行的 .NET 实现。
Process0环境变量存储在与当前进程关联的环境块中,或者从其中检索。
User1在 Windows 操作系统注册表的 HKEY_CURRENT_USER\Environment 项中存储或从其中检索环境变量。 此值应仅用于在 Windows 系统上运行的 .NET 实现。

可以看到EnvironmentVariableTarget枚举的值Machine和User,仅对Windows操作系统有效,对Linux操作系统不起作用。

 

上面代码运行的结果如下所示:

然后我们再次查看Windows系统的环境变量,可以发现环境变量myEnvironmentValue的值变为"UpdatedValue"了:

经测试在ASP.NET Core中,也可以用Environment.GetEnvironmentVariable方法来获取Windows操作系统中系统环境变量和用户环境变量的值。

 

关于EnvironmentVariableTarget.Process参数

在Linux操作系统中,Environment.GetEnvironmentVariable和Environment.SetEnvironmentVariable方法都只对EnvironmentVariableTarget.Process参数有效。当Environment.GetEnvironmentVariable方法使用EnvironmentVariableTarget.Process参数获取环境变量的时候,实际上读取的是当前.NET Core程序进程中的环境变量,而.NET Core程序进程中的环境变量又可以来自于操作系统的环境变量,这个过程可以理解为:

  1. 在操作系统中,添加一个名为myEnvironmentValue的系统环境变量
  2. .NET Core程序将操作系统中的环境变量myEnvironmentValue读取到.NET Core程序进程中
  3. 使用EnvironmentVariableTarget.Process参数的Environment.GetEnvironmentVariable方法,从.NET Core程序进程中读取到环境变量myEnvironmentValue的值

而这个过程的第2步,实际上是有延迟的,所以当你在操作系统中添加了一个环境变量后,发现使用EnvironmentVariableTarget.Process参数的Environment.GetEnvironmentVariable方法,读取不到该环境变量,请重启计算机后再尝试读取,重启计算机会使得.NET Core程序进程读取操作系统中的环境变量,所以在使用EnvironmentVariableTarget.Process参数时,要注意有延迟的问题。

 

转载于:https://www.cnblogs.com/OpenCoder/p/11201270.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值