Poprzedni | Spis treści | Następny
NSIS 2.01 posiada nowy system instalacji i deinstalacji bibliotek dynamicznych (DLL) oraz bibliotek typów (TLB). Używając tego nowego systemu, możesz obsłużyć pełną instalację dzięki jednej lini kodu:
Makra przechowywane są w pliku nagłówkowym Library.nsh, który powinien być dołączony do skryptu, poprzez poniższe polecenie:
!include Library.nsh
Zauważ, że makra biblioteki są ograniczone na platformach innych od Windows. Informacje o wersji bibliotek DLL wymagane są przy kompilacji na platformach innych od Windows.
Makro InstallLib pozwala na instalację biblioteki. Ustawia flagę błędu, w razie wystąpienia jakiegoś błędu podczas instalacji biblioteki.
Aby mieć możliwość zapytania użytkownika o ponowne uruchomienie systemu, jeśli jest wymagane, użyj końcowej strony nowoczesnego interfejsu użytkownika (Modern UI) lub użyj IfRebootFlag i stwórz swoją własną stronę z odpowiednim komunikatem.
libtype shared install localfile destfile tempbasedir
libtype
Typ biblioteki
DLL - Biblioteka Dynamiczna (Dynamic link library (DLL))
REGDLL - Biblioteka DLL, która musi być zarejestrowana
TLB - Biblioteka typów lub biblioteka DLL, która zawiera BIBLIOTEKĘ typu
REGDLLTLB - Biblioteka DLL, która musi być zarejestrowana i zawiera bibliotekę typów
shared
Określenie czy biblioteka jest współdzielona z innymi aplikacjami
NOTSHARED - Biblioteka nie jest współdzielona
$VARNAME - Zmienna, która jest pusta, gdy aplikacja instalowana jest po raz pierwszy, to jest wtedy gdy licznik biblioteki współdzielonej będzie zwiększony.
install
Określenie metody instalacji
REBOOT_PROTECTED
NOREBOOT_PROTECTED
REBOOT_NOTPROTECTED
NOREBOOT_NOTPROTECTED
localfile
Lokalizacja biblioteki w systemie kompilującego
destfile
lokalizacja biblioteki w systemie użytkownika
tempbasedir
Katalog w systemie użytkownika, do przechowywania pliku tymczasowego, podczas ponownego uruchamiania systemu.
Aby obsłużyć system Windows 9x/ME, katalog ten powinien być na tym samym dysku co plik docelowy (destfile). Katalog plików tymczasowych Windows może być ulokowany na dowolnym dysku, więc nie możesz użyć tego katalogu.
LIBRARY_SHELL_EXTENSION
LIBRARY_COM
;Dodaj tutaj kod, który ustawi wartość niezerową zmiennej $ALREADY_INSTALLED, jeśli aplikacja ;jest już zainstalowana. Na przykład: IfFileExists "$INSTDIR\MójProgram.exe" 0 new_installation ;Zamienia tę nazwę nazwą twojej aplikacji StrCpy $ALREADY_INSTALLED 1 new_installation: !insertmacro InstallLib REGDLL $ALREADY_INSTALLED REBOOT_NOTPROTECTED dllname.dll $SYSDIR\dllname.dll \ $SYSDIR
Makro UnInstallLib pozwala na deinstalację biblioteki. Ustawia flagę błędu, w razie wystąpienia jakiegoś błędu podczas usuwania biblioteki.
libtype shared uninstall file
libtype
Typ biblioteki
DLL - Biblioteka Dynamiczna (Dynamic link library (DLL))
REGDLL - Biblioteka DLL, która musi być zarejestrowana
TLB - Biblioteka typów lub biblioteka DLL, która zawiera BIBLIOTEKĘ typu
REGDLLTLB - Biblioteka DLL, która musi być zarejestrowana i zawiera bibliotekę typów
shared
Określenie czy biblioteka jest współdzielona z innymi aplikacjami
NOTSHARED - Biblioteka nie jest współdzielona
SHARED - Biblioteka jest współdzielona i powinna być usunięta jeśli liczba biblioteki współdzielonej wskazuje na to, że biblioteka nie jest już w użyciu.
uninstall
Określenie metody deinstalacji
NOREMOVE
REBOOT_PROTECTED
NOREBOOT_PROTECTED
REBOOT_NOTPROTECTED
NOREBOOT_NOTPROTECTED
file
Lokalizacja biblioteki
LIBRARY_SHELL_EXTENSION
LIBRARY_COM
!insertmacro UnInstallLib REGDLL SHARED REBOOT_NOTPROTECTED $SYSDIR\dllname.dll
Dodaj poniższy kod do swojego skryptu, aby mieć możliwość instalacji lub deinstalacji bibliotek uruchomieniowych VB6.
Poprawna wersja poniższych plików powinna być przechowywana w katalogu ze skryptem (lub zmodyfikuj scieżkę do plików lokalnych, jeśli chcesz użyć innego katalogu):
O tym jak uzyskać powyższe pliki możesz poczytać w artykule Microsoftu.
Aby mieć możliwość zapytania użytkownika o ponowne uruchomienie systemu, jeśli jest wymagane, użyj końcowej strony nowoczesnego interfejsu użytkownika (Modern UI) lub użyj IfRebootFlag i stwórz swoją własną stronę z odpowiednim komunikatem.
!include Library.nsh Var ALREADY_INSTALLED Section "-Instalacja Bibliotek Uruchomieniowych VB6" ;Dodaj tutaj kod, który ustawia zmienną $ALREADY_INSTALLED na wartość niezerową, jeśli aplikacja ;jest już zainstalowana. Na przykład: IfFileExists "$INSTDIR\MójProgram.exe" 0 new_installation ;Zamienia na nazwę twojej aplikacji StrCpy $ALREADY_INSTALLED 1 new_installation: !insertmacro InstallLib REGDLL $ALREADY_INSTALLED REBOOT_NOTPROTECTED "msvbvm60.dll" \ "$SYSDIR\msvbvm60.dll" "$SYSDIR" !insertmacro InstallLib REGDLL $ALREADY_INSTALLED REBOOT_PROTECTED "oleaut32.dll" \ "$SYSDIR\oleaut32.dll" "$SYSDIR" !insertmacro InstallLib REGDLL $ALREADY_INSTALLED REBOOT_PROTECTED "olepro32.dll" \ "$SYSDIR\olepro32.dll" "$SYSDIR" !insertmacro InstallLib REGDLL $ALREADY_INSTALLED REBOOT_PROTECTED "comcat.dll" \ "$SYSDIR\comcat.dll" "$SYSDIR" !insertmacro InstallLib DLL $ALREADY_INSTALLED REBOOT_PROTECTED "asycfilt.dll" \ "$SYSDIR\asycfilt.dll" "$SYSDIR" !insertmacro InstallLib TLB $ALREADY_INSTALLED REBOOT_PROTECTED "stdole2.tlb" \ "$SYSDIR\stdole2.tlb" "$SYSDIR" SectionEnd Section "-un.Deinstalacja Bibliotek Uruchomieniowych VB6" !insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\msvbvm60.dll" !insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\oleaut32.dll" !insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\olepro32.dll" !insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\comcat.dll" !insertmacro UnInstallLib DLL SHARED NOREMOVE "$SYSDIR\asycfilt.dll" !insertmacro UnInstallLib TLB SHARED NOREMOVE "$SYSDIR\stdole2.tlb" SectionEnd
Możesz użyć podobnego kodu do instalacji kontrolek VB6 ActiveX (jak i kontrolek dla Windows Common Controls).