如何在C#中获取和设置环境变量?

时间:2008-10-08 22:43:17

标签: c# .net .net-2.0 environment-variables

如何获取环境变量,如果缺少某些内容,请设置值?

9 个答案:

答案 0 :(得分:229)

使用System.Environment类。

方法

var value = System.Environment.GetEnvironmentVariable(variable [, Target])

System.Environment.SetEnvironmentVariable(variable, value [, Target])

将为您完成这项工作。

可选参数TargetEnvironmentVariableTarget类型的枚举,可以是以下之一:MachineProcessUser。如果省略,则默认目标是当前流程。

答案 1 :(得分:30)

我在使用.NET控制台应用程序时遇到了这个问题来读取PATH环境变量,并发现使用System.Environment.GetEnvironmentVariable会自动扩展环境变量。

我不希望这种情况发生......这意味着路径中的文件夹(例如'%SystemRoot%\ system32')正在被重写为'C:\ Windows \ system32'。为了获得未扩展的路径,我不得不使用它:

string keyName = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment\";
string existingPathFolderVariable = (string)Registry.LocalMachine.OpenSubKey(keyName).GetValue("PATH", "", RegistryValueOptions.DoNotExpandEnvironmentNames);

对我来说就像一个魅力。

答案 2 :(得分:11)

这适用于作为机器设置的环境变量。对于用户,只需更改为用户。

String EnvironmentPath = System.Environment
                .GetEnvironmentVariable("Variable_Name", EnvironmentVariableTarget.Machine);

答案 3 :(得分:7)

获取并设置

获取

string getEnv = Environment.GetEnvironmentVariable("envVar");

设置

string setEnv = Environment.SetEnvironmentVariable("envvar", varEnv);

答案 4 :(得分:6)

Environment.SetEnvironmentVariable("Variable name", value, EnvironmentVariableTarget.User);

答案 5 :(得分:1)

我可以使用以下

更新环境变量
string EnvPath = System.Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine) ?? string.Empty;
if (!string.IsNullOrEmpty(EnvPath) && !EnvPath .EndsWith(";"))
    EnvPath = EnvPath + ';';
EnvPath = EnvPath + @"C:\Test";
Environment.SetEnvironmentVariable("PATH", EnvPath , EnvironmentVariableTarget.Machine);

答案 6 :(得分:0)

如果读取环境变量的目的是覆盖 appsetting.json 或任何其他配置文件中的值,您可以通过 EnvironmentVariablesExtensions 将其存档。

var builder = new ConfigurationBuilder()
                .AddJsonFile("appSettings.json")
                .AddEnvironmentVariables(prefix: "ABC_")

var config = builder.Build();

enter image description here

根据此示例,环境的 Url 是从 appsettings.json 中读取的。但是当 AddEnvironmentVariables(prefix: "ABC_") 行添加到 ConfigurationBuilder 时,值 appsettings.json 将被环境变量值覆盖。

答案 7 :(得分:0)

在 Visual Studio 2019 中——右键单击您的项目,选择“属性”>“设置”,通过为其指定名称(如 ConnectionString)、类型和值来添加新变量。然后在您的代码中阅读它:

var sConnectionStr = Properties.Settings.Default.ConnectionString;

这些变量将存储在配置文件(web.config 或 app.config)中,具体取决于您的项目类型。下面是一个示例:

  <applicationSettings>
    <Testing.Properties.Settings>
      <setting name="ConnectionString" serializeAs="String">
        <value>data source=blah-blah;etc-etc</value>
      </setting>
    </Testing.Properties.Settings>
  </applicationSettings>

答案 8 :(得分:0)

环境变量也可以放置在应用程序的 app.configweb.config 文件中,其名称以百分比为界 (%),然后在代码中展开。

  • 请注意,当环境变量的值发生更改(或设置了新的值)时,应关闭并重新打开 Visual Studio。

例如,在 app.config 中:

<connectionStrings>
    <add name="myConnectionString" connectionString="%DEV_SQL_SERVER_CONNECTION_STRING%" providerName="System.Data.SqlClient" />
</connectionStrings>

然后在代码中:

string connectionStringEnv = ConfigurationManager.AppSettings["myConnectionString"];
string connectionString = System.Environment.ExpandEnvironmentVariables(connectionStringEnv);