Вариант определения
major и minor версий ОС с помощью функции NetWkstaGetInfo.
В Win 10 работатет (и с флешки тоже)
Код:
OutFile WinVer-NetWkstaGetInfo.exe
InstallDir $TEMP
ShowInstDetails show
RequestExecutionLevel admin
Page instfiles
# Примечание: В старых версиях NSIS (в том числе 2,46) System plug-in не поддерживае тип р, нужный для правильной работы кода
; используется структура WKSTA_INFO_100 https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa371402(v=vs.85).aspx
; а именно : DWORD wki100_ver_major и DWORD wki100_ver_minor;
Section
System::Call "netapi32::NetWkstaGetInfo(pn,i100,*p.R1)i.R2"
System::Call "*$R1(i,p,p,i.R3,i.R4)"
# в $R3 - основной номер версии ОС ver_major, в $R4 - доп. номер версии**ver_minor
IntOp $R0 $R3 << 16
IntOp $R0 $R0 | $R4
System::Call "netapi32::NetApiBufferFree(pR1)"
;Результат в шестнадцатеричной системе счисления
# 0x00050000 5.0 Windows 2000
# 0x00050001 5.1 Windows XP
# 0x00050002 5.2 Windows XP (x64), Windows Server 2003, Windows Server 2003 R2
# 0x00060000 6.0 Windows Vista, Windows Server 2008
# 0x00060001 6.1 Windows 7, Windows Server 2008 R2
# 0x00060002 6.2 Windows 8, Windows Server 2012
# 0x00060003 6.3 Windows 8.1, Windows Server 2012 R2
# 0x000A0000 10.0 Windows 10, Windows Server Technical Preview
IntFmt $R0 "0x%08X" $R0
DetailPrint "$R0"
; получаем ver_major и ver_minor "в десятичном виде"
IntOp $0 $R0 >> 16
IntOp $1 $R0 & 0xFFFF
DetailPrint "$0.$1"
SectionEnd