2015-11-19 22:34:39 +00:00
|
|
|
; GetWindowsVersion 4.1.1 (2015-06-22) - alternate script with server versions
|
2005-08-02 06:15:02 +00:00
|
|
|
;
|
2015-11-19 22:34:39 +00:00
|
|
|
; http://nsis.sourceforge.net/Get_Windows_version
|
2005-08-02 06:15:02 +00:00
|
|
|
;
|
2015-11-19 22:34:39 +00:00
|
|
|
; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
|
|
|
|
; Update by Joost Verburg
|
|
|
|
; Update (Macro, Define, Windows 7 detection) - John T. Haller of PortableApps.com - 2008-01-07
|
|
|
|
; Update (Windows 8 detection) - Marek Mizanin (Zanir) - 2013-02-07
|
|
|
|
; Update (Windows 8.1 detection) - John T. Haller of PortableApps.com - 2014-04-04
|
|
|
|
; Update (Windows 2008, 2008R2, 2012 and 2012R2 detection) - Francisco Simoões Filho franksimoes@gmail.com - 2014-08-25
|
|
|
|
; Update (Windows 10 TP detection) - John T. Haller of PortableApps.com - 2014-10-01
|
|
|
|
; Update (Windows 10 TP4 and 2016 detection, and added include guards) - Kairu - 2015-06-22
|
2005-08-02 06:15:02 +00:00
|
|
|
;
|
2015-11-19 22:34:39 +00:00
|
|
|
; Usage: ${GetWindowsVersion} $R0
|
2005-08-02 06:15:02 +00:00
|
|
|
;
|
2015-11-19 22:34:39 +00:00
|
|
|
; $R0 contains: 95, 98, ME, NT x.x, 2000, XP, 2003, Vista, 2008, 7, 2008R2,
|
|
|
|
; 8, 2012, 8.1, 2012R2, 10.0, 2016 or '' (for unknown)
|
|
|
|
|
|
|
|
!ifndef __GET_WINDOWS_VERSION_NSH
|
|
|
|
!define __GET_WINDOWS_VERSION_NSH
|
|
|
|
|
2005-08-02 06:15:02 +00:00
|
|
|
Function GetWindowsVersion
|
2015-11-19 22:34:39 +00:00
|
|
|
|
2005-08-02 06:15:02 +00:00
|
|
|
Push $R0
|
|
|
|
Push $R1
|
2015-11-19 22:34:39 +00:00
|
|
|
Push $R2
|
|
|
|
|
2005-08-02 06:15:02 +00:00
|
|
|
ClearErrors
|
2015-11-19 22:34:39 +00:00
|
|
|
|
|
|
|
; check if Windows NT family
|
2005-08-02 06:15:02 +00:00
|
|
|
ReadRegStr $R0 HKLM \
|
|
|
|
"SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
|
2015-11-19 22:34:39 +00:00
|
|
|
|
2005-08-02 06:15:02 +00:00
|
|
|
IfErrors 0 lbl_winnt
|
2015-11-19 22:34:39 +00:00
|
|
|
|
2005-08-02 06:15:02 +00:00
|
|
|
; we are not NT
|
|
|
|
ReadRegStr $R0 HKLM \
|
|
|
|
"SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
|
2015-11-19 22:34:39 +00:00
|
|
|
|
2005-08-02 06:15:02 +00:00
|
|
|
StrCpy $R1 $R0 1
|
|
|
|
StrCmp $R1 '4' 0 lbl_error
|
2015-11-19 22:34:39 +00:00
|
|
|
|
2005-08-02 06:15:02 +00:00
|
|
|
StrCpy $R1 $R0 3
|
2015-11-19 22:34:39 +00:00
|
|
|
|
2005-08-02 06:15:02 +00:00
|
|
|
StrCmp $R1 '4.0' lbl_win32_95
|
|
|
|
StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
|
2015-11-19 22:34:39 +00:00
|
|
|
|
2005-08-02 06:15:02 +00:00
|
|
|
lbl_win32_95:
|
|
|
|
StrCpy $R0 '95'
|
|
|
|
Goto lbl_done
|
2015-11-19 22:34:39 +00:00
|
|
|
|
2005-08-02 06:15:02 +00:00
|
|
|
lbl_win32_98:
|
|
|
|
StrCpy $R0 '98'
|
|
|
|
Goto lbl_done
|
2015-11-19 22:34:39 +00:00
|
|
|
|
2005-08-02 06:15:02 +00:00
|
|
|
lbl_win32_ME:
|
|
|
|
StrCpy $R0 'ME'
|
|
|
|
Goto lbl_done
|
2015-11-19 22:34:39 +00:00
|
|
|
|
2005-08-02 06:15:02 +00:00
|
|
|
lbl_winnt:
|
2015-11-19 22:34:39 +00:00
|
|
|
|
|
|
|
; check if Windows is Client or Server.
|
|
|
|
ReadRegStr $R2 HKLM \
|
|
|
|
"SOFTWARE\Microsoft\Windows NT\CurrentVersion" InstallationType
|
|
|
|
|
2005-08-02 06:15:02 +00:00
|
|
|
StrCpy $R1 $R0 1
|
2015-11-19 22:34:39 +00:00
|
|
|
|
2005-08-02 06:15:02 +00:00
|
|
|
StrCmp $R1 '3' lbl_winnt_x
|
|
|
|
StrCmp $R1 '4' lbl_winnt_x
|
2015-11-19 22:34:39 +00:00
|
|
|
|
2005-08-02 06:15:02 +00:00
|
|
|
StrCpy $R1 $R0 3
|
2015-11-19 22:34:39 +00:00
|
|
|
|
2005-08-02 06:15:02 +00:00
|
|
|
StrCmp $R1 '5.0' lbl_winnt_2000
|
|
|
|
StrCmp $R1 '5.1' lbl_winnt_XP
|
2007-09-17 18:40:34 +00:00
|
|
|
StrCmp $R1 '5.2' lbl_winnt_2003
|
2015-11-19 22:34:39 +00:00
|
|
|
StrCmp $R1 '6.0' lbl_winnt_vista_2008
|
|
|
|
StrCmp $R1 '6.1' lbl_winnt_7_2008R2
|
|
|
|
StrCmp $R1 '6.2' lbl_winnt_8_2012
|
|
|
|
StrCmp $R1 '6.3' lbl_winnt_81_2012R2
|
|
|
|
StrCmp $R1 '6.4' lbl_winnt_10_2016 ; the early Windows 10 tech previews used version 6.4
|
|
|
|
|
|
|
|
StrCpy $R1 $R0 4
|
|
|
|
|
|
|
|
StrCmp $R1 '10.0' lbl_winnt_10_2016
|
|
|
|
Goto lbl_error
|
|
|
|
|
2005-08-02 06:15:02 +00:00
|
|
|
lbl_winnt_x:
|
|
|
|
StrCpy $R0 "NT $R0" 6
|
|
|
|
Goto lbl_done
|
2015-11-19 22:34:39 +00:00
|
|
|
|
2005-08-02 06:15:02 +00:00
|
|
|
lbl_winnt_2000:
|
|
|
|
Strcpy $R0 '2000'
|
|
|
|
Goto lbl_done
|
2015-11-19 22:34:39 +00:00
|
|
|
|
2005-08-02 06:15:02 +00:00
|
|
|
lbl_winnt_XP:
|
|
|
|
Strcpy $R0 'XP'
|
|
|
|
Goto lbl_done
|
2015-11-19 22:34:39 +00:00
|
|
|
|
2005-08-02 06:15:02 +00:00
|
|
|
lbl_winnt_2003:
|
|
|
|
Strcpy $R0 '2003'
|
|
|
|
Goto lbl_done
|
2015-11-19 22:34:39 +00:00
|
|
|
|
|
|
|
;----------------- Family - Vista / 2008 -------------
|
|
|
|
lbl_winnt_vista_2008:
|
|
|
|
StrCmp $R2 'Client' go_vista
|
|
|
|
StrCmp $R2 'Server' go_2008
|
|
|
|
|
|
|
|
go_vista:
|
|
|
|
Strcpy $R0 'Vista'
|
|
|
|
Goto lbl_done
|
|
|
|
|
|
|
|
go_2008:
|
|
|
|
Strcpy $R0 '2008'
|
|
|
|
Goto lbl_done
|
|
|
|
;-----------------------------------------------------
|
|
|
|
|
|
|
|
;----------------- Family - 7 / 2008R2 -------------
|
|
|
|
lbl_winnt_7_2008R2:
|
|
|
|
StrCmp $R2 'Client' go_7
|
|
|
|
StrCmp $R2 'Server' go_2008R2
|
|
|
|
|
|
|
|
go_7:
|
|
|
|
Strcpy $R0 '7'
|
|
|
|
Goto lbl_done
|
|
|
|
|
|
|
|
go_2008R2:
|
|
|
|
Strcpy $R0 '2008R2'
|
|
|
|
Goto lbl_done
|
|
|
|
;-----------------------------------------------------
|
|
|
|
|
|
|
|
;----------------- Family - 8 / 2012 -------------
|
|
|
|
lbl_winnt_8_2012:
|
|
|
|
StrCmp $R2 'Client' go_8
|
|
|
|
StrCmp $R2 'Server' go_2012
|
|
|
|
|
|
|
|
go_8:
|
|
|
|
Strcpy $R0 '8'
|
|
|
|
Goto lbl_done
|
|
|
|
|
|
|
|
go_2012:
|
|
|
|
Strcpy $R0 '2012'
|
|
|
|
Goto lbl_done
|
|
|
|
;-----------------------------------------------------
|
|
|
|
|
|
|
|
;----------------- Family - 8.1 / 2012R2 -------------
|
|
|
|
lbl_winnt_81_2012R2:
|
|
|
|
StrCmp $R2 'Client' go_81
|
|
|
|
StrCmp $R2 'Server' go_2012R2
|
|
|
|
|
|
|
|
go_81:
|
|
|
|
Strcpy $R0 '8.1'
|
|
|
|
Goto lbl_done
|
|
|
|
|
|
|
|
go_2012R2:
|
|
|
|
Strcpy $R0 '2012R2'
|
|
|
|
Goto lbl_done
|
|
|
|
;-----------------------------------------------------
|
|
|
|
|
|
|
|
;----------------- Family - 10 / 2016 -------------
|
|
|
|
lbl_winnt_10_2016:
|
|
|
|
StrCmp $R2 'Client' go_10
|
|
|
|
StrCmp $R2 'Server' go_2016
|
|
|
|
|
|
|
|
go_10:
|
|
|
|
Strcpy $R0 '10.0'
|
|
|
|
Goto lbl_done
|
|
|
|
|
|
|
|
go_2016:
|
|
|
|
Strcpy $R0 '2016'
|
|
|
|
Goto lbl_done
|
|
|
|
;-----------------------------------------------------
|
|
|
|
|
2005-08-02 06:15:02 +00:00
|
|
|
lbl_error:
|
|
|
|
Strcpy $R0 ''
|
|
|
|
lbl_done:
|
2015-11-19 22:34:39 +00:00
|
|
|
|
|
|
|
Pop $R2
|
2005-08-02 06:15:02 +00:00
|
|
|
Pop $R1
|
|
|
|
Exch $R0
|
2015-11-19 22:34:39 +00:00
|
|
|
|
2005-08-02 06:15:02 +00:00
|
|
|
FunctionEnd
|
2015-11-19 22:34:39 +00:00
|
|
|
|
|
|
|
!macro GetWindowsVersion OUTPUT_VALUE
|
|
|
|
Call GetWindowsVersion
|
|
|
|
Pop `${OUTPUT_VALUE}`
|
|
|
|
!macroend
|
|
|
|
|
|
|
|
!define GetWindowsVersion '!insertmacro "GetWindowsVersion"'
|
|
|
|
|
|
|
|
!endif
|