在Windows中,要获得操作系统版本,你可以使用Environment.OSVersion,Major和Minor值告诉你.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永远不应该被弃用。
发布于 2021-09-03 01:52:12
这很可能并不完美,但这是我已经使用了一段时间的变通方法:
Environment.OSVersion.Version.Build >= 22000;Windows 11从内部版本号22000开始,Windows 10大约以内部版本号21390结束,所以据我所知,这只会检测Windows 11的内部版本。
首先要检查它是否是Windows系统,不过,其他操作系统可能有更高的内部版本号。
发布于 2021-11-12 19:30:52
RtlGetVersion()在Windows10和Windows11上给出了和我一样的结果。我从这里描述的https://stackoverflow.com/a/49641055的C#代码中调用了它。我尝试了WMI的Win32_OperatingSystem类的Caption属性。
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文件夹和系统驱动器或类似的东西。
发布于 2021-09-03 02:29:45
您可以在ntdll.dll中使用RtlGetVersion(),它不像GetVersion/Ex()和其他类似的API那样受到操作系统兼容性表现的影响(特别是在there is no supportedOS GUID defined for Windows 11 yet之后)。
https://stackoverflow.com/questions/69038560
复制相似问题