Skip to content
⌘ NSIS Forum Archive

Detecting OS

6 posts

darshanaltekar#

Detecting OS

How can in my installer detect which OS it is currently running on. I want it prerticularly for Windows 2000 . Also how can i detect if SP 3 is installed or not.
sgiusto#
there is a plugin here: nsis.sourceforge.net/GetVersion_%28Windows%29_plug-in

or you can use this function
; GetWindowsVersion
;
; Based on Yazno's function, http://yazno.**********/powerpimpit/
; Returns on top of stack
;
; Windows Version (95, 98, ME, NT x.x, 2000, XP, .NET Server)
; or
; '' (Unknown Windows Version)
;
; Usage:
; Call GetWindowsVersion
; Pop $R0
; ; at this point $R0 is "NT 4.0" or whatnot

Function GetWindowsVersion
Push $R0
Push $R1
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
StrCmp $R0 "" 0 lbl_winnt
; we are not NT.
ReadRegStr $R0 HKLM SOFTWARE\Microsoft\Windows\CurrentVersion VersionNumber

StrCpy $R1 $R0 1
StrCmp $R1 '4' 0 lbl_error

StrCpy $R1 $R0 3

StrCmp $R1 '4.0' lbl_win32_95
StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98

lbl_win32_95:
StrCpy $R0 '95'
Goto lbl_done

lbl_win32_98:
StrCpy $R0 '98'
Goto lbl_done

lbl_win32_ME:
StrCpy $R0 'ME'
Goto lbl_done

lbl_winnt:

StrCpy $R1 $R0 1

StrCmp $R1 '3' lbl_winnt_x
StrCmp $R1 '4' lbl_winnt_x

StrCpy $R1 $R0 3

StrCmp $R1 '5.0' lbl_winnt_2000 lbl_error
StrCmp $R1 '5.1' lbl_winnt_XP lbl_error
StrCmp $R1 '5.2' lbl_winnt_dotNET lbl_error

lbl_winnt_x:
StrCpy $R0 "NT $R0" 6
Goto lbl_done

lbl_winnt_2000:
Strcpy $R0 '2000'
Goto lbl_done

lbl_winnt_XP:
Strcpy $R0 'XP'
Goto lbl_done

lbl_winnt_dotNET:
Strcpy $R0 '.NET Server'
Goto lbl_done

lbl_error:
Strcpy $R0 ''
lbl_done:
Pop $R1
Exch $R0
FunctionEnd
Red Wine#
To detect Windows version plus service pack you may use this plugin by Afrow UK.
Otherwise there is the included header WinVer.nsh, find it into include folder under NSIS installation.
ionut_y#
The script above is great but needs some corrections.It doesn't detect XP,first line skip it to lbl_error


StrCmp $R1 '5.0' lbl_winnt_2000 lbl_error
StrCmp $R1 '5.1' lbl_winnt_XP lbl_error
StrCmp $R1 '5.2' lbl_winnt_dotNET lbl_error



StrCmp $R1 '5.0' lbl_winnt_2000 0
StrCmp $R1 '5.1' lbl_winnt_XP 0
StrCmp $R1 '5.2' lbl_winnt_dotNET lbl_error
Afrow UK#
That script is very old.
The latest one is at:


Stu
ionut_y#
Originally posted by Afrow UK
That script is very old.
The latest one is at:


Stu
ok, thanks !