Wie erhalte und setze ich Umgebungsvariablen in C #?

Antworten:

256

Verwenden Sie die System.Environment- Klasse.

Die Methoden

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

und

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

wird den Job für Sie erledigen.

Der optionale Parameter Targetist eine ENUM vom Typ EnvironmentVariableTargetund es kann einer der folgenden sein: Machine, Process, oder User. Wenn Sie es weglassen, ist das Standardziel der aktuelle Prozess.

Patrick Desjardins
quelle
37
Beachten Sie auch den optionalen dritten Parameter: System.Environment.SetEnvironmentVariable (Variable, Wert, EnvironmentVariableTarget ) Mögliche Werte sind: Maschine , Prozess und Benutzer
Lessan Vaezi
1
Benötigt EnvironmentVariableTarget.MachineAdministratorzugriff?
Prüfsumme
Ja tut es. Der Versuch, es ohne auszuführen, führt zu einer offensichtlichen Ausnahme.
Erez A. Korn
30

Ich bin darauf gestoßen, als ich an einer .NET-Konsolen-App gearbeitet habe, um die Umgebungsvariable PATH zu lesen, und habe festgestellt, dass die Verwendung von System.Environment.GetEnvironmentVariable die Umgebungsvariablen automatisch erweitert.

Ich wollte nicht, dass das passiert ... das bedeutet, dass Ordner im Pfad wie '% SystemRoot% \ system32' als 'C: \ Windows \ system32' neu geschrieben wurden. Um den nicht erweiterten Pfad zu erhalten, musste ich Folgendes verwenden:

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

Arbeitete wie ein Zauber für mich.

Nathan Bedford
quelle
7
+1 Ich musste diese Lösung verwenden, da für die andere von Patrick Desjardins beantwortete Lösung Administratorrechte erforderlich waren. Mit dieser Lösung konnte ich den Wert der Umgebungsvariablen lesen, ohne über Administratorrechte zu verfügen!
Tono Nam
@TonoNam Patricks Antwort funktioniert auf meinem Computer ohne Administratorrechte. Beachten Sie, dass für das Festlegen der Systemumgebungsvariablen (natürlich) Administratorrechte erforderlich sind.
Franklin Yu
16

Holen und setzen

Bekommen

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

einstellen

string setEnv = Environment.SetEnvironmentVariable("envvar", varEnv);
Tom Stickel
quelle
14

Dies funktioniert für eine Umgebungsvariable, bei der es sich um eine Maschineneinstellung handelt. Wechseln Sie für Benutzer stattdessen einfach zu Benutzer.

String EnvironmentPath = System.Environment
                .GetEnvironmentVariable("Variable_Name", EnvironmentVariableTarget.Machine);
SpeedyNinja
quelle
6
Environment.SetEnvironmentVariable("Variable name", value, EnvironmentVariableTarget.User);
Karthik Chintala
quelle
1
Wenn Sie möchten, dass Ihre PATH-Variable stattdessen dauerhaft verwendet EnvironmentVariableTarget.Machinewird.
Daniel Bonetti
0

Ich könnte in der Lage sein, die Umgebungsvariable mithilfe der folgenden zu aktualisieren

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