Я хочу получить полный номер версии для Windows, так же, как это делает CMD:
Я закончил с этим MS doc, в котором указано:
Чтобы получить полный номер версии операционной системы, вызовите функцию GetFileVersionInfo в одной из системных библиотек DLL, например Kernel32.dll, а затем вызовите VerQueryValue, чтобы получить \StringFileInfo \\ ProductVersion - субблок информации о версии файла.
Поэтому я попытался использовать эти функции с этим кодом:
#include <Windows.h>
#include <wchar.h>
#pragma comment(lib, "Mincore.lib")
int wmain(int argc, wchar_t* argv[])
{
// GetFileVersionInfoW
LPCWSTR fileName = L"C:\\Windows\\System32\\kernel32.dll";
DWORD fileInfoSize;
fileInfoSize = GetFileVersionInfoSizeW(fileName, NULL);
if (fileInfoSize == 0)
{
fwprintf(stderr, L"\nError code: %u\n", GetLastError());
return;
}
// GetFileVersionInfoW
VOID* pFileVerInfo = malloc(fileInfoSize);
if (pFileVerInfo == NULL)
{
fwprintf(stderr, L"Failed allocating!\n");
return;
}
if (!GetFileVersionInfoW(fileName, 0, fileInfoSize, pFileVerInfo))
{
fwprintf(stderr, L"Error code: %u\n", GetLastError());
free(pFileVerInfo);
return;
}
// VerQueryValueW
LPCWSTR subBlock = L"\\StringFileInfo\\\\ProductVersion";
VS_FIXEDFILEINFO * pFileInfo;
UINT pLen = 0;
if (!VerQueryValueW(pFileVerInfo, subBlock, (LPVOID*)& pFileInfo, &pLen))
{
fwprintf(stderr, L"Error code: %u\n", GetLastError());
return;
}
return 0;
}
Однако функция VerQueryValueW
не работает с кодом1813
и я понятия не имею, почему.Я также понятия не имею, как я могу показать полную версию после вызова функции.
Вы можете мне помочь?