为了账号安全,请及时绑定邮箱和手机立即绑定

如何用.NET检测Windows 64位平台?

/ 猿问

如何用.NET检测Windows 64位平台?

牛魔王的故事 2019-06-21 17:15:49

如何用.NET检测Windows 64位平台?

在..net2.0 C#应用程序-我使用以下代码检测操作系统平台:

string os_platform = System.Environment.OSVersion.Platform.ToString();

这将返回“Win32NT”。问题是,即使在WindowsVista 64位上运行时,它也会返回“Win32NT”。

是否有其他方法知道正确的平台(32位或64位)?

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


查看完整描述

3 回答

?
小唯快跑啊

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

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

微软的雷蒙德·陈:如何以编程方式检测是否在64位Windows上运行

我的解决方案:

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;
    }}


查看完整回答
反对 回复 2019-06-21
?
猛跑小猪

NET 4在环境类中有两个新属性,Is64BitProcessIS 64BitOperatingSystem..有趣的是,如果您使用Reflector,您可以看到它们在32位和64位版本的mcorlib中的实现是不同的。32位版本返回Is64BitProcess的false,并通过Is64BitOperatingSystem的P/Invoke调用IsWow64Process。64位版本只对两者返回true。


查看完整回答
反对 回复 2019-06-21
  • 3 回答
  • 0 关注
  • 304 浏览
我要回答

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信