我正在嘗試通過執行以下操作將檔案夾添加到我的“路徑”環境變數中:
string path = Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine);
path = path @";C:\my\new\path";
Environment.SetEnvironmentVariable("Path", path, EnvironmentVariableTarget.Machine);
這將我的新檔案夾成功添加到 Path 變數,但是現在擴展了由環境變數表示的任何現有 Path 檔案夾。
例如,我有一個指向 C:\Program Files\Java\jdk-17 的環境變數 JAVA_HOME,而在 Path 變數中,我最初有一個讀取 %JAVA_HOME%\bin 的條目。但是,在執行上述更新后,現在 Path 條目讀取 C:\Program Files\Java\jdk-17\bin。
當我檢查 Environment.GetEnvironmentVariable() 回傳的字串時,我發現它回傳的是已經展開的路徑,而不是 %JAVA_HOME% 占位符。如何更新 Path 變數而不以擴展形式保存現有路徑,而是維護它們的變數名稱?
uj5u.com熱心網友回復:
似乎Environment.GetEnvironmentVariable總是擴展嵌入在其他環境變數中的環境變數,并且沒有改變這種行為的選項。
您可以嘗試從注冊表中讀取環境變數,例如
using System;
using Microsoft.Win32;
class Program
{
static void Main(string[] args)
{
var keyName = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment";
var key = Registry.LocalMachine.OpenSubKey(keyName);
var pathFromRegistry = key.GetValue("Path", "not found", RegistryValueOptions.DoNotExpandEnvironmentNames);
Console.WriteLine(pathFromRegistry);
}
}
我在 .net core 3.1 控制臺應用程式中撰寫了這個示例,它需要Microsoft.Win32.Registrynuget 包才能使用Microsoft.Win32命名空間。
有一個關于為什么不提供相同功能的討論的GitHub 問題Environment.GetEnvironmentVariable。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/355967.html
