ฉันจะรับและตั้งค่าตัวแปรสภาพแวดล้อมใน C # ได้อย่างไร


คำตอบ:


258

ใช้คลาสSystem.Environment

ซึ่งวิธีการ

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

และ

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

จะทำงานให้คุณ

พารามิเตอร์ตัวเลือกTargetเป็น enum ประเภทEnvironmentVariableTargetและมันสามารถเป็นหนึ่งใน: Machine, หรือProcess Userหากคุณไม่ระบุเป้าหมายเริ่มต้นคือกระบวนการปัจจุบัน


37
นอกจากนี้ยังทราบพารามิเตอร์ที่สามตัวเลือก: System.Environment.SetEnvironmentVariable (ตัวแปรค่าEnvironmentVariableTarget ) ที่เป็นไปได้มีค่า: เครื่อง , กระบวนการและผู้ใช้
Lessan Vaezi

1
ไม่EnvironmentVariableTarget.Machineต้องมีการเข้าถึงผู้ดูแลระบบ?
เช็ค

ใช่แล้ว. การพยายามเรียกใช้โดยไม่ส่งผลให้เกิดข้อยกเว้นที่ชัดเจน
Erez A. Korn

30

ฉันพบสิ่งนี้ในขณะที่ทำงานกับ. NET console app เพื่ออ่านตัวแปรสภาพแวดล้อม PATH และพบว่าการใช้ System.Environment.GetEnvironmentVariable จะขยายตัวแปรสภาพแวดล้อมโดยอัตโนมัติ

ฉันไม่ต้องการให้เกิดขึ้น ... ซึ่งหมายความว่าโฟลเดอร์ในเส้นทางเช่น '% SystemRoot% \ system32' กำลังถูกเขียนใหม่เป็น 'C: \ Windows \ system32' เพื่อให้ได้เส้นทางที่ไม่มีการขยายฉันต้องใช้สิ่งนี้:

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

ทำงานเหมือนเสน่ห์สำหรับฉัน


7
+1 ฉันต้องใช้โซลูชันนี้เพราะอีกโซลูชันหนึ่งที่ Patrick Desjardins ตอบต้องการให้ฉันมีสิทธิ์ระดับผู้ดูแลระบบ ฉันสามารถอ่านค่าของตัวแปรสภาพแวดล้อมโดยไม่ต้องมีสิทธิ์ผู้ดูแลระบบด้วยโซลูชันนี้!
Tono Nam

@TonoNam คำตอบของ Patrick ทำงานในเครื่องของฉันโดยไม่มีสิทธิ์ผู้ดูแลระบบ โปรดทราบว่าการตั้งค่าตัวแปรสภาพแวดล้อมของระบบต้องการสิทธิ์ผู้ดูแลระบบ (แน่นอน)
Franklin Yu

16

รับและตั้งค่า

ได้รับ

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

ชุด

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

14

สิ่งนี้จะทำงานกับตัวแปรสภาพแวดล้อมที่เป็นการตั้งค่าเครื่อง สำหรับผู้ใช้เพียงแค่เปลี่ยนเป็นผู้ใช้แทน

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

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

1
หากคุณต้องการให้ตัวแปร PATH ของคุณใช้งานอย่างถาวรEnvironmentVariableTarget.Machineแทน
Daniel Bonetti

0

ฉันสามารถอัปเดตตัวแปรสภาพแวดล้อมโดยใช้สิ่งต่อไปนี้

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);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.