Comment puis-je obtenir des variables d'environnement et si quelque chose manque, définir la valeur?
Comment puis-je obtenir des variables d'environnement et si quelque chose manque, définir la valeur?
Réponses:
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 optionnel Target
est un ENUM de type EnvironmentVariableTarget
et il peut être l' une: Machine
, Process
ou User
. Si vous l'omettez, la cible par défaut est le processus en cours.
EnvironmentVariableTarget.Machine
un accès administrateur?
J'ai rencontré cela en travaillant sur une application console .NET pour lire la variable d'environnement PATH, et j'ai constaté que l'utilisation de System.Environment.GetEnvironmentVariable étend automatiquement les variables d'environnement.
Je ne voulais pas que cela se produise ... cela signifie que les dossiers dans le chemin tels que '% SystemRoot% \ system32' étaient réécrits en tant que 'C: \ Windows \ system32'. Pour obtenir le chemin non développé, j'ai dû utiliser ceci:
string keyName = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment\";
string existingPathFolderVariable = (string)Registry.LocalMachine.OpenSubKey(keyName).GetValue("PATH", "", RegistryValueOptions.DoNotExpandEnvironmentNames);
A fonctionné à merveille pour moi.
Obtenir et définir
Avoir
string getEnv = Environment.GetEnvironmentVariable("envVar");
Ensemble
string setEnv = Environment.SetEnvironmentVariable("envvar", varEnv);
Cela fonctionnera pour une variable d'environnement définie par la machine. Pour les utilisateurs, changez simplement en Utilisateur.
String EnvironmentPath = System.Environment
.GetEnvironmentVariable("Variable_Name", EnvironmentVariableTarget.Machine);
Environment.SetEnvironmentVariable("Variable name", value, EnvironmentVariableTarget.User);
EnvironmentVariableTarget.Machine
place.
Je pourrais être en mesure de mettre à jour la variable d'environnement en utilisant 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);