如何以编程方式检索“Program Files”文件夹的实际path?

可能重复:
如何获得Windows Vista 64位上的程序文件(x86)

我意识到用户更改Windows默认的C:\Program Files的几率是相当渺茫,但奇怪的事情发生了!

我怎样才能从系统中获得Program Files的正确path?

.NET为程序文件,我的文档等提供了“ 特殊文件夹 ”的枚举。

从枚举转换为实际路径的代码如下所示:

 Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) 

http://msdn.microsoft.com/en-us/library/14tx8hby.aspx

只是为了增加这一点。

如果你在32位模式下运行(即使在64位操作系统上),SpecialFolder.ProgramFiles和%PROGRAMFILES%将返回..程序文件(x86)。

如果你特别需要一个和/或另一个,那么你需要检查如下:

32位系统:

SpecialFolder.ProgramFiles = ..程序文件\

32位进程中的64位系统: SpecialFolder.ProgramFiles = ..程序文件(x86)\ Environment.GetEnvironmentVariable("ProgramW6432") ProgramW6432 Environment.GetEnvironmentVariable("ProgramW6432") = ..程序文件\

64位系统中的64位系统: SpecialFolder.ProgramFiles = ..Program Files \ Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") = ..程序文件(x86)

显然这取决于你的语言环境等…

您将在Environment类中使用GetFolderPath 。

 try { Environment.GetFolderPath( Environment.SpecialFolder.ProgramFiles ) catch( ArgumentException ex ) { Console.Out.WriteLine( ex.StackTrace ); } 

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)可能是最好的解决方案,但另一个可能的变体是评估ProgramFiles环境变量的值。 为此,可以使用Environment类的GetEnvironmentVariableExpandEnvironmentVariables方法:

 Environment.GetEnvironmentVariable("ProgramFiles") Environment.ExpandEnvironmentVariables("%ProgramFiles%") 

您可以访问名为:%PROGRAMFILES%的环境变量

即:

 %PROGRAMFILES%\Maxis\SimCity 

在C#中:

 System.Environment.SpecialFolder.ProgramFiles 
 Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") ?? Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) 

在64位Windows中获得“程序文件(x86)”,在32位中获得“程序文件”。