C. Przydatne skrypty

Ten dokument zgodny jest z NSIS 3.1


C.1 Pobieranie wersji Internet Explorera



 ; GetIEVersion
 ;
 ; Funkcja oparta na funkcji Yazno, http://yazno.tripod.com/powerpimpit/
 ; Wartość zwracana jest na górze stosu
 ; 1-6 (Zainstalowana wersja IE)
 ; lub
 ; '' (IE nie jest zainstalowany)
 ;
 ; Sposób użycia:
 ;   Call GetIEVersion
 ;   Pop $R0
 ;   Zmienna $R0 ma wartość "5" lub inną


 Function GetIEVersion
 Push $R0
   ClearErrors
   ReadRegStr $R0 HKLM "Software\Microsoft\Internet Explorer" "Version"
   IfErrors lbl_123 lbl_456

   lbl_456: ; IE 4+
     Strcpy $R0 $R0 1
   Goto lbl_done

   lbl_123: ; Starsza wersja IE
     ClearErrors
     ReadRegStr $R0 HKLM "Software\Microsoft\Internet Explorer" "IVer"
     IfErrors lbl_error

       StrCpy $R0 $R0 3
       StrCmp $R0 '100' lbl_ie1
       StrCmp $R0 '101' lbl_ie2
       StrCmp $R0 '102' lbl_ie2

       StrCpy $R0 '3' ; Domyślnie w IE3, jeśli nie 100, 101, lub 102.
       Goto lbl_done
         lbl_ie1:
           StrCpy $R0 '1'
         Goto lbl_done
         lbl_ie2:
           StrCpy $R0 '2'
         Goto lbl_done
     lbl_error:
       StrCpy $R0 ''
   lbl_done:
   Exch $R0
 FunctionEnd

C.2 Czy Microsoft .NET Framework jest zainstalowany?



 ; IsDotNETInstalled
 ;
 ; Funkcja oparta na funkcji GetDotNETVersion
 ;   http://nsis.sourceforge.net/Get_.NET_Version
 ;
 ; Sposób użycia:
 ;   Call IsDotNETInstalled
 ;   Pop $0
 ;   StrCmp $0 1 found.NETFramework no.NETFramework


 Function IsDotNETInstalled
   Push $0
   Push $1

   StrCpy $0 1
   System::Call "mscoree::GetCORVersion(w, i ${NSIS_MAX_STRLEN}, *i) i .r1"
   StrCmp $1 0 +2
     StrCpy $0 0

   Pop $1
   Exch $0
 FunctionEnd

C.3 Czy odtwarzacz Macromedia Flash jest zainstalowany?



 ; IsFlashInstalled
 ;
 ; Napisał Yazno, http://yazno.tripod.com/powerpimpit/
 ; Warość zwracana jest na górze stosu
 ; 0 (Flash nie jest zainstalowany)
 ; lub
 ; 1 (Flash jest zainstalowany)
 ;
 ; Sposób użycia:
 ;   Call IsFlashInstalled
 ;   Pop $R0
 ;   Zmienna $R0 ma wartość "1" lub "0"


 Function IsFlashInstalled
  Push $R0
  ClearErrors
  ReadRegStr $R0 HKCR "CLSID\{D27CDB6E-AE6D-11cf-96B8-444553540000}" ""
  IfErrors lbl_na
    StrCpy $R0 1
  Goto lbl_end
  lbl_na:
    StrCpy $R0 0
  lbl_end:
  Exch $R0
 FunctionEnd

C.4 Łączenie z Internetem



 ; ConnectInternet (funkcja używa wtyczki Dialer)
 ; Napisał: Joost Verburg 
 ;
 ; Funkcja ta próbuje utworzyć połączenie z internetem, jeśli nie jest dostępne żadne połączenie.
 ; Jeśli nie jesteś pewien czy system, na którym uruchomiono instalatora ma aktywne połączenie
 ; z internetem, wywołaj tę funkcję przed pobieraniem plików przez wtyczkę NSISdl.
 ; 
 ; Funkcja wymaga Internet Explorera 3, lecz pyta o ręczne połączenie, jeśli nie jest on zainstalowany.


 Function ConnectInternet

   Push $R0

     ClearErrors
     Dialer::AttemptConnect
     IfErrors noie3

     Pop $R0
     StrCmp $R0 "online" connected
       MessageBox MB_OK|MB_ICONSTOP "Błąd połączenia z internetem."
       Quit ; Zamyka instalatora. Możesz dodać własną obsługę błędów.

     noie3:

     ; IE3 nie zainstalowany
     MessageBox MB_OK|MB_ICONINFORMATION "Proszę, połącz się teraz z internetem."

     connected:

   Pop $R0

 FunctionEnd

C.5 Pobieranie nazwy instalatora


System::Call 'kernel32::GetModuleFileName(p 0, t .R0, i 1024) i r1'
 ; Zmienna $R0 będzie zawierała nazwę instalatora

C.6 Zapobieganie uruchamiania wielu kopii instalatora


Wstaw poniższy fragment kodu do funkcji .onInit:

 System::Call 'kernel32::CreateMutex(p 0, i 0, t "myMutex") p .r1 ?e'
 Pop $R0

 StrCmp $R0 0 +3
   MessageBox MB_OK|MB_ICONEXCLAMATION "Instalator jest już uruchomiony."
   Abort

Wartość 'myMutex' powinna być zastąpiona dowolną unikalną wartością.