繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM