【问题标题】:How can my program determine if it is running on 32-bit or 64-bit Windows?我的程序如何确定它是在 32 位还是 64 位 Windows 上运行?
【发布时间】:2011-02-21 10:46:15
【问题描述】:

这是我的问题。确定您的应用运行在哪种位架构上的最佳方法是什么?

我想要做什么:在 64 位服务器上,我希望我的应用程序读取 64 位数据源(存储在 reg key Software\Wow6432Node\ODBC\ODBC.INI\ODBC 数据源中),如果我想要它的 32 位读取 32 位数据源,(即从 Software\ODBC\ODBC.INI\ODBC 数据源读取)。

我可能没有抓住重点,但我不想关心我的应用程序在什么模式下运行。我只想知道操作系统是 32 位还是 64 位。

[System.Environment.OSVersion.Platform 似乎并不适合我。它在我的本地 xp 机器和 win2k8 64 位服务器上返回 Win32NT(即使我的所有项目都设置为目标“任何 cpu”)]

【问题讨论】:

标签: c# .net-2.0 32bit-64bit operating-system


【解决方案1】:

通常情况下,您甚至不应该担心这个。在 64 位平台上运行 32 位应用程序时,系统会自动将注册表查询重定向到 Software\Wow6432Node

【讨论】:

  • 要让您的应用程序以 32 位方式运行,无论平台如何,请将 exe 平台更改为“仅 x86”。它仍将在 x64 平台上运行并自动重定向到 Wow6432Node 键。
【解决方案2】:

试试属性Environment.Is64BitOperatingSystem。这是 .Net 4.0 中添加的一个新功能,专门用于检查操作系统的类型。

【讨论】:

  • 谢谢,但我应该提到我仅限于 .net 2.0
【解决方案3】:

您不应该直接阅读 Wow6432Node。当作为 64 位应用程序运行时,使用 RegistryView 指定 32 位视图。

【讨论】:

  • 不幸的是,RegistryView 仅适用于 .NET 4.0。
【解决方案4】:

【讨论】:

  • 我用了这个谢谢。也感谢其他所有人的帮助。
【解决方案5】:

简单、安全、与框架版本无关的解决方案,无需进入注册表:

Console.WriteLine(
    "Is 64-bit? {0}",
    (
        System.Runtime.InteropServices.Marshal.SizeOf(typeof(IntPtr)) == sizeof(Int64)
            ? "Yes" 
            : "No"
    )
);

【讨论】:

  • 是的,但是如果它在 64 位机器上以 32 位模式运行,上面会返回 false 否?
猜你喜欢
  • 2011-07-06
  • 2010-10-23
  • 1970-01-01
  • 2011-04-16
  • 2011-04-04
  • 2010-12-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多