我的程序如何确定它在32位还是64位Windows上运行?

5

我的问题是,确定应用程序运行的位架构的最佳方法是什么?

我要做的事情是:在64位服务器上,我希望我的应用程序读取64位数据源(存储在注册表键Software\Wow6432Node\ODBC\ODBC.INI\ODBC Data Sources中),如果是32位,则希望读取32位数据源(即从Software\ODBC\ODBC.INI\ODBC Data Sources中读取)。

我可能没有理解到点子上,但我不想关心应用程序运行的模式。我只想知道操作系统是32位还是64位。

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


如何判断我的应用程序是以32位还是64位运行的? - Redwood
5个回答

4

不必访问注册表,即可提供简单、安全、与框架版本无关的解决方案:

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

1
是的,但如果它在64位机器上以32位模式运行,则以上内容将返回false,不是吗? - user48408

4

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


1
将应用程序设置为32位运行,无论平台如何,只需将exe平台更改为“仅限x86”。它仍将在x64平台上运行,并自动重定向到Wow6432Node键。 - Stephen Cleary

4

尝试使用属性Environment.Is64BitOperatingSystem。这是在.Net 4.0中专门用于检查操作系统类型的新属性。


谢谢,但我应该提到我受限于 .net 2.0。 - user48408

2

不应直接读取Wow6432Node。在64位应用程序运行时,使用RegistryView指定32位视图。


很遗憾,“RegistryView”仅适用于.NET 4.0及以上版本。 - Regent

1

我使用了这个,谢谢。也谢谢其他所有人的帮助。 - user48408

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接