【问题标题】:Navigating Program Files for either x64 or x32 [duplicate]导航 x64 或 x32 的程序文件 [重复]
【发布时间】:2012-03-12 21:44:24
【问题描述】:

可能重复:
C# - How to get Program Files (x86) on Vista x64

在 C# 中处理计算机是否为 64 位的最佳方式是什么? 目前我在 C# 中执行以下操作:

bool is64bit = false;

在main方法内:

if (Directory.Exists("C:\\Program Files (x86)"))
{
    is64bit = true;
}

有没有更好的方法来处理程序文件呢?稍后当我调用默认安装在 Program Files 中的进程时,除了查看它是否存在之外,还有其他我可以使用的快捷方式吗?

【问题讨论】:

  • 非常接近;我想我忽略了上面写着 Vista 的所有内容:P

标签: c#


【解决方案1】:

只需使用%ProgramFiles% 环境变量。

如果在 64 位系统上运行,取决于您的应用程序是在 32 位还是 64 位模式下运行,它将适当地返回 C:\Program Files (x86)C:\Program Files(假设用户没有改变了位置)。

【讨论】:

  • 我之前一直在寻找类似的东西,我的问题是我也可以用它来编译文件路径吗?
  • @Falcon165o - 你可以......如果我是你,我只会使用 Environment.GetFolderPath( Environment.SpecialFolder.CommonProgramFiles )。
  • @Ramhoud - 非常感谢
【解决方案2】:

查看此链接:http://msdn.microsoft.com/en-us/library/system.environment.aspx

您可以使用这行代码以编程方式确定操作系统是否为 64 位:

bool Is64Bit = System.Environment.Is64BitOperatingSystem;

【讨论】:

  • 您只是将一个 bool 变量替换为另一个 - 毫无意义。只需使用 System.Environment.Is64BitOperatingSystem。
  • 我认为他是在演示该属性的用法。没有错。
【解决方案3】:

试试这个:

public static bool IsX64()
        {
            if (8 == IntPtr.Size
                || (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432"))))
            {
                return true;
            }
            return false;
        }

具体也可以这样使用:

public static string ProgramFilesx86()
        {
            if (8 == IntPtr.Size
                || (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432"))))
            {
                return Environment.GetEnvironmentVariable("ProgramFiles(x86)");
            }

            return Environment.GetEnvironmentVariable("ProgramFiles");
        }

【讨论】:

  • 好吧,我的问题是你是否使用它;看起来您正在检查处理器。如果您有一个安装了 x86 操作系统的 64 位处理器,这仍然正确吗?我以前用过类似的的东西,我在这方面被烧死了。
  • 我相信只有在 WOW64 模式下运行 32 位进程时才会设置该环境变量。因此,在此和指针检查之间,您应该正确覆盖基础。另请注意,该变量与 PROCESSOR_ARCHITECTURE 不同,后者不起作用,并且会出现您描述的问题。
  • 这一定是我见过的最糟糕的建议。没有理由这样做。枚举 Environment.SpecialFolder 包含 Program Files 和 Program FilesX86 的值
  • 您见过的最糟糕的建议?它可以正常工作。显然有很多方法可以做事......我认为这个没有问题。这也解释了 OP 的问题的模棱两可,关于他是否正在寻找正确的程序文件文件夹,或者使用它来检测位数。
  • 请让 cmets 保持建设性。
猜你喜欢
  • 2012-09-21
  • 2020-01-30
  • 1970-01-01
  • 2019-10-25
  • 2010-09-11
  • 1970-01-01
  • 2012-03-02
  • 2013-10-22
相关资源
最近更新 更多