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

191

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

Monsieur Dev
la source

Réponses:

258

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 Targetest un ENUM de type EnvironmentVariableTargetet il peut être l' une: Machine, Processou User. Si vous l'omettez, la cible par défaut est le processus en cours.

Patrick Desjardins
la source
37
Notez également le troisième paramètre facultatif: System.Environment.SetEnvironmentVariable (variable, valeur, EnvironmentVariableTarget ) Les valeurs possibles sont: Machine , Process and User
Lessan Vaezi
1
Nécessite-t-il EnvironmentVariableTarget.Machineun accès administrateur?
somme de contrôle du
Oui. Essayer de l'exécuter sans entraînera une exception évidente.
Erez A. Korn
30

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.

Nathan Bedford
la source
7
+1 J'ai dû utiliser cette solution car l'autre réponse de Patrick Desjardins me demandait d'avoir des privilèges d'administrateur. J'ai pu lire la valeur de la variable d'environnement sans avoir les privilèges d'administrateur avec cette solution!
Tono Nam
La réponse de @TonoNam Patrick fonctionne sur ma machine sans privilèges d'administrateur. Notez que la définition de la variable d'environnement système nécessite des privilèges d'administrateur (bien sûr).
Franklin Yu
16

Obtenir et définir

Avoir

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

Ensemble

string setEnv = Environment.SetEnvironmentVariable("envvar", varEnv);
Tom Stickel
la source
14

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);
SpeedyNinja
la source
6
Environment.SetEnvironmentVariable("Variable name", value, EnvironmentVariableTarget.User);
Karthik Chintala
la source
1
Si vous souhaitez que votre variable PATH soit utilisée de manière permanente à la EnvironmentVariableTarget.Machineplace.
Daniel Bonetti du
0

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);
Ajit
la source