ฉันจะรับตัวแปร Environnment ได้อย่างไรและหากมีบางอย่างขาดหายไปให้ตั้งค่า
ฉันจะรับตัวแปร Environnment ได้อย่างไรและหากมีบางอย่างขาดหายไปให้ตั้งค่า
คำตอบ:
ใช้คลาสSystem.Environment
ซึ่งวิธีการ
var value = System.Environment.GetEnvironmentVariable(variable [, Target])
และ
System.Environment.SetEnvironmentVariable(variable, value [, Target])
จะทำงานให้คุณ
พารามิเตอร์ตัวเลือกTarget
เป็น enum ประเภทEnvironmentVariableTarget
และมันสามารถเป็นหนึ่งใน: Machine
, หรือProcess
User
หากคุณไม่ระบุเป้าหมายเริ่มต้นคือกระบวนการปัจจุบัน
EnvironmentVariableTarget.Machine
ต้องมีการเข้าถึงผู้ดูแลระบบ?
ฉันพบสิ่งนี้ในขณะที่ทำงานกับ. 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);
ทำงานเหมือนเสน่ห์สำหรับฉัน
รับและตั้งค่า
ได้รับ
string getEnv = Environment.GetEnvironmentVariable("envVar");
ชุด
string setEnv = Environment.SetEnvironmentVariable("envvar", varEnv);
สิ่งนี้จะทำงานกับตัวแปรสภาพแวดล้อมที่เป็นการตั้งค่าเครื่อง สำหรับผู้ใช้เพียงแค่เปลี่ยนเป็นผู้ใช้แทน
String EnvironmentPath = System.Environment
.GetEnvironmentVariable("Variable_Name", EnvironmentVariableTarget.Machine);
Environment.SetEnvironmentVariable("Variable name", value, EnvironmentVariableTarget.User);
EnvironmentVariableTarget.Machine
แทน
ฉันสามารถอัปเดตตัวแปรสภาพแวดล้อมโดยใช้สิ่งต่อไปนี้
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);