首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用.NET框架或Windows API检测Windows11

使用.NET框架或Windows API检测Windows11
EN

Stack Overflow用户
提问于 2021-09-03 01:29:12
回答 4查看 2.2K关注 0票数 4

在Windows中,要获得操作系统版本,你可以使用Environment.OSVersionMajorMinor值告诉你.NET的版本(即6.1 =Windows7,10.0 =Windows10)。尽管Windows 11已经发布了一个多月(开发版和测试版),但文档还没有更新,没有提到如何检测Windows 11。

对于Windows API,GetVersion已经被永远弃用了,甚至连版本助手API都只支持IsWindows10OrGreater。是否有简单的检查来找出主要的Windows版本,特别是Windows11?有些人也有类似的问题,但对于德尔福(How to detect Windows 11 using Delphi 10.3.3)来说,公认的答案是全部黑客。为什么对于微软来说,提供一个简单的API来返回当前的系统版本就这么困难呢?GetVersion永远不应该被弃用。

EN

回答 4

Stack Overflow用户

发布于 2021-09-03 01:52:12

这很可能并不完美,但这是我已经使用了一段时间的变通方法:

代码语言:javascript
复制
Environment.OSVersion.Version.Build >= 22000;

Windows 11从内部版本号22000开始,Windows 10大约以内部版本号21390结束,所以据我所知,这只会检测Windows 11的内部版本。

首先要检查它是否是Windows系统,不过,其他操作系统可能有更高的内部版本号。

票数 3
EN

Stack Overflow用户

发布于 2021-11-12 19:30:52

RtlGetVersion()在Windows10和Windows11上给出了和我一样的结果。我从这里描述的https://stackoverflow.com/a/49641055的C#代码中调用了它。我尝试了WMI的Win32_OperatingSystem类的Caption属性。

代码语言:javascript
复制
using (var objOS = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem"))
{
    foreach (ManagementObject objMgmt in objOS.Get())
    {
        Console.WriteLine("{0}: {1}", objMgmt.Properties["Caption"].Name, objMgmt.Properties["Caption"].Value);
    }
}

对于Windows 10,我得到了"Microsoft Windows 10企业版“,对于Windows 11,我得到了"Microsoft Windows 11 Pro”。也许你可以使用Name属性,但是它包含了过多的信息,比如Windows文件夹和系统驱动器或类似的东西。

票数 1
EN

Stack Overflow用户

发布于 2021-09-03 02:29:45

您可以在ntdll.dll中使用RtlGetVersion(),它不像GetVersion/Ex()和其他类似的API那样受到操作系统兼容性表现的影响(特别是在there is no supportedOS GUID defined for Windows 11 yet之后)。

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

https://stackoverflow.com/questions/69038560

复制
相关文章

相似问题

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