C #-如何获取 Windows64位的程序文件(x86)

我在用:

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

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

在 WindowsXP 和32位版本的 WindowsVista 上,这个工作得很好。但是,在 x64 Windows Vista 上,代码返回 x64 Program Files 文件夹,而应用程序安装在 Program Files x86中。有没有一种方法可以程序化地返回到 Program Files x86的路径,而不需要硬连接“ C: Program Files (x86)”?

154263 次浏览

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

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

但是,请注意,只有当应用程序运行64位时,才能使用 ProgramFiles(x86)环境变量。

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

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

  • 32位视窗
  • 在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");
}
Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") ?? Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)

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

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)

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

Environment.GetEnvironmentVariable("PROGRAMFILES")

使用.NET 中的新方法的一行程序将始终返回 x86 Program Files 文件夹。

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

C # 代码:

Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)

产出:

C: Program Files (x86)程序文件(x86)

注:

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

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

理由:

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

当你取消32位汇编将:

基于32位进程的32位代码 JIT

基于64位进程的32位代码 JIT