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.


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.


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

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

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

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);
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.