Poprzedni | Spis treści | Następny

Dodatek B: Instalacja Bibliotek DLL/TLB


B.1 Wprowadzenie

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:

  • Kopiowanie pliku
  • Kopiowanie pliku po ponownym uruchomieniu systemu
  • Sprawdzanie wersji
  • Rejestrowanie i Odrejestrowywanie plików
  • Rejestrowanie i Odrejestrowywanie plików po ponownym uruchomieniu systemu
  • Liczenie współdzielonych bibliotek DLL
  • Sprawdzanie w 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 (Modern UI) lub użyj IfRebootFlag i stwórz swoją własną stronę z odpowiednim komunikatem.

B.2.2 Parametry

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

  • 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 Windows File Protection.

NOREBOOT_PROTECTED

  • Ostrzega użytkownika, gdy biblioteka jest używana. Użytkownik bedzie musiał zamknąć aplikacje, które ją wykorzystują.
  • Uaktualnia bibliotekę, jeśli plik nie jest chroniony przez 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 w Windows File Protection.

NOREBOOT_NOTPROTECTED

  • Ostrzega użytkownika, gdy biblioteka jest używana. Użytkownik bedzie musiał zamknąć aplikacje, które ją wykorzystują.
  • Uaktualnia bibliotekę bez sprawdzania w 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

LIBRARY_SHELL_EXTENSION

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

LIBRARY_COM

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

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

 ;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

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 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

  • 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 Windows File Protection.

NOREBOOT_PROTECTED

  • Ostrzega użytkownika, gdy biblioteka jest używana. Użytkownik będzie musiał zamknąć aplikacje, które ją wykorzystują.
  • Usuwa bibliotekę jeśli plik nie jest chroniony przez 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 w Windows File Protection.

NOREBOOT_NOTPROTECTED

  • Ostrzega użytkownika, gdy biblioteka jest używana. Użytkownik będzie musiał zamknąć aplikacje, które ją wykorzystują.
  • Usuwa bibliotekę bez sprawdzania w Windows File Protection.

file

Lokalizacja biblioteki

B.3.3 Opcje

LIBRARY_SHELL_EXTENSION

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

LIBRARY_COM

  • Zdefiniuj przed wstawieniem makra UninstallLib, aby móc wywołać 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

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):

  • msvbvm60.dll
  • oleaut32.dll
  • olepro32.dll
  • oleaut32.dll
  • comcat.dll
  • asycfilt.dll
  • stdole2.tlb

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).


Poprzedni | Spis treści | Następny

Ostatnia aktualizacja strony: Niedziela, 6 Września 2009 (16:05:17)
Copyright © 2002 - 2010 by Paweł Porwisz. Wszelkie prawa zastrzeżone.
Strona wygenerowana w 0.001s. Hosted by tox.pl
[Valid XHTML] [Valid CSS] [Valid RSS] [Opera] [BrowseHappy]