C#:没有完全扩展环境变量?

时间:2015-11-11 05:06:04

标签: c# .net windows path environment-variables

如果您转到控制面板>环境变量并查看您的PATH,部分内容如下:

...Toolkit\;%USERPROFILE%\.dnx\bin;C:\Program...

其他环境变量已被嵌入'换句话说,在PATH中。

现在回答我的问题。当我从C#应用程序中调用Environment.GetEnvironmentVariable("PATH")时,它会自动扩展PATH中的变量,以便该段看起来像这样:

...Toolkit\;C:\Users\James\.dnx\bin;C:\Program...

当我的程序修改PATH并通过Environment.SetEnvironmentVariable("PATH", ...)将其保存回来时,将删除子变量,并将%USERPROFILE%替换为{{1} }}

如何防止这种情况发生?

1 个答案:

答案 0 :(得分:2)

PATH变量不应包含环境变量,因为它是REG_SZ注册表值,而不是可扩展的REG_EXPAND_SZ值。

解决方案是不要在PATH值中添加变量,也不要将Environment.ExpandEnvironmentVariables用于PATH变量。

无论如何,我会回答你的问题。

  

如何防止这种情况发生?

只需将“%”字符替换为不可扩展的符号或添加其他符号(如“_”字符),这样就可以确保不扩展变量。

string value =
    Environment.ExpandEnvironmentVariables(
                Environment.GetEnvironmentVariable("Path").Replace("%", "%_"));