如果你去控制面板>环境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("%", "%_"));