Previous | Contents | Next

Appendix C: Useful Scripts

C.1 Get Internet Explorer version

; GetIEVersion
;
; Returns 1-11 (IE Version) or '' (IE is not installed) on top of the stack
;
; Usage:
;   Call GetIEVersion
;   Pop $R0 ; $R0 is "5" etc.

Function GetIEVersion
  Push $R0
  ReadRegStr $R0 HKLM "Software\Microsoft\Internet Explorer" "svcVersion" ; IE v10+
  StrCpy $R0 $R0 2
  IntCmp $R0 9 "" "" lbl_done
  ClearErrors
  ReadRegStr $R0 HKLM "Software\Microsoft\Internet Explorer" "Version" ; IE v4..9
  IfErrors lbl_123
    StrCpy $R0 $R0 1 ; Note: This truncates 5.50 to 5 etc.
    Goto lbl_done
  lbl_123:
  !if "${NSIS_PTR_SIZE}" > 4
  StrCpy $R0 ""
  !else
  ReadRegStr $R0 HKLM "Software\Microsoft\Internet Explorer" "IVer" ; IE v1..3
  IntCmp $R0 99 "" "" +3
    StrCpy $R0 ""
    Goto lbl_done
  IntOp $R0 $R0 & 3 ; 100..103->0..3
  IntCmp $R0 2 +2 "" +2
    IntOp $R0 $R0 + 1 ; Bump 100->v1 and 101->v2 (Is 101 v1.5 or 2.0?)
  !endif
  lbl_done:
  Exch $R0
FunctionEnd

C.2 Is .NET Framework installed?

; IsDotNETInstalled
;
; NOTE: This is only able to detect .NET v1.x and v2.x!
;
; Based on GetDotNETVersion
;   https://nsis.sourceforge.io/Get_.NET_Version
;
; Usage:
;   Call IsDotNETInstalled
;   Pop $0 ; 0 or 1
;   StrCmp $0 1 found_dotNETFramework_v1_or_v2 no_dotNETFramework

Function IsDotNETInstalled
  Push $0
  System::Call '"$SysDir\MSCOREE.dll"::GetCORVersion(w,i${NSIS_MAX_STRLEN},*i)i.r0?u'
  IntOp $0 $0 ! ; HRESULT (S_OK) -> BOOL
  Exch $0
FunctionEnd

C.3 Is Macromedia Flash Player installed?

; IsFlashInstalled
;
; Usage:
;   Call IsFlashInstalled
;   Pop $R0 ; 1 or ""

Function IsFlashInstalled
Push $R0
ReadRegStr $R0 HKCR "CLSID\{D27CDB6E-AE6D-11cf-96B8-444553540000}" ""
StrCmp $R0 "" +2
  StrCpy $R0 "1"
Exch $R0
FunctionEnd

C.4 Connect to the Internet

 ; ConnectInternet (uses Dialer plug-in) - Written by Joost Verburg 
 ;
 ; This function attempts to make a connection to the internet if there is no
 ; connection available. If you are not sure that a system using the installer
 ; has an active internet connection, call this function before downloading
 ; files with NSISdl.
 ; 
 ; The function requires Internet Explorer 3, but asks to connect manually if
 ; IE3 is not installed.
 
 Function ConnectInternet
 
   Push $R0
     
     ClearErrors
     Dialer::AttemptConnect
     IfErrors noie3
     
     Pop $R0
     StrCmp $R0 "online" connected
       MessageBox MB_OK|MB_ICONSTOP "Cannot connect to the internet."
       Quit ; This will quit the installer. You might want to add your own error handling.
     
     noie3:
   
     ; IE3 not installed
     MessageBox MB_OK|MB_ICONINFORMATION "Please connect to the internet now."
     
     connected:
   
   Pop $R0
   
 FunctionEnd

C.5 Prevent Multiple Instances

Put the following code in your .onInit function:

 System::Call 'kernel32::CreateMutex(p 0, i 0, t "myMutex") p .r1 ?e'
 Pop $R0
 
 StrCmp $R0 0 +3
   MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running."
   Abort

'myMutex' must be replaced by a unique string or GUID!

C.6 More

You can find more useful scripts on the NSIS Wiki, the NSIS forum and the NSIS development page.

Previous | Contents | Next


SourceForge Logo