Используя W in32 API GetVersion / GetVersionEx и после добавления манифеста совместимости, Windows сообщает о себе как 12.2.18763 .
Общеизвестно, что приложения Win32в Windows 10 требуется манифест совместимости, чтобы получить актуальную версию ОС.Без него они получают только 8.2.10200 (что я могу воспроизвести здесь).
Но как только я добавлю манифест, Windows сообщит о себе как 12.2.18763 .Конечно, я на самом деле не Windows 12, а Windows 10 1809 x64.
Манифест совместимости, скопированный из другого ответа StackOverflow:
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!-- Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!-- Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application>
</compatibility>
Код, скопированный со страницы MSDN GetVersionEx ():
#include <windows.h>
#include <stdio.h>
void main()
{
OSVERSIONINFOEX osvi;
BOOL bIsWindowsXPorLater;
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
GetVersionEx((OSVERSIONINFO*)&osvi);
printf("Version is %d.%d (%d)\n",
osvi.dwMajorVersion,
osvi.dwMinorVersion,
osvi.dwBuildNumber);
}
Я ожидаю 10.0.17763 , а 12.2.18763 слишком близко, чтобы быть общей ошибкой (+ 2, +2, +1000). Я искал отдельные номера, но не нашел подсказки.
Другой распространенный ответ - совместимость прокладок, но я не ожидал, что они обновятся версия для Windows.Я не мог их испортить, потому что в этой системе не установлен диспетчер совместимости приложений.
Есть идеи?