Come posso ottenere e impostare le variabili di ambiente in C #?


Risposte:


258

Utilizzare la classe System.Environment .

I metodi

var value = System.Environment.GetEnvironmentVariable(variable [, Target])

e

System.Environment.SetEnvironmentVariable(variable, value [, Target])

farà il lavoro per te.

Il parametro opzionale Targetè un enum di tipo EnvironmentVariableTargete può essere uno dei seguenti: Machine, Processo User. Se lo ometti, l'obiettivo predefinito è il processo corrente.


37
Si noti inoltre il terzo parametro facoltativo: System.Environment.SetEnvironmentVariable (variabile, valore, EnvironmentVariableTarget ) I valori possibili sono: Machine , Process e User
Lessan Vaezi

1
Non EnvironmentVariableTarget.Machinerichiede l'accesso come amministratore?
checksum

Sì, lo fa. Cercare di eseguirlo senza comporterà un'eccezione evidente.
Erez A. Korn,

30

Mi sono imbattuto in questo mentre lavoravo su un'app console .NET per leggere la variabile di ambiente PATH e ho scoperto che usando System.Environment.GetEnvironmentVariable si espandono automaticamente le variabili di ambiente.

Non volevo che ciò accadesse ... ciò significa che le cartelle nel percorso come '% SystemRoot% \ system32' venivano riscritte come 'C: \ Windows \ system32'. Per ottenere il percorso non espanso, ho dovuto usare questo:

string keyName = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment\";
string existingPathFolderVariable = (string)Registry.LocalMachine.OpenSubKey(keyName).GetValue("PATH", "", RegistryValueOptions.DoNotExpandEnvironmentNames);

Ha funzionato benissimo per me.


7
+1 Ho dovuto usare questa soluzione perché l'altra risposta di Patrick Desjardins mi ha richiesto di avere i privilegi di amministratore. Sono stato in grado di leggere il valore della variabile d'ambiente senza avere i privilegi di amministratore con questa soluzione!
Tono Nam,

@TonoNam La risposta di Patrick funziona nella mia macchina senza privilegi di amministratore. Si noti che l'impostazione della variabile di ambiente di sistema richiede i privilegi di amministratore (ovviamente).
Franklin Yu,

16

Ottieni e imposta

Ottenere

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

Impostato

string setEnv = Environment.SetEnvironmentVariable("envvar", varEnv);

14

Questo funzionerà per una variabile d'ambiente che è l'impostazione della macchina. Per gli utenti, basta passare a Utente.

String EnvironmentPath = System.Environment
                .GetEnvironmentVariable("Variable_Name", EnvironmentVariableTarget.Machine);

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

1
Se invece vuoi che la tua variabile PATH sia permanente, usa EnvironmentVariableTarget.Machineinvece.
Daniel Bonetti,

0

Potrei essere in grado di aggiornare la variabile d'ambiente usando quanto segue

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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.