Jak uzyskać i ustawić zmienne środowiskowe w języku C #?

Odpowiedzi:

258

Użyj klasy System.Environment .

Metody

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

i

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

wykona za ciebie pracę.

Opcjonalny parametr Targetjest enum typu EnvironmentVariableTargeti może być jednym z: Machine, Process, lub User. Jeśli go pominiesz, domyślnym celem jest bieżący proces.

Patrick Desjardins
źródło
37
Zwróć również uwagę na opcjonalny trzeci parametr: System.Environment.SetEnvironmentVariable (zmienna, wartość, EnvironmentVariableTarget ) Możliwe wartości to: Maszyna , proces i użytkownik
Lessan Vaezi
1
Czy EnvironmentVariableTarget.Machinewymaga dostępu administratora?
suma kontrolna
Tak. Próba uruchomienia go bez spowoduje oczywisty wyjątek.
Erez A. Korn
30

Natknąłem się na to podczas pracy nad aplikacją konsoli .NET, aby odczytać zmienną środowiskową PATH, i stwierdziłem, że użycie System.Environment.GetEnvironmentVariable automatycznie rozszerzy zmienne środowiskowe.

Nie chciałem, żeby tak się stało ... oznacza to, że foldery w ścieżce, takie jak „% SystemRoot% \ system32”, zostały ponownie zapisane jako „C: \ Windows \ system32”. Aby uzyskać nierozwiniętą ścieżkę, musiałem użyć tego:

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

Dla mnie zadziałało jak urok.

Nathan Bedford
źródło
7
+1 Musiałem skorzystać z tego rozwiązania, ponieważ drugi, na który odpowiedział Patrick Desjardins, wymagał ode mnie uprawnień administratora. Dzięki temu rozwiązaniu mogłem odczytać wartość zmiennej środowiskowej bez uprawnień administratora!
Tono Nam
@TonoNam Odpowiedź Patricka działa na moim komputerze bez uprawnień administratora. Należy pamiętać, że ustawienie Systemowej zmiennej środowiskowej wymaga uprawnień administratora (oczywiście).
Franklin Yu
16

Pobierz i ustaw

Dostać

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

Zestaw

string setEnv = Environment.SetEnvironmentVariable("envvar", varEnv);
Tom Stickel
źródło
14

Będzie to działać dla zmiennej środowiskowej, która jest ustawieniem komputera. W przypadku użytkowników wystarczy zmienić na użytkownika.

String EnvironmentPath = System.Environment
                .GetEnvironmentVariable("Variable_Name", EnvironmentVariableTarget.Machine);
SpeedyNinja
źródło
6
Environment.SetEnvironmentVariable("Variable name", value, EnvironmentVariableTarget.User);
Karthik Chintala
źródło
1
Jeśli chcesz, aby zmienna PATH była na stałe używana EnvironmentVariableTarget.Machinezamiast tego.
Daniel Bonetti,
0

Mógłbym być w stanie zaktualizować zmienną środowiskową, korzystając z poniższych

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
źródło