从Win32 API C 获取OS构建版本
Getting OS build version from Win32 Api C++
我正在尝试找到Windows Server 2016机器的构建版本,例如RS1或RS3。有一个API可以做到这一点-GetVersionEx()
-但现在已弃用。
MSDN表示使用版本助手功能。
我想要构建版本,for ex:1607对于RS1。
是否有API可以得到?
选项0 :(每个rbmm)从驱动程序开发套件中使用[rtlgetversion]。
选项1:[更新]抓住像kernel32.dll这样的系统dll的版本号。MSDN曾经祝福这种方法,说:
要获取操作系统的完整版本号,请在一个系统dll上拨打getFileVersionInfo函数,例如kernel32.dll,然后致电VerqueryValue获取文件版本信息的 stringfileinfo \ productversion子block。[来自2017年MSDN的Internet档案快照]
看起来像这样的东西:
// Quick hack without error checking.
#include <cassert>
#include <iomanip>
#include <iostream>
#include <vector>
#include <Windows.h>
int main() {
const auto system = L"kernel32.dll";
DWORD dummy;
const auto cbInfo =
::GetFileVersionInfoSizeExW(FILE_VER_GET_NEUTRAL, system, &dummy);
std::vector<char> buffer(cbInfo);
::GetFileVersionInfoExW(FILE_VER_GET_NEUTRAL, system, dummy,
buffer.size(), &buffer[0]);
void *p = nullptr;
UINT size = 0;
::VerQueryValueW(buffer.data(), L"\", &p, &size);
assert(size >= sizeof(VS_FIXEDFILEINFO));
assert(p != nullptr);
auto pFixed = static_cast<const VS_FIXEDFILEINFO *>(p);
std::cout << HIWORD(pFixed->dwFileVersionMS) << '.'
<< LOWORD(pFixed->dwFileVersionMS) << '.'
<< HIWORD(pFixed->dwFileVersionLS) << '.'
<< LOWORD(pFixed->dwFileVersionLS) << 'n';
return 0;
}
请注意,原始MSDN链接现在将其重定向到不提及此方法的较新文档集。我想这意味着这不再是一项受支持的技术,大概,所有旧代码的兼容性黑客攻击可能会阻止应用程序获得实际答案。
选项2:特别是查询注册表:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersion
具有CurrentMajorVersionNumber
,CurrentMinorVersionNumber
和CurrentBuildNumber
的值。
我找不到这些值的官方文档,因此可能不会被MSDN批准或未来。
选项3:如果可用,请使用getProductInfo,如果不是。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 无法在 CLion 中构建 C++ 项目
- MoltenVK(适用于 Vulkan)构建在 OS X v. 10.13.3 (17D102) 上失败 |Xcode
- 从Win32 API C 获取OS构建版本
- 如何翻译使用预构建的QT安装程序框架创建的安装程序,无论OS语言如何
- C 类文件未在Linux OS上运行的Eclipse Mars中构建二进制文件
- 在64位Mac OS X El Capitan上构建并安装32位Boost 1.60
- 尝试在os x上构建opencv时出错
- 在 OS X 10.8.5 上使用 Xcode 5.0 和 Qt 5.1.1 构建问题
- 如何在 Mac OS X 上构建和使用动态库
- 在Mac OS X上构建Trilinos(科学计算库)的麻烦
- Sublime Text 3 C++为OS X构建系统
- 如何在Cent OS 6.5上构建freetype
- 无法在Mac OS上使用sourcery lite edition工具链、C++和Eclipse为arm6/arm7构建
- 'ld: unknown option: -rpath=./libs' - 在 Mac OS 10.7.5 上构建 OpenFramework 插件时出现链接错误
- 在Mac OS X上构建比特币时出现相同的错误
- Android OS框架-将单个可执行文件构建为共享对象
- 用Homebrew在Mac OS X上构建python boost hello world-Makefile vs.Re
- C 库,用于直接从 Linux 上的缓冲区构建视频,最好可移植到 Windows 和 Mac OS X
- 如何在mac os x 10.9.5上构建QuantLib