Comment obtenir et définir des variables d'environnement en C #?
-
06-07-2019 - |
Question
Comment puis-je obtenir les variables d'environnement et si quelque chose manque, définissez la valeur?
La solution
Utilisez la classe System.Environment .
Les méthodes
var value = System.Environment.GetEnvironmentVariable(variable [, Target])
et
System.Environment.SetEnvironmentVariable(variable, value [, Target])
fera le travail pour vous.
Le paramètre facultatif Target
est une énumération de type EnvironmentVariableTarget
et peut être l'un des éléments suivants: Machine
, Process
ou Utilisateur
. Si vous l'omettez, la cible par défaut est le processus en cours.
Autres conseils
J'ai rencontré ce problème alors que je travaillais sur une application de console .NET pour lire la variable d'environnement PATH et que l'utilisation de System.Environment.GetEnvironmentVariable développait automatiquement les variables d'environnement.
Je ne voulais pas que cela se produise ... cela signifie que les dossiers du chemin tels que "% SystemRoot% \ system32" étaient en cours de réécriture en tant que "C: \ Windows \ system32". Pour obtenir le chemin non étendu, je devais utiliser ceci:
string keyName = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment\";
string existingPathFolderVariable = (string)Registry.LocalMachine.OpenSubKey(keyName).GetValue("PATH", "", RegistryValueOptions.DoNotExpandEnvironmentNames);
A travaillé comme un charme pour moi.
Ceci fonctionnera pour une variable d’environnement qui est un réglage de la machine. Pour les utilisateurs, changez simplement d'utilisateur.
String EnvironmentPath = System.Environment
.GetEnvironmentVariable("Variable_Name", EnvironmentVariableTarget.Machine);
Obtenir et définir
Obtenir
string getEnv = Environment.GetEnvironmentVariable("envVar");
Définir
string setEnv = Environment.SetEnvironmentVariable("envvar", varEnv);
Environment.SetEnvironmentVariable("Variable name", value, EnvironmentVariableTarget.User);
Je pourrais pouvoir mettre à jour la variable d'environnement à l'aide de ce qui suit
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);