Bagaimana cara saya mendapatkan dan mengatur variabel Lingkungan di C #?

191

Bagaimana saya bisa mendapatkan variabel Lingkungan dan jika ada sesuatu yang hilang, tetapkan nilainya?

Tuan Dev
sumber

Jawaban:

258

Gunakan kelas System.Environment .

Metode

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

dan

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

akan melakukan pekerjaan untuk Anda.

Parameter opsional Targetadalah enum jenis EnvironmentVariableTargetdan dapat menjadi salah satu dari: Machine, Process, atau User. Jika Anda menghilangkannya, target default adalah proses saat ini.

Patrick Desjardins
sumber
37
Perhatikan juga parameter opsional ketiga: System.Environment.SetEnvironmentVariable (variabel, nilai, EnvironmentVariableTarget ) Nilai yang mungkin adalah: Mesin , Proses , dan Pengguna
Lessan Vaezi
1
Apakah EnvironmentVariableTarget.Machinememerlukan akses Administrator?
checksum
Ya, benar. Mencoba menjalankannya tanpa akan menghasilkan pengecualian yang jelas.
Erez A. Korn
30

Saya mengalami ini ketika bekerja pada aplikasi .NET konsol untuk membaca variabel lingkungan PATH, dan menemukan bahwa menggunakan System.Environment.GetEnvironmentVariable akan memperluas variabel lingkungan secara otomatis.

Saya tidak ingin itu terjadi ... itu berarti folder di jalur seperti '% SystemRoot% \ system32' sedang ditulis ulang sebagai 'C: \ Windows \ system32'. Untuk mendapatkan jalur yang tidak diperluas, saya harus menggunakan ini:

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

Bekerja seperti pesona bagi saya.

Nathan Bedford
sumber
7
+1 Saya harus menggunakan solusi ini karena yang lain dijawab oleh Patrick Desjardins mengharuskan saya untuk memiliki hak admin. Saya bisa membaca nilai variabel lingkungan tanpa memiliki hak admin dengan solusi ini!
Tono Nam
@TonoNam Jawaban Patrick bekerja di mesin saya tanpa hak admin. Perhatikan bahwa pengaturan variabel lingkungan Sistem memang memerlukan hak admin (tentu saja).
Franklin Yu
16

Dapatkan dan Atur

Dapatkan

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

Set

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

Ini akan berfungsi untuk variabel lingkungan yaitu pengaturan mesin. Untuk Pengguna, ganti saja ke Pengguna.

String EnvironmentPath = System.Environment
                .GetEnvironmentVariable("Variable_Name", EnvironmentVariableTarget.Machine);
SpeedyNinja
sumber
6
Environment.SetEnvironmentVariable("Variable name", value, EnvironmentVariableTarget.User);
Karthik Chintala
sumber
1
Jika Anda ingin variabel PATH Anda digunakan secara permanen EnvironmentVariableTarget.Machine.
Daniel Bonetti
0

Saya bisa dapat memperbarui variabel lingkungan dengan menggunakan yang berikut ini

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
sumber