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

时间:2010-05-19 15:16:01

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

这是我的问题。确定应用程序运行的位体系结构的最佳方法是什么?

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

我可能会忽略这一点,但我不想关心我的应用程序运行的模式。我只是想知道操作系统是32位还是64位。

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

5 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

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

答案 2 :(得分:4)

简单,安全,框架版本无关的解决方案,无需访问注册表:

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

答案 3 :(得分:2)

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

答案 4 :(得分:1)