我正在尝试查找Windows Server 2016计算机的构建版本,例如RS1或RS3。有一个API可以执行此操作 - GetVersionEx()
- 但现已弃用。
我想要构建版本,例如:针对RS1的1607。
是否有API可以获得此功能?
答案 0 :(得分:5)
选项0 :(每个RbMm)使用驱动程序开发工具包中的[RtlGetVersion]。
选项1:获取像kernel32.dll这样的系统DLL的版本号。 MSDN blesses这种做法。
// 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;
}
选项2:查询注册表,具体为:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
的值为CurrentMajorVersionNumber
,CurrentMinorVersionNumber
和CurrentBuildNumber
。
我找不到这些值的官方文档,因此这可能不是MSDN认可的或面向未来的。
选项3:如果可用,请使用GetProductInfo,否则返回GetVersionInfo。