如果您转到控制面板>环境变量并查看您的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} }}
如何防止这种情况发生?
答案 0 :(得分:2)
PATH变量不应包含环境变量,因为它是REG_SZ注册表值,而不是可扩展的REG_EXPAND_SZ值。
解决方案是不要在PATH值中添加变量,也不要将Environment.ExpandEnvironmentVariables
用于PATH变量。
无论如何,我会回答你的问题。
如何防止这种情况发生?
只需将“%”字符替换为不可扩展的符号或添加其他符号(如“_”字符),这样就可以确保不扩展变量。
string value =
Environment.ExpandEnvironmentVariables(
Environment.GetEnvironmentVariable("Path").Replace("%", "%_"));