首页 文章

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

提问于
浏览
148

我正在使用:

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)”?

7 回答

  • 5

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

    Environment.GetEnvironmentVariable("PROGRAMFILES")
    
  • 42

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

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

  • 9

    以下函数将返回所有这三种Windows配置中的x86 Program Files 目录:

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

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

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

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

    如果您的应用程序运行32位,则可以使用 ProgramFiles 环境变量,其值实际上为"Program Files (x86)" .

  • 14

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

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

相关问题