【问题标题】:PATH environment variable containing other environment variablesPATH 环境变量包含其他环境变量
【发布时间】:2019-05-15 17:27:20
【问题描述】:

我知道我可以通过调用来查询任何环境变量:

System.Environment.GetEnvironmentVariable();

例如,我想要windir 的值,即%SystemRoot%。但是,该函数将其解释为C:\Windows(即SystemRoot 的值)。

通过使用Registry.LocalMachine.OpenSubKey() 查询注册表项,我得到了相同的行为

有没有办法从环境变量而不是它们的路径中获取变量名? (我需要它以便在我使用的 SDK 的多个已安装版本之间轻松切换。)

【问题讨论】:

  • PATH 往往是一个非常混乱的事情,混合了字符串文字和环境 %variable% 名称。您必须 first retrieve 值而不扩展 %variables%。但是如果你得到一个字符串文字,那么你就无法知道可能有一个变量名。

标签: c# environment-variables


【解决方案1】:

%WINDIR%%SYSTEMROOT% 具有相同值的事实纯属巧合。很明显为什么会这样,但它们仍然是自变量。改变一个不会导致另一个被改变。

您必须手动编写一些东西来寻找具有相同值的其他环境变量并替换您想到的任何替换变量,例如%SYSTEMROOT%.

【讨论】:

    【解决方案2】:

    据我所知,唯一的方法是直接从注册表中读取环境变量并指定您不希望它扩展:

    registryKey.GetValue("PATH", "", RegistryValueOptions.DoNotExpandEnvironmentNames);
    

    the docs for RegistryValueOptions

    【讨论】:

    • 是的,这就是我要找的。非常感谢。
    猜你喜欢
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 2012-09-05
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 2013-05-16
    相关资源
    最近更新 更多