Задача простая: определить текущую версию винды.
Заб
иыв на устаревшие уже неработающие методы типа GetVersionEx и VerifyVersionInfo и внемля советам
Мастера в частности
To obtain the full version number for the operating system, call the GetFileVersionInfo function on one of the system DLLs, such as Kernel32.dll, then call VerQueryValue to obtain the \\StringFileInfo\\<lang><codepage>\\ProductVersion subblock of the file version information.
получил нечто... непотребное.
На 7, 8, 8.1 всё работает нормально
TRACE1("dwFileVersionMS = %08X\r\n", pFileInfo->dwFileVersionMS);
TRACE1("dwFileVersionLS = %08X\r\n", pFileInfo->dwFileVersionLS);
TRACE1("dwProductVersionMS = %08X\r\n", pFileInfo->dwProductVersionMS);
TRACE1("dwProductVersionLS = %08X\r\n", pFileInfo->dwProductVersionLS);
выдаёт (7 64бит)
dwFileVersionMS = 00060001
dwFileVersionLS = 1DB149B5
dwProductVersionMS = 00060001
dwProductVersionLS = 1DB149B5
а вот на десятке
dwFileVersionMS = 00060002
dwFileVersionLS = 28004000
dwProductVersionMS = 000A0000
dwProductVersionLS = 28004000
Копирую kernel32.dll на свой комп, проверяю
dwFileVersionMS = 000A0000
dwFileVersionLS = 28004000
dwProductVersionMS = 000A0000
dwProductVersionLS = 28004000
Всё нормально...
Т.е. если я использую на десятке dwProductVersionMS структуры VS_FIXEDFILEINFO, то работает -> 10.0.10240.16384, а если dwFileVersionMS, то получаю вместо десятки восьмёрку (6.2.10240.16384)
При этом в свойствах файла на десятке оба значения показаны правильно
Кто сталкивался и как лечил.
ps в инете нашёл на эту тему проблемы у PHP-шников и у QT, но они похоже использовали ну совсем уже старую GetVersionEx