Poprzedni | Spis treści | Następny

B. Instalacja bibliotek DLL/TLB

Ten dokument zgodny jest z NSIS 3.04


B.1 Wprowadzenie


Plik nagłówkowy Library.nsh może być użyty do instalacji bibliotek łączonych dynamicznie (DLL) oraz bibliotek typu (TLB). Dostępne są następujące akcje:

  • Kopiowanie pliku
  • Kopiowanie pliku po ponownym uruchomieniu systemu
  • Sprawdzanie wersji
  • Rejestrowanie i odrejestrowywanie plików
  • Rejestrowanie i odrejestrowywanie plików po ponownym uruchomieniu systemu
  • Zliczanie współdzielonych bibliotek DLL
  • Sprawdzanie funkcji Windows File Protection

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.

B.2 Instalacja biblioteki



B.2.1 Wprowadzenie


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 lub użyj polecenia IfRebootFlag i stwórz swoją własną stronę z odpowiednim tekstem lub wyświetl odpowiedni komunikat.



B.2.2 Parametry


libtype shared install localfile destfile tempbasedir
  • libtype

    Typ biblioteki

    • DLL - Biblioteka łączona dynamicznie (Dynamic link library (DLL))
    • REGDLL - Biblioteka DLL, która musi być zarejestrowana
    • REGEXE - Serwer EXE COM, który musi być zarejestrowany używając polecenia /regserver
    • TLB - Biblioteka typu lub biblioteka DLL, która zawiera bibliotekę typu
    • REGDLLTLB - Biblioteka DLL, która musi być zarejestrowana i zawiera bibliotekę typu
  • 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
      • Uaktualnia bibliotekę przy ponownym uruchomieniu systemu, gdy jest w użyciu (wymagane dla systemu plików).
      • Uaktualnia bibliotekę, jeśli plik nie jest chroniony przez funkcję Windows File Protection.
    • NOREBOOT_PROTECTED
      • Ostrzega użytkownika, gdy biblioteka jest używana. Użytkownik musi zamknąć aplikacje, które ją używają.
      • Uaktualnia bibliotekę, jeśli plik nie jest chroniony przez funkcję Windows File Protection.
    • REBOOT_NOTPROTECTED
      • Uaktualnia bibliotekę przy ponownym uruchomieniu systemu, gdy jest w użyciu (wymagane dla systemu plików).
      • Uaktualnia bibliotekę bez sprawdzania funkcji Windows File Protection.
    • NOREBOOT_NOTPROTECTED
      • Ostrzega użytkownika, gdy biblioteka jest używana. Użytkownik musi zamknąć aplikacje, które ją używają.
      • Uaktualnia bibliotekę bez sprawdzania funkcji Windows File Protection.
  • 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.



B.2.3 Opcje


Przed wstawieniem makra InstallLib musisz zdefiniować poniższe definicje, aby określić jego zachowanie.


B.2.3.1 LIBRARY_X64


  • Instaluje bibliotekę DDL skompilowaną dla systemu Windows x64.
  • Uwaga: Definicja ta resetuje polecenie SetRegView oraz system przekierowań plików Windows.


B.2.3.2 LIBRARY_SHELL_EXTENSION


  • Zdefiniuj przed wstawieniem makra InstallLib, aby móc wywołać SHChangeNotify z SHCNE_ASSOCCHANGED po rejestracji plików.
  • Użyj tej definicji do odświeżenia powłoki Windows przy instalowaniu jej rozszerzenia lub przy zmianie powiązań plików.


B.2.3.3 LIBRARY_COM


  • Zdefinuj przed wstawieniem makra InstallLib, aby móc wywołać CoFreeUnusedLibraries po rejestracji plików.
  • Użyj tej definicji do wyładowania z pamięci niepotrzebnych bibliotek podczas instalacji bibliotek COM.


B.2.3.4 LIBRARY_IGNORE_VERSION


  • Zdefinuj przed wstawieniem makra InstallLib, aby móc zignorować informację o wersji pliku i zainstalować go zawsze, nawet jeśli już istnieje.
  • Użyj tej definicji, gdy wymagana jest starsza lub określona wersja.
  • Nie zalecane dla bibliotek DLL instalowanych w katalogu $SYSDIR.


B.2.3.5 LIBRARY_INSTALL_EQUAL_VERSION


  • Użyj tej definicji przed wstawieniem makra InstallLib, aby nadpisać plik nawet wtedy, gdy wersja pliku jest taka sama jak pliku istniejącego.


B.2.4 Uwagi


  • Jeśli chcesz obsłużyć również Windows 9x/ME, musisz używać krótkich nazw plików (8.3).
  • Uwaga: Stosując biblioteki DLL, zawsze używaj plików do redystrybucji. Nigdy nie kopiuj ich z własnego katalogu systemowego.


B.2.5 Przykład



B.2.5.1 Unshared DLL


 !insertmacro InstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED \
                      dllname.dll $SYSDIR\dllname.dll $SYSDIR


B.2.5.2 Shared DLL


 ; 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 ; Zamień tę nazwę nazwą twojej aplikacji
   StrCpy $ALREADY_INSTALLED 1
 new_installation:

 !insertmacro InstallLib REGDLL $ALREADY_INSTALLED REBOOT_NOTPROTECTED \
                      dllname.dll $SYSDIR\dllname.dll $SYSDIR

