【问题标题】:Trying to get windows version from C code试图从 C 代码获取 windows 版本
【发布时间】:2019-03-01 21:22:38
【问题描述】:

我正在开发一个 C 应用程序(不是 c++)。基本上代码在 *.c 文件中。我想在这个文件中添加另一个函数来检查我的应用程序运行的 Windows 操作系统版本。我正在尝试使用下面描述的 versionhelper 函数 --https://docs.microsoft.com/en-us/windows/desktop/sysinfo/version-helper-apis。但是,当我尝试添加下面的头文件时,我收到编译错误消息 - 无法打开源文件“VersionHelpers.h”--

 #include <VersionHelpers.h>

我认为这是因为我的文件是 C 文件。有没有办法从 C 代码中读取 Windows 操作系统版本? (不是 C++)

【问题讨论】:

  • @postit:在 Windows 上,您编译的操作系统版本独立于您运行的操作系统版本。
  • 有没有办法可以从 C 代码中使用 VersionHelpers.h 中定义的方法?
  • 我不知道,但你的推理是错误的。你得到这个错误是因为你的编译器找不到头文件,而不是因为你有一个 C 程序。
  • Check Windows version的可能重复

标签: c windows visual-studio visual-studio-2012


【解决方案1】:

VersionHelpers.h 只是一个内联头文件,它使用VerifyVersionInfo 进行常见检查。您可以直接使用 C 可调用的 API。

您还需要注意GetVersionVerifyVersionInfo 函数受内置appcompat 版本谎言的影响。详情请见Manifest Madness

当然,真正的问题是您实际上打算如何处理这些信息?

这是一个“你必须这么高才能骑这个车”的测试吗?如果是这样,VerifyVersionInfo 就是这样做的方法,VersionHelpers.h 中的代码是做什么的。

这是“我需要用于遥测或日志文件的版本”测试吗?在这种情况下,您可能想要使用 GetVersionEx 并禁止弃用警告。确保您不会根据该值做出任何运行时决策。对于 UWP 应用,您可以使用 AnalyticsInfo

这是“我正在检查使用特定操作系统组件是否安全?”如果是这样,可能有比操作系统检查更好的方法。

What’s in a version number?

VersionHelpers.h 标头已添加到 VS 2013 或更高版本随附的 Windows 8.1 SDK 中。它也在 Windows 10 SDK 的每个版本中。它与.c 以及.cpp 文件兼容。

【讨论】:

    【解决方案2】:

    VersionHelpers.h 来自 Window 8.1 SDK (2014)。它没有随 VS2012 一起提供。您必须手动安装它,或更新到当前的 Visual Studio 版本。

    【讨论】:

    • 嗯。你最近看过日历吗?为什么不使用 VS 2017 并完成它?
    • @Swordfish:考虑到没有VS2014(2014年的日期是Win8.1),我想知道他做了什么。
    猜你喜欢
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 2022-09-26
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 2023-04-05
    相关资源
    最近更新 更多