如何以编程方式检索"Program Files"文件夹的实际路径?

bra*_*zoo 21 .net c# windows windows-xp program-files

可能重复:
C# - 如何在Windows Vista 64位上获取程序文件(x86)

我意识到用户改变Windows默认值的可能性C:\Program Files相当小,但是发生了奇怪的事情!

如何Program Files从系统中获取正确的路径?

bra*_*zoo 35

.NET 为Program Files,My Documents等提供了" 特殊文件夹 " 的枚举.

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

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
Run Code Online (Sandbox Code Playgroud)

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

  • 如果我没记错的话,有一个问题:它没有区分x64和x86版本的Windows.如果您正在寻找%programfiles(x86)%,则必须找到另一种方法. (5认同)
  • 确实!有一个相关问题涉及x64问题:http://stackoverflow.com/questions/194157/c-how-to-get-program-files-x86-on-vista-x64 (3认同)
  • 在64位操作系统上,这取决于您编译的平台.例如,如果您为AnyCPU或x64编译,这将为您提供C:\ Program Files.如果编译为x86,这将为您提供C:\ Program Files(x86). (3认同)

Joh*_*n B 28

只是为了补充这一点.

如果您在32位模式下运行(即使在64位操作系统上),SpecialFolder.ProgramFiles和%PROGRAMFILES%将返回..Program Files(x86).

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

32位系统:

SpecialFolder.ProgramFiles = ..程序文件

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

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

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


Hup*_*pie 5

您可以在Environment类中使用GetFolderPath.

try {
    Environment.GetFolderPath( Environment.SpecialFolder.ProgramFiles )
catch( ArgumentException ex ) {
    Console.Out.WriteLine( ex.StackTrace );
}
Run Code Online (Sandbox Code Playgroud)