Come posso ottenere variabili Environnment e se manca qualcosa, impostare il valore?
Come posso ottenere variabili Environnment e se manca qualcosa, impostare il valore?
Risposte:
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 EnvironmentVariableTarget
e può essere uno dei seguenti: Machine
, Process
o User
. Se lo ometti, l'obiettivo predefinito è il processo corrente.
EnvironmentVariableTarget.Machine
richiede l'accesso come amministratore?
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.
Ottieni e imposta
Ottenere
string getEnv = Environment.GetEnvironmentVariable("envVar");
Impostato
string setEnv = Environment.SetEnvironmentVariable("envvar", varEnv);
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);
Environment.SetEnvironmentVariable("Variable name", value, EnvironmentVariableTarget.User);
EnvironmentVariableTarget.Machine
invece.
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);