C# - 如何在Windows 64位上获取程序文件(x86)

时间:2008-10-11 14:53:13

标签: c# windows file 64-bit

我正在使用:

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

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

在Windows XP和32位版本的Windows Vista上,这可以正常工作。但是,在x64 Windows Vista上,代码返回x64 Program Files文件夹,而应用程序安装在Program Files x86中。有没有办法以编程方式返回程序文件x86的路径而无需硬连线“C:\ Program Files(x86)”?

8 个答案:

答案 0 :(得分:228)

以下函数将返回所有这三种Windows配置中的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");
}

答案 1 :(得分:126)

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

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)

答案 2 :(得分:42)

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

答案 3 :(得分:14)

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

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

答案 4 :(得分:9)

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

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

答案 5 :(得分:5)

我正在编写一个可以在Windows 7的x86和x64平台上运行的应用程序,并且查询下面的变量只需在任何平台上提取正确的程序文件文件夹路径。

Environment.GetEnvironmentVariable("PROGRAMFILES")

答案 6 :(得分:0)

在.NET中使用新方法的单线程。将始终返回x86 Program Files文件夹。

Environment.Is64BitOperatingSystem ? Environment.GetEnvironmentVariable("ProgramFiles(x86)") : Environment.GetEnvironmentVariable("ProgramFiles"))

答案 7 :(得分:0)

C#代码:

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)

输出:

C:\ Program文件(x86)

注意:

我们需要告诉编译器不要使用特定的构建平台。

Go to Visual Studio > Project Properties > Build > Uncheck "Prefer 32 bit"

原因:

  

对于大多数.NET项目,默认情况下是“首选任何32位CPU”

     

取消选中32位程序集时:

     

在32位进程中将JIT转换为32位代码

     

在64位进程中将JIT转换为32位代码