Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно
MKN MKN вне форума

Ветеран


Сообщения: 2355
Благодарности: 557

Профиль | Отправить PM | Цитировать


Вариант определения 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
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:01, 27-10-2015 | #1868