zoukankan      html  css  js  c++  java
  • .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是一个枚举类型,其所有值解释如下:

    字段
    Machine 2 在 Windows 操作系统注册表的 HKEY_LOCAL_MACHINESystemCurrentControlSetControlSession ManagerEnvironment 项中存储或从其中检索环境变量。 此值应仅用于在 Windows 系统上运行的 .NET 实现。
    Process 0 环境变量存储在与当前进程关联的环境块中,或者从其中检索。
    User 1 在 Windows 操作系统注册表的 HKEY_CURRENT_USEREnvironment 项中存储或从其中检索环境变量。 此值应仅用于在 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参数时,要注意有延迟的问题。

  • 相关阅读:
    BI的相关技术和产品细分(转自娄工)
    SOA系列二:采用SOA的常见失误
    ASP.NET第三方控件网站
    BI名词字典
    VSS2005 添加文件夹方法!
    c#范型编程系列一(非原创)
    数据挖掘项目的生命周期
    SQLServer 2005开发与商业智能培训大纲
    CVSNT配置配置与在ECLIPSE中使用
    JS通用UI框架
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/11201270.html
Copyright © 2011-2022 走看看