Làm cách nào để nhận và đặt biến môi trường trong C #?


Câu trả lời:


256

Sử dụng lớp System.EnFE .

Các phương pháp

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

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

sẽ làm công việc cho bạn.

Các tham số tùy chọn Targetlà một enum loại EnvironmentVariableTargetvà nó có thể là một trong số: Machine, Process, hoặc User. Nếu bạn bỏ qua nó, mục tiêu mặc định là quy trình hiện tại.


37
Cũng lưu ý các tham số thứ ba tùy chọn: System.Environment.SetEnvironmentVariable (biến, giá trị, EnvironmentVariableTarget ) Có thể giá trị bao gồm: Máy , Quy trìnhtài
Lessan Vaezi

1
EnvironmentVariableTarget.Machineyêu cầu quyền truy cập của Quản trị viên không?
tổng kiểm tra

Vâng, nó làm. Cố gắng chạy nó mà không có kết quả là một ngoại lệ rõ ràng.
Erez A. Korn

30

Tôi đã gặp phải điều này trong khi làm việc trên một ứng dụng bảng điều khiển .NET để đọc biến môi trường PATH và thấy rằng việc sử dụng System.En Môi.GetEn MôiVariable sẽ tự động mở rộng các biến môi trường.

Tôi không muốn điều đó xảy ra ... điều đó có nghĩa là các thư mục trong đường dẫn, chẳng hạn như '% SystemRoot% \ system32' đã được viết lại thành 'C: \ Windows \ system32'. Để có được đường dẫn chưa được mở rộng, tôi đã phải sử dụng:

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

Làm việc như một cơ duyên đối với tôi.


7
+1 Tôi phải sử dụng giải pháp này vì giải pháp khác do Patrick Desjardins trả lời yêu cầu tôi phải có đặc quyền quản trị viên. Tôi đã có thể đọc giá trị của biến môi trường mà không cần có quyền quản trị viên với giải pháp này!
Tono Nam

Câu trả lời của @TonoNam Patrick hoạt động trong máy của tôi mà không có quyền quản trị viên. Lưu ý rằng cài đặt biến môi trường hệ thống không yêu cầu quyền quản trị viên (tất nhiên).
Franklin Yu

16

Nhận và thiết lập

Được

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

Bộ

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

14

Điều này sẽ làm việc cho một biến môi trường là cài đặt máy. Đối với Người dùng, chỉ cần thay đổi thành Người dùng.

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

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

1
EnvironmentVariableTarget.MachineThay vào đó, nếu bạn muốn biến PATH của bạn được sử dụng vĩnh viễn .
Daniel Bonetti

0

Tôi có thể cập nhật biến môi trường bằng cách sử dụng như sau

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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.