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


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.


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.


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

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

6
Environment.SetEnvironmentVariable("Variable name", value, EnvironmentVariableTarget.User);

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);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.