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.