Comment puis-je obtenir les variables d'environnement et si quelque chose manque, définissez la valeur?
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 il peut s'agir de: Machine
, Process
ou User
. Si vous l'omettez, la cible par défaut est le processus en cours .
J'ai rencontré ce problème alors que je travaillais sur une application de console .NET pour lire la variable d'environnement PATH, et j'ai constaté 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 ré-écrits 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 fonctionné à merveille pour moi.
Cela fonctionnera pour une variable d'environnement qui est un paramètre de la machine. Pour les utilisateurs, changez simplement d'utilisateur.
String EnvironmentPath = System.Environment
.GetEnvironmentVariable("Variable_Name", EnvironmentVariableTarget.Machine);
Obtenir et définir
Get
string getEnv = Environment.GetEnvironmentVariable("envVar");
Ensemble
string setEnv = Environment.SetEnvironmentVariable("envvar", varEnv);
Environment.SetEnvironmentVariable("Variable name", value, EnvironmentVariableTarget.User);
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);