[英]C#: Not fully expanding environment variables?
如果您转到Control Panel > 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%
被替换为C:\\Users\\James
。
我怎样才能防止这种情况发生?
PATH 变量内部不应包含环境变量,因为它是 REG_SZ 注册表值,而不是可扩展的 REG_EXPAND_SZ 值。
解决方案是不要在 PATH 值中添加变量,也不要将Environment.ExpandEnvironmentVariables
用于 PATH 变量。
反正我会回答你的问题。
我怎样才能防止这种情况发生?
只需将“%”字符替换为不可扩展的符号或添加另一个像“_”字符这样的符号,这样您就可以确保变量不会被扩展。
string value =
Environment.ExpandEnvironmentVariables(
Environment.GetEnvironmentVariable("Path").Replace("%", "%_"));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.