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

本文关键字:文件 程序 x86 获取 Windows 64位 C#- | 更新日期: 2023-09-27 17:48:48

我使用的是:

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中。有没有一种方法可以在不使用硬接线"C:''Program Files(x86)"的情况下以编程方式返回到Program Files x86的路径?

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

下面的函数将在所有这三种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");
}

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

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

请注意,ProgramFiles(x86)环境变量只有在应用程序运行64位时才可用。

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

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

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

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

Environment.GetEnvironmentVariable("PROGRAMFILES")

在.NET中使用新方法的一个线性程序。将始终返回x86程序文件文件夹。

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

C#代码:

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)

输出:

C:''Program Files(x86)

注意:

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

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

原因:

默认情况下,对于大多数.NET项目;任何CPU 32位优选的";

当您取消选中32位程序集时,将:

32位进程上的JIT到32位代码

64位进程上的JIT到32位代码