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


Answers:


257

使用System.Environment类。

方法

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

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

将为您完成这项工作。

可选参数Target是类型的枚举EnvironmentVariableTarget,它可以是以下之一:MachineProcess,或User。如果省略它,则默认目标是当前进程。


37
另请注意可选的第三个参数:System.Environment.SetEnvironmentVariable(变量,值,EnvironmentVariableTarget)可能的值为:MachineProcessUser
Lessan Vaezi 2011年

1
是否EnvironmentVariableTarget.Machine需要管理员权限?
校验和

是的,它确实。尝试不运行它会导致明显的异常。
Erez A. Korn 2015年

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);

对我来说就像一个魅力。


7
+1我必须使用此解决方案,因为Patrick Desjardins回答的另一个要求我拥有管理员权限。使用此解决方案,我无需管理员权限即可读取环境变量的值!
Tono Nam

@TonoNam Patrick的答案在我的计算机上有效,没有管理员权限。请注意,设置系统环境变量确实需要管理员权限(当然)。
富兰克林·于

16

获取并设置

得到

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

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

14

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

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

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

1
如果您希望PATH变量是永久性的,请使用EnvironmentVariableTarget.Machine
Daniel Bonetti 2013年

0

我可以通过使用以下命令来更新环境变量

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);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.