Jak mogę uzyskać zmienne środowiskowe i jeśli czegoś brakuje, ustawić wartość?
Jak mogę uzyskać zmienne środowiskowe i jeśli czegoś brakuje, ustawić wartość?
Odpowiedzi:
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 Target
jest enum typu EnvironmentVariableTarget
i może być jednym z: Machine
, Process
, lub User
. Jeśli go pominiesz, domyślnym celem jest bieżący proces.
EnvironmentVariableTarget.Machine
wymaga dostępu administratora?
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.
Pobierz i ustaw
Dostać
string getEnv = Environment.GetEnvironmentVariable("envVar");
Zestaw
string setEnv = Environment.SetEnvironmentVariable("envvar", varEnv);
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);
Environment.SetEnvironmentVariable("Variable name", value, EnvironmentVariableTarget.User);
EnvironmentVariableTarget.Machine
zamiast tego.
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);