153

我正在使用:

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 中。有没有办法以编程方式返回 Program Files x86 的路径而无需硬连线“C:\Program Files (x86)”?

4

8 回答 8

233

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

  • 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");
}
于 2008-10-11T15:45:38.387 回答
143

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

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
于 2010-12-22T21:58:44.937 回答
42
Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") ?? Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
于 2010-12-14T18:02:52.753 回答
14

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

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

于 2008-10-11T15:19:56.787 回答
9

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

String x86folder = Environment.GetEnvironmentVariable("ProgramFiles(x86)");
于 2008-10-11T14:59:37.013 回答
5

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

Environment.GetEnvironmentVariable("PROGRAMFILES")
于 2011-02-28T09:26:13.713 回答
0

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

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

于 2018-06-13T16:28:53.780 回答
0

C#代码:

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)

输出:

C:\Program 文件 (x86)

笔记:

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

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

原因:

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

当您取消选中 32 位汇编时,将:

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

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

于 2019-12-25T11:59:20.737 回答