检测Windows 10版本

hg_git

我的目标是在我的代码中检测Windows 10,该代码必须能够跨平台以及跨Windows的不同版本(至少7版及更高版本)运行。Windows提供IsWindows10OrGreater()了解决此问题的方法,但是还有另一个问题,该功能在以前的Windows版本中不存在。

您会发现无数的博客和关于此的问题,以及明显的疯狂,其中诸如this和getversion之类的函数返回的版本有所不同,而不是正确的版本。

例如在我的机器上-该方法IsWindows10OrGreater()无法编译(我必须安装Win10 SDK),并IsWindowsVersionOrGreater()报告6为主要版本。

那么,有没有一种明智的多版本方法可以解决此问题?

我检查

检索真实OS版本的最直接方法是调用RtlGetVersion它是什么GetVersionExVerifyVersionInfo电话,但没有采用兼容性垫片。

您可以使用DDK(通过#include <ntddk.h>并从内核模式链接到NtosKrnl.lib,或从用户模式链接到ntdll.lib),或使用运行时动态链接,如以下代码段所示:

typedef LONG NTSTATUS, *PNTSTATUS;
#define STATUS_SUCCESS (0x00000000)

typedef NTSTATUS (WINAPI* RtlGetVersionPtr)(PRTL_OSVERSIONINFOW);

RTL_OSVERSIONINFOW GetRealOSVersion() {
    HMODULE hMod = ::GetModuleHandleW(L"ntdll.dll");
    if (hMod) {
        RtlGetVersionPtr fxPtr = (RtlGetVersionPtr)::GetProcAddress(hMod, "RtlGetVersion");
        if (fxPtr != nullptr) {
            RTL_OSVERSIONINFOW rovi = { 0 };
            rovi.dwOSVersionInfoSize = sizeof(rovi);
            if ( STATUS_SUCCESS == fxPtr(&rovi) ) {
                return rovi;
            }
        }
    }
    RTL_OSVERSIONINFOW rovi = { 0 };
    return rovi;
}

如果需要其他信息,可以传递RTL_OSVERSIONINFOEXW结构代替RTL_OSVERSIONINFOW结构(正确分配dwOSVersionInfoSize成员)。

即使没有清单连接,这也会在Windows 10上返回预期的结果。


顺便说一句,它被公认为是一种更好的解决方案,它基于可用 功能 而非操作系统版本提供不同的实现

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何获得特定的Windows 10版本?

来自分类Dev

Windows 10是否有64位版本的Groovy?

来自分类Dev

如何镜像Windows 10版本2004的启动分区?

来自分类Dev

在.NET中检测Windows 7版本

来自分类Dev

Windows 8.1 32位版本升级到Windows 10 64位版本

来自分类Dev

WIX工具集-自定义操作命令无法正确检测到Windows 10版本

来自分类Dev

WIX工具集-自定义操作命令无法正确检测到Windows 10版本

来自分类Dev

检测iOS 7.1版本

来自分类Dev

我如何知道升级到Windows 10之前的Windows 7版本

来自分类Dev

哪个Windows 10版本对应于Windows 7 Ultimate?

来自分类Dev

非常特定的Microsoft Outlook加载项错误(Windows 10版本1903)

来自分类Dev

无法将Windows 10版本从Home升级到Pro

来自分类Dev

Windows 10版本1703更新要求删除CheckPoint SecuRemote / VPN

来自分类Dev

安装Windows 10版本1803(2018年4月更新)后,屏幕冻结

来自分类Dev

我的Windows 10版本1511不会更新到最新的1803吗?

来自分类Dev

麦克风在Windows 10版本1803上不起作用

来自分类Dev

Windows 10版本1709的更新受阻,如何解决?

来自分类Dev

语言选项-> Windows 10版本1803中的拼写检查

来自分类Dev

Windows 10版本1809不会自动更新到1903或1909

来自分类Dev

ssh-host-config在最新的Windows 10版本上不起作用

来自分类Dev

在必需的Intel RST更新之后,更新到Windows 10版本1903仍然失败

来自分类Dev

如何检查我使用的Windows 10版本?(如1703年)

来自分类Dev

无法在Windows 10上启动R的64位版本

来自分类Dev

为什么Windows的64位版本比32位版本大?

来自分类Dev

无法激活Windows应用商店应用程序(Visual Studio 2015 Windows 10版本1511)

来自分类Dev

如何在UWP应用(C#或WinJS)中获取Windows 10版本(例如1809、1903、1909等)?

来自分类Dev

当Windows 10版本1903没有显示时,使用PngBitmapEncoder的RenderTargetBitmap在虚拟机上生成空白图像

来自分类Dev

如何解决“ Windows 10版本1511更新(KB3122947)-错误0x80070643”

来自分类Dev

您可以制作具有Pro / Home和32/64位版本的Windows 10 ISO吗?

Related 相关文章

  1. 1

    如何获得特定的Windows 10版本?

  2. 2

    Windows 10是否有64位版本的Groovy?

  3. 3

    如何镜像Windows 10版本2004的启动分区?

  4. 4

    在.NET中检测Windows 7版本

  5. 5

    Windows 8.1 32位版本升级到Windows 10 64位版本

  6. 6

    WIX工具集-自定义操作命令无法正确检测到Windows 10版本

  7. 7

    WIX工具集-自定义操作命令无法正确检测到Windows 10版本

  8. 8

    检测iOS 7.1版本

  9. 9

    我如何知道升级到Windows 10之前的Windows 7版本

  10. 10

    哪个Windows 10版本对应于Windows 7 Ultimate?

  11. 11

    非常特定的Microsoft Outlook加载项错误(Windows 10版本1903)

  12. 12

    无法将Windows 10版本从Home升级到Pro

  13. 13

    Windows 10版本1703更新要求删除CheckPoint SecuRemote / VPN

  14. 14

    安装Windows 10版本1803(2018年4月更新)后,屏幕冻结

  15. 15

    我的Windows 10版本1511不会更新到最新的1803吗?

  16. 16

    麦克风在Windows 10版本1803上不起作用

  17. 17

    Windows 10版本1709的更新受阻,如何解决?

  18. 18

    语言选项-> Windows 10版本1803中的拼写检查

  19. 19

    Windows 10版本1809不会自动更新到1903或1909

  20. 20

    ssh-host-config在最新的Windows 10版本上不起作用

  21. 21

    在必需的Intel RST更新之后,更新到Windows 10版本1903仍然失败

  22. 22

    如何检查我使用的Windows 10版本?(如1703年)

  23. 23

    无法在Windows 10上启动R的64位版本

  24. 24

    为什么Windows的64位版本比32位版本大?

  25. 25

    无法激活Windows应用商店应用程序(Visual Studio 2015 Windows 10版本1511)

  26. 26

    如何在UWP应用(C#或WinJS)中获取Windows 10版本(例如1809、1903、1909等)?

  27. 27

    当Windows 10版本1903没有显示时,使用PngBitmapEncoder的RenderTargetBitmap在虚拟机上生成空白图像

  28. 28

    如何解决“ Windows 10版本1511更新(KB3122947)-错误0x80070643”

  29. 29

    您可以制作具有Pro / Home和32/64位版本的Windows 10 ISO吗?

热门标签

归档