C# – 如何获得Windows 64位上的程序文件(x86)

我在用着:

FileInfo( System.Environment.GetFolderPath( System.Environment.SpecialFolder.ProgramFiles) + @"\MyInstalledApp" 

为了确定一个程序是否在用户机器上被检测到(这不是理想的,但我正在寻找的程序是一个MS-DOS应用程序的一个正确的旧kludge,我想不出另一种方法)。

在Windows XP和32位版本的Windows Vista上,这工作正常。 但是,在x64 Windows Vista上,代码将返回x64 Program Files文件夹,而应用程序则安装在Program Files x86中。 有没有一种方法编程方式返回path程序文件x86没有硬接线“C:\ Program Files文件(x86)”?

下面的函数将返回所有这三种Windowsconfiguration中的x86 Program Files目录:

  • 32位Windows
  • 在64位Windows上运行的32位程序
  • 在64位窗口上运行的64位程序
 static string ProgramFilesx86() { if( 8 == IntPtr.Size || (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432")))) { return Environment.GetEnvironmentVariable("ProgramFiles(x86)"); } return Environment.GetEnvironmentVariable("ProgramFiles"); } 

如果您使用.NET 4,则有一个特殊的文件夹枚举ProgramFilesX86 :

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

但请注意, ProgramFiles(x86)环境variables仅在您的应用程序运行64位时才可用。

如果您的应用程序正在运行32位,则可以使用ProgramFiles环境variables,其值实际上是“Program Files(x86)”。

一种方法是查找“ProgramFiles(x86)”环境variables:

 String x86folder = Environment.GetEnvironmentVariable("ProgramFiles(x86)"); 

我正在编写一个应用程序,可以在Windows 7的x86和x64平台上运行,查询下面的variables只需在任何平台上拖动正确的程序文件文件夹path。

 Environment.GetEnvironmentVariable("PROGRAMFILES")