B.3 Deinstalacja biblioteki



B.3.1 Wprowadzenie


Makro UnInstallLib pozwala na deinstalację biblioteki. Ustawia flagę błędu, w razie wystąpienia jakiegoś błędu podczas usuwania biblioteki.



B.3.2 Parametry


libtype shared uninstall file
  • libtype

    Typ biblioteki

    • DLL - Biblioteka łączona dynamicznie (Dynamic link library (DLL))
    • REGDLL - Biblioteka DLL, która musi być odrejestrowana
    • REGEXE - Serwer EXE COM, który musi być odrejestrowany używając polecenia /unregserver
    • TLB - Biblioteka typu lub biblioteka DLL, która zawiera bibliotekę typu
    • REGDLLTLB - Biblioteka DLL, która musi być odrejestrowana i zawiera bibliotekę typu
  • 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
      • Biblioteka nie powinna być usuwana. Powinieneś używać tej opcji dla wspólnych lub ważnych plików systemowych, takich jak biblioteki uruchomieniowe Visual Basic/C++/MFC.
    • REBOOT_PROTECTED
      • Usuwa bibliotekę przy ponownym uruchomieniu systemu, gdy jest w użyciu (wymagane dla systemu plików).
      • Usuwa bibliotekę, jeśli plik nie jest chroniony przez funkcję Windows File Protection.
    • NOREBOOT_PROTECTED
      • Ostrzega użytkownika, gdy biblioteka jest używana. Użytkownik musi zamknąć aplikacje, które ją używają.
      • Usuwa bibliotekę, jeśli plik nie jest chroniony przez funkcję Windows File Protection.
    • REBOOT_NOTPROTECTED
      • Usuwa bibliotekę przy ponownym uruchomieniu systemu, gdy jest w użyciu (wymagane dla systemu plików).
      • Usuwa bibliotekę bez sprawdzania funkcji Windows File Protection.
    • NOREBOOT_NOTPROTECTED
      • Ostrzega użytkownika, gdy biblioteka jest używana. Użytkownik musi zamknąć aplikacje, które ją używają.
      • Usuwa bibliotekę bez sprawdzania funkcji Windows File Protection.
  • file

    Lokalizacja biblioteki



B.3.3 Opcje


Przed wstawieniem makra UnInstallLib musisz zdefiniować poniższe definicje, aby określić jego zachowanie.


B.3.3.1 LIBRARY_X64


  • Odinstalowuje bibliotekę DDL skompilowaną dla systemu Windows x64.
  • Uwaga: Definicja resetuje SetRegView oraz system przekierowań plików Windows.


B.3.3.2 LIBRARY_SHELL_EXTENSION


  • Zdefiniuj przed wstawieniem makra UninstallLib, aby móc wywołać funkcję SHChangeNotify z SHCNE_ASSOCCHANGED po odrejestrowaniu plików. Użyj tej definicji do odświeżenia powłoki Windows przy deinstalacji jej rozszerzenia lub zmianie powiązań plików.


B.3.3.3 LIBRARY_COM


  • Zdefiniuj przed wstawieniem makra UninstallLib, aby móc wywołać funkcję CoFreeUnusedLibraries po odrejestrowaniu plików. Użyj tego polecenia do wyładowania z pamięci wszystkich niepotrzebnych bibliotek przy deinstalacji bibliotek COM.


B.3.4 Przykład


 !insertmacro UnInstallLib REGDLL SHARED REBOOT_NOTPROTECTED $SYSDIR\dllname.dll

B.4 Biblioteki uruchomieniowe Visual Basic 6


Nowy plik nagłówkowy VB6RunTime.nsh dostępny jest do instalacji plików bibliotek uruchomieniowych VB6. Aby używać najnowszych plików uruchomieniowych, pobierz plik vb6runtime.zip i wyodrębnij go.

 !include VB6RunTime.nsh

 Var AlreadyInstalled

 Section "-Instalacja bibliotek uruchomieniowych VB6"

   ; Dodaj tutaj kod, który ustawia zmienną $AlreadyInstalled na wartość niezerową, jeśli aplikacja jest już zainstalowana
   ; Na przykład:
   IfFileExists "$INSTDIR\MyApp.exe" 0 new_installation ; Zamień na nazwę twojej aplikacji
     StrCpy $AlreadyInstalled 1
   new_installation:

   !insertmacro VB6RunTimeInstall C:\vb6runtimes $AlreadyInstalled
   ; Zamień ścieżkę 'C:\vb6runtimes' ścieżką z lokalizacją plików

 SectionEnd

 Section " -un.Deinstalacja bibliotek uruchomieniowych VB6"

   !insertmacro VB6RunTimeUnInstall

 SectionEnd

Uwagi:

  • Być może trzeba będzie również zainstalować dodatkowe pliki, aby aplikacja Visual Basic działała, takie jak pliki OCX, dla kontrolek interfejsu użytkownika.
  • Do instalacji plików uruchomieniowych wymagane są uprawnienia administratora lub użytkownika zaawansowanego. Aby sprawdzić, czy użytkownik posiada odpowiednie uprawnienia użyj pliku nagłówkowego Multi-User.
  • Dodaj stronę końcową nowoczesnego interfejsu użytkownika lub zastosuj inną metodę (zobacz IfRebootFlag), dzięki której użytkownik będzie mógł uruchomić ponownie komputer, jeśli będzie taka potrzeba.