.NETCore程序中,如何获取和设置操作系统环境变量的值有时候我们在.NET Core程序中需要获取和设置操作系统的值。本⽂演⽰如何使⽤和⽅法,来获取和设置操作系统环境变量的值。
⾸先我们使⽤Windowscmd,在Windows系统中创建⼀个环境变量myEnvironmentValue,注意要以管理员⾝份运⾏cmd(Run as administrator),命令如下:
setx myEnvironmentValue "MyValue" /M
该命令在Windows系统中创建⼀个环境变量myEnvironmentValue,并设置其值为"MyValue",注意参数/M指定我们设置的是系统环境变量(不是⽤户环境变量),。
命令运⾏后显⽰"SUCCESS"就说明成功了:
现在我们查看Windows系统的环境变量,可以发现我们刚才通过命令⾏创建的环境变量myEnvironment
Value如下所⽰:
接下来我们新建⼀个.NET Core控制台项⽬,其代码如下所⽰,注意这段代码要求以管理员⾝份运⾏(Run as administrator)Visual Studio:
其中需要注意.GetEnvironmentVariable和Environment.SetEnvironmentVariable⽅法的参数,⽤于指定我们获取和设置的是Windows 操作系统的系统环境变量,EnvironmentVariableTarget是⼀个枚举类型,其所有值解释如下:
字段
Machine 2在 Windows 操作系统注册表的 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment 项中存储或
从其中检索环境变量。 此值应仅⽤于在 Windows 系统上运⾏的 .NET 实现。
Process 0环境变量存储在与当前进程关联的环境块中,或者从其中检索。
User 1
在 Windows 操作系统注册表的 HKEY_CURRENT_USER\Environment 项中存储或从其中检索环境变量。 此值应仅⽤于在 Windows 系统上运⾏的
.NET 实现。可以看到EnvironmentVariableTarget枚举的值Machine和User,仅对Windows操作系统有效,对Linux操作系统不起作⽤。
上⾯代码运⾏的结果如下所⽰:
然后我们再次查看Windows系统的环境变量,可以发现环境变量myEnvironmentValue的值变为"UpdatedValue"了:
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 ");
Console.ReadKey();
}
}}
经测试在ASP.NET Core中,也可以⽤Environment.GetEnvironmentVariable⽅法来获取Windows操作系统中系统环境变量和⽤户环境变量的值。
关于EnvironmentVariableTarget.Process参数writeline输出数值变量
在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参数时,要注意有延迟的问题。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论