C# 是否有其他特殊情况的Windows环境变量,如PATH?

C# 是否有其他特殊情况的Windows环境变量,如PATH?,c#,windows,environment-variables,C#,Windows,Environment Variables,通常在Windows中,系统级环境变量被同名的用户级环境变量取代。然而,PATH环境变量是一种特殊情况。用户级PATH环境变量将附加到系统级环境变量的末尾 考虑到这种特殊情况,我使用以下C#代码来获取流程级环境变量值。请注意,我不能使用EnvironmentVariableTarget.Process选项,因为这不会考虑自应用程序开始运行以来的任何更改 public static Dictionary<string, string> GetEnvironmentVariables()

通常在Windows中,系统级环境变量被同名的用户级环境变量取代。然而,PATH环境变量是一种特殊情况。用户级PATH环境变量将附加到系统级环境变量的末尾

考虑到这种特殊情况,我使用以下C#代码来获取流程级环境变量值。请注意,我不能使用EnvironmentVariableTarget.Process选项,因为这不会考虑自应用程序开始运行以来的任何更改

public static Dictionary<string, string> GetEnvironmentVariables()
{

    var environmentVariables = new Dictionary<string, string>();

    //get machine environment variables
    IDictionary machineEnvironmentVariables = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Machine);
    foreach (DictionaryEntry envVar in machineEnvironmentVariables)
    {
        string key = envVar.Key.ToString()
        environmentVariables[key] = envVar.Value.ToString();
    }

    //overwrite with any user environment variables
    IDictionary userEnvironmentVariables = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.User);
    foreach (DictionaryEntry envVar in userEnvironmentVariables)
    {
        string key = envVar.Key.ToString();
        if (key.ToLower() == "path" && environmentVariables.ContainsKey(key))
            environmentVariables[key] += envVar.Value.ToString();
        else
            environmentVariables[key] = envVar.Value.ToString();
    }
    return environmentVariables;

}
公共静态字典GetEnvironmentVariables()
{
var environmentVariables=新字典();
//获取机器环境变量
IDictionary MachineenEnvironmentVariables=Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Machine);
foreach(machineEnvironmentVariables中的DictionaryEntry环境变量)
{
string key=envVar.key.ToString()
environmentVariables[key]=envVar.Value.ToString();
}
//使用任何用户环境变量覆盖
IDictionary userEnvironmentVariables=Environment.GetEnvironmentVariables(EnvironmentVariableTarget.User);
foreach(userEnvironmentVariables中的DictionaryEntry envVar)
{
string key=envVar.key.ToString();
if(key.ToLower()=“path”&&environmentVariables.ContainsKey(key))
环境变量[key]+=envVar.Value.ToString();
其他的
environmentVariables[key]=envVar.Value.ToString();
}
返回环境变量;
}

我的问题是:是否有其他特殊情况需要考虑?请提供一个支持您答案的文档链接。

我不知道有任何文档。但无论如何,您可能应该P/调用CreateEnvironmentBlock函数,而不是自己尝试重新实现它。我的代码需要在中等信任环境中运行,因此我不能使用P/调用。如果PATH是这样工作的,那么PATHEXT可能也会这样工作。不过,我从没听说过有人改变这个变量