【问题标题】:Check architecture for Linux and Mac检查 Linux 和 Mac 的架构
【发布时间】:2016-09-28 10:00:41
【问题描述】:

我正在尝试获取执行我的软件的计算机的体系结构,到目前为止它在 Windows 上运行良好,但在 Linux 和 OSX 上却失败了。让我展示一下我当前的代码:

//--Check processor architecture--
string strProcArchi = System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE");
string strProcArchiBis = System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432");

if((strProcArchi != null && strProcArchi.IndexOf("64") > 0) || (strProcArchiBis != null && strProcArchiBis.IndexOf("64") > 0))
{
    Console.WriteLine("Processor is 64-bit");
}
else
{
    Console.WriteLine("Processor is 32-bit");
}
//------

Linux 和 Mac 总是返回“处理器是 32 位”,所以我猜这些环境变量在 Windows 之外是未使用的。我已经用谷歌搜索了几天,但找不到任何具体的东西。关于如何实现这一目标的任何想法?无论执行它的计算机是 32 位还是 64 位,我都需要加载不同的资产,因此这项检查非常重要。

我在 .NET 2.0 下,无法使用 Environment.Is64BitOperatingSystemEnvironment.Is64BitProcess,因为这是 .NET 4.0 的功能。

提前致谢。

【问题讨论】:

  • Environment.Is64BitOperatingSystemEnvironment.Is64BitProcess 是否适合您?
  • 不,抱歉,我应该澄清一下。我在 .NET 2.0 下,这是 .NET 4.0 的功能。不过还是谢谢你:)
  • Mac 已经很久没有 32 位处理器了,你可以看到here
  • @TheDarkKnight 我知道,但由于出版商的要求,我仍然需要支持他们。
  • this thread 有帮助吗?

标签: c# linux macos mono .net-2.0


【解决方案1】:

要检测 .NET 运行时进程的位数(在您的情况下是单进程),您可以检查 IntPtr.Size == 8 并检测处理器的位数,您可以解析 OSX 上 sysctl hw.cpu64bit_capable 命令的输出和 @987654323 的输出Linux 上的 @ 命令。

【讨论】:

  • 嗨,jariq,谢谢。这对我没有用,因为可执行文件已经是基于 32 位的,我需要知道的是我的程序之外的 CPU 位数。
  • @Neper 在这种情况下,您可以在 OSX 上解析 sysctl hw.cpu64bit_capable 命令的输出,在 Linux 上解析 cat /proc/cpuinfo | grep "flags" | grep " lm " 命令的输出。
  • 很好,一定会尝试的。
  • 你能把你的最后评论变成答案吗?我想将其标记为已接受:)
猜你喜欢
  • 1970-01-01
  • 2011-01-25
  • 2014-11-01
  • 1970-01-01
  • 2013-10-03
  • 2011-02-12
  • 1970-01-01
  • 2022-09-23
  • 2012-11-25
相关资源
最近更新 更多