首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用.NET检测Windows64位平台?

如何用.NET检测Windows64位平台?
EN

Stack Overflow用户
提问于 2008-12-03 09:32:39
回答 30查看 214.6K关注 0票数 283

.NET 2.0 C#应用程序中,我使用以下代码来检测操作系统平台:

代码语言:javascript
复制
string os_platform = System.Environment.OSVersion.Platform.ToString();

这将返回"Win32NT“。问题是,即使在64位Windows Vista上运行,它也会返回"Win32NT“。

有没有其他方法可以知道正确的平台(32位或64位)?

请注意,当在Windows 64位上作为32位应用程序运行时,它还应检测64位。

EN

回答 30

Stack Overflow用户

回答已采纳

发布于 2008-12-03 10:15:57

更新:正如Joel Coehoorn和其他人建议的那样,从.NET Framework4.0开始,你只需查看Environment.Is64BitOperatingSystem即可。

如果在64位.NET上的32位WindowsFramework2.0中运行,IntPtr.Size将不会返回正确的值(它将返回32位)。

正如微软的Raymond Chen所描述的,你必须首先检查是否在64位进程中运行(我认为在.NET中可以通过检查IntPtr.Size来实现),如果你正在32位进程中运行,你仍然必须调用Win函数IsWow64Process。如果返回true,则您正在64位Windows上的32位进程中运行。

微软的Raymond Chen:How to detect programmatically whether you are running on 64-bit Windows

我的解决方案是:

代码语言:javascript
复制
static bool is64BitProcess = (IntPtr.Size == 8);
static bool is64BitOperatingSystem = is64BitProcess || InternalCheckIsWow64();

[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool IsWow64Process(
    [In] IntPtr hProcess,
    [Out] out bool wow64Process
);

public static bool InternalCheckIsWow64()
{
    if ((Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor >= 1) ||
        Environment.OSVersion.Version.Major >= 6)
    {
        using (Process p = Process.GetCurrentProcess())
        {
            bool retVal;
            if (!IsWow64Process(p.Handle, out retVal))
            {
                return false;
            }
            return retVal;
        }
    }
    else
    {
        return false;
    }
}
票数 221
EN

Stack Overflow用户

发布于 2009-12-16 18:58:54

环境4在.NET类中有两个新属性:Is64BitProcessIs64BitOperatingSystem。有趣的是,如果您使用Reflector,您可以看到它们在mscorlib的32位和64位版本中的实现方式不同。32位版本为Is64BitProcess返回false,并通过P/Invoke为Is64BitOperatingSystem调用IsWow64Process。64位版本只对这两种情况都返回true。

票数 249
EN

Stack Overflow用户

发布于 2012-08-29 07:49:10

如果你使用的是.NET Framework 4.0,这很简单:

代码语言:javascript
复制
Environment.Is64BitOperatingSystem

参见 (MSDN)。

票数 102
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/336633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档