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.


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.


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

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

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

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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.