如何在不使用Environment Enum的情况下以编程方式在C#中解析环境变量?

时间:2012-11-07 17:52:33

标签: c# .net windows environment-variables class-library

  

可能重复:
  Expand environment variable for My Documents

我们经常在Windows Xp,7,Vista,Server 2003-2008R2以及未来的Windows版本中的命令提示符中使用%%分隔的环境变量。例如:

%windir%
%systemroot%
%temp%

我需要能够使用C#以编程方式解析这些环境变量。

请不要建议Environmen.SpecialFolder,因为我从上述格式的Web服务获取值,我需要能够以编程方式解析它们并确定这些路径在服务器上的物理位置。我的场景是一个班级图书馆项目,我可能要求/能够使用Server.MapPath

我正在寻找一个内置或自定义的通用方法,它可以帮助我以编程方式解析所有环境变量,并通过命令提示符或Windows资源管理器或运行命令来计算这些变量的本地物理路径!

我在StackOverFlow上看到过与此类似的问题,但找不到任何明显的答案。请注意Environment.Xxxxx Enum无法满足我正在制作的方案。

感谢任何帮助。我正在使用带有C#的.NET 4.0完整框架配置文件。

2 个答案:

答案 0 :(得分:13)

您可以使用System.IO.Path.GetFullPath。例如:

var resolvedPath = Path.GetFullPath("%WINDIR%");

或者,如果您只想扩展字符串中的变量,请使用Environment.ExpandEnvironmentVariables

var expanded = ExpandEnvironmentVariables(
    "This is my %WINDIR% in %SYSTEMROOT%, and temp is %TEMP%")

答案 1 :(得分:8)

Environment.ExpandEnvironmentVariables("%windir%\SomeFolder")