web-dev-qa-db-fra.com

Comment obtenir et définir des variables d'environnement en C #?

Comment puis-je obtenir les variables d'environnement et si quelque chose manque, définissez la valeur?

174
Mister Dev

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 .

241

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.

30
Nathan Bedford

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);
13
SpeedyNinja

Obtenir et définir

Get

string getEnv = Environment.GetEnvironmentVariable("envVar");

Ensemble

string setEnv = Environment.SetEnvironmentVariable("envvar", varEnv);
10
Tom Stickel
Environment.SetEnvironmentVariable("Variable name", value, EnvironmentVariableTarget.User);
6
Karthik Chintala

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);
0
Ajit