C#:没有完全扩展的环境variables?

如果你去控制面板>环境variables ,看看你的PATH ,会有这样的部分:

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

换句话说,其他环境variables是embedded在PATH中的。

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

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

当我的程序修改PATH并通过Environment.SetEnvironmentVariable("PATH", ...)将其保存回来时, 子variables将被擦除%USERPROFILE%被replace为C:\Users\James

我怎样才能防止这种情况发生?

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

解决方法是不要在PATH值中添加变量,也不要使用Environment.ExpandEnvironmentVariables作为PATH变量。

反正我会回答你的问题。

我怎样才能防止这种情况发生?

简单地用一个不可展开的符号替换“%”字符,或者添加另一个符号如“_”char,这样可以确保变量不被扩展。

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