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.