2007.10_Instalator w 5 minut – projekt NSIS_[Projektownie Oprogramowania].pdf

(338 KB) Pobierz
441733556 UNPDF
Programowanie
aplikacji
Krzysztof Rychlicki – Kicior
Instalator w 5 minut
– projekt NSIS
wanie, implementację i testowanie aplikacji,
przychodzi chwila, gdy trzeba zebrać wszyst-
kie potrzebne pliki i przetworzyć je tak, aby użytkow-
nik mógł je w prosty sposób wykorzystać u siebie
na komputerze. Jednym słowem – trzeba przygoto-
wać instalator, który z jednej strony wykona wszyst-
kie czynności potrzebne do działania programu na
innych komputerach, z drugiej jednak strony będzie
przyjazny dla użytkownika i nie nastręczy mu wielu
problemów w trakcie instalacji. Niniejszy artykuł za-
demonstruje na prostym przykładzie jak w kilka mi-
nut stworzyć prosty, ale funkcjonalny i ładnie wyglą-
dający instalator.
możemy korzystać z wtyczki EclipseNSIS, która
umożliwia tworzenie instalatorów NSIS za pomo-
cą kreatorów graicznych. Właśnie na tym aspek-
cie projektu NSIS skupię główną uwagę, gdyż łą-
czy on w sobie zarówno prostotę obsługi i szyb-
kość tworzenia, jak i możliwość dowolnego do-
pasowania skryptu już po zakończeniu działania
kreatora. Utworzony w ten sposób skrypt moż-
na skompilować, w wyniku czego powstaje go-
towy do rozpowszechniania instalator (w posta-
ci pliku .exe ).
Instalacja systemu instalacyjnego
W niniejszym artykule operacje związane z wtyczką
EclipseNSIS będę przeprowadzał w środowisku Ec-
lipse 3.2.1. Najpierw jednak zajmiemy się instalacją
samego systemu NSIS.
Przebiega ona w bardzo sprawny sposób. Na
karcie Choose components należy upewnić się, że
jest wybrana opcja pełnej instalacji ( Full ). Najle-
piej jest pozostawić też domyślny katalog instala-
cji – c:\Program Files\NSIS . Po instalacji urucho-
mi się NSIS Menu , jednak nie będziemy z niego
korzystać – wszystkim zajmie się wtyczka Eclip-
seNSIS.
Wtyczkę zainstalujemy w standardowy dla śro-
dowiska Eclipse sposób – za pomocą Update Mana-
ger'a. W tym celu po uruchomieniu Eclipse'a wykonaj
poniższy zestaw kroków (można go stosować rów-
nież wobec innych wtyczek Eclipse; wystarczy zmie-
nić adresy URL):
Nullsoft – nie tylko Winamp?
Firma Nullsoft, znana do tej pory głównie z popu-
larnego odtwarzacza muzyki Winamp, oferuje bar-
dzo ciekawe rozwiązanie tego problemu – udostęp-
niany na licencji open source system instalacyj-
ny – NSIS ( Nullsoft Scriptable Install System ). Sys-
tem ten umożliwia pisanie skryptów instalacyjnych,
umożliwiających wykonywanie przeróżnych opera-
cji, od tak podstawowych jak kopiowanie plików czy
dodawanie wpisów do rejestru Windows, aż po łą-
czenie z Internetem w celu pobierania dodatko-
wych danych, sprawdzanie istnienia innych, wyma-
ganych do działania aplikacji programów, etc. In-
stalatory NSIS mogą być uruchamiane na wszyst-
kich wersjach systemu Windows począwszy od
Windows 95.
Ogromną pomoc stanowi także zbiór skryptów,
napisanych przez innych programistów – użytkowni-
ków NSIS, które umożliwiają wykonywanie bardziej
złożonych operacji. Również trzy metody kompresji,
obsługa wielu języków i systemów operacyjnych czy-
nią zeń bardzo nowoczesne, dostosowane do naj-
nowszych trendów, narzędzie.
Korzystanie z tego systemu mogłoby jed-
nak wymagać sporej ilości czasu, poświęcone-
go na poznanie kolejnego języka skryptowego.
Na szczęście, dzięki fanom środowiska Eclipse
• z menu Help wybierz opcję Software Updates-
>Find and Install ;
• zaznacz opcję Search for new features to install i
kliknij Next ;
• kliknij przycisk New Remote Site ... i w pole URL
wpisz adres http://eclipsensis.sourceforge.net/
update (pole Name możesz wypełnić dowolnie),
po czym kliknij OK ;
• upewnij się, że pole obok nowo dodanego
elementu listy jest zaznaczone i kliknij Finish ;
• po chwili pojawi się nowe okno, pozwalające
wybrać elementy do instalacji. Rozwiń element
EclipseNSIS i spośród czterech elementów od-
znacz EclipseNSIS InstallOptions Editior . Kliknij
Next ;
• zaznacz opcję I accept the terms in the license
agreement i kliknij Next , a w następnym oknie
Finish ;
• zignoruj informację o braku stosownych certyika-
tów i kliknij Install All . Po chwili pojawi się komu-
Autor programuje w Javie, C# i Pythonie. Napisał książ-
ki „ J2ME. Java dla urządzeń mobilnych. Ćwiczenia ”,
J2ME. Praktyczne projekty ” i „Tablice informatyczne.
C#” (Wydawnictwo Helion, 2006, 2007) oraz szereg ar-
tykułów z zakresu Delphi, PHP, Javy, C# i Pythona. Od
kwietnia 2007 r. posiada tytuł Microsoft MVP w kategorii
Visual Developer – Visual C#.
Kontakt z autorem: kitikatpl@gmail.com
52
www.sdjournal.org Software Developer’s Journal 10/2007
K iedy programista ma już za sobą projekto-
441733556.007.png
Tworzenie instalatorów
Rysunek 1. Koniguracja głównych opcji instalatora
projekcie dodajemy krótką, acz treściwą licencję oraz dodat-
kowe kolory tła.
Następne okno stanowi najważniejszą część tworzenia
instalatora – utworzenie zestawu plików i innych elemen-
tów, które tworzą naszą aplikację. Domyślnie jest utworzo-
na sekcja Main Section , tak więc z niej skorzystamy. Musi-
my dodać do niej kilka plików; najwygodniej jest uczynić to
klikając na przycisk oznaczony plusem i wybierając opcję
File Set . Pojawi się okno Add/Edit File Set , w którym doda-
my pliki. Ważne jest określenie katalogu docelowego pli-
ków, w polu Destination (najlepiej jest zostawić wartość
domyślną – zmienną $INSTDIR , oznaczającą ścieżkę do ka-
talogu instalacyjnego). Cztery pliki, które musimy uwzględ-
nić, to mailsender.exe , IronMath.dll , IronPython.dll , licen-
cja.txt . Okno Installer Contents jest przedstawione na Ry-
sunku 2.
Ostatnie okno składa się z kilku inalnych ustawień, dzię-
ki którym można uruchomić aplikację po zakończeniu dzia-
nikat z prośbą o restart Eclipse'a, na co oczywiście należy
wyrazić zgodę.
Listing 1. Funkcja sprawdzająca obecność platformy
.NET Framework
Function IsDotNETInstalled
Push $0
Push $1
Push $2
Push $3
Push $4
ReadRegStr $4 HKEY_LOCAL_MACHINE \
"Software \M icrosoft \. NETFramework" "InstallRoot
Push $4
Exch $EXEDIR
Exch $EXEDIR
Pop $4
IfFileExists $4 0 noDotNET
StrCpy $0 0
EnumStart:
EnumRegKey $2 HKEY_LOCAL_MACHINE \
" Software \ Microsoft \. NETFramework \ Policy " $0
IntOp $0 $0 + 1
StrCmp $2 "" noDotNET
StrCpy $1 0
EnumPolicy:
EnumRegValue $3 HKEY_LOCAL_MACHINE \
" Software \ Microsoft \. NETFramework \ Policy \$2 " $1
IntOp $1 $1 + 1
StrCmp $3 "" EnumStart
IfFileExists " $4\$2.$3" foundDotNET EnumPolicy
noDotNET :
StrCpy $0 0
Goto done
foundDotNET :
StrCpy $0 1
done :
Pop $4
Pop $3
Pop $2
Pop $1
Exch $0
FunctionEnd
W tym momencie jesteśmy gotowi do przeanalizowania moż-
liwości duetu NSIS/EclipseNSIS na przykładzie prostego pro-
jektu instalacyjnego – aplikacji do wysyłania e-maili, utworzo-
nej w IronPythonie i opisanej w SDJ 3/2007.
Do dzieła!
Projekt, dla którego mamy przygotować instalator, nie jest
skomplikowany. Aplikacja składa się z pliku wykonywalnego
oraz dwóch bibliotek. Nie wymaga modyikacji Rejestru Win-
dows, jednak musimy wykonać jedną czynność – dodać do
skryptu mechanizm sprawdzania obecności platformy .NET
w systemie.
Większa część pracy nad instalatorem odbywa się w
kreatorze EclipseNSIS. Aby go uruchomić, należy wywo-
łać opcję New->Other z Menu File . Z listy możliwości należy
wybrać EclipseNSIS->NSIS Script i kliknąć Next . W tym mo-
mencie Eclipse uruchomi właściwy kreator i zacznie się na-
sza przygoda.
Już na samym początku czeka nas wybór rodzaju in-
stalatora. Mamy do wyboru trzy możliwości – instalator
standardowy ( Classic ), nowoczesny ( Modern UI – ma on
m.in. nieco bardziej przyjazny dla oka wygląd) i cichy ( Si-
lent – niewymagający ingerencji użytkownika). My wybie-
ramy klasykę.
Kolejne okno (Rysunek 1.) zawiera trzy istotne sekcje – in-
formacje o aplikacji (można podać dowolne – ja podam zgod-
ne z projektem MailSender), wybór instalatora (my wybrali-
śmy już w poprzednim kroku, więc możemy zamiast tego wy-
brać sposób kompresji danych) i opcjonalnie – informacje o
deinstalatorze.
Okno Installer Atributes umożliwia wybór opcji związa-
nych z umiejscowieniem instalowanych plików. Nasz pro-
jekt nie potrzebuje sekcji w Menu Start , wobec czego może-
my odznaczyć opcję Create Start Menu Group . Z kolei w polu
Directory Name zmieńmy domyślną wartość po prostu na c:\
MailSender – nie będziemy zaśmiecać katalogu Program Fi-
les niewielkimi aplikacjami. Kolejny ekran zawiera różne do-
datkowe, wzbogacające program dodatki – możliwość doda-
nia umowy licencyjnej, tła i ekranu powitalnego. W naszym
Software Developer’s Journal 10/2007
www.sdjournal.org
53
441733556.008.png 441733556.009.png
Programowanie
aplikacji
łania instalatora, a dodatkowo wyświetlić plik readme . Naj-
istotniejsze jest jednak zapisanie skryptu instalacyjnego. W
tym celu należy zaznaczyć opcję Filesystem w panelu In-
staller Script Save Settings , a następnie kliknąć w przycisk
„...” i wybrać nazwę pliku i lokalizację. Po kliknięciu przyci-
sku Finish zostanie wygenerowany i skompilowany skrypt
instalatora.
Listing 2. Inicjalizacja instalatora
Function . onInit
InitPluginsDir
Call IsDotNETInstalled
Pop $ R3
StrCmp $ R3 1 + 3
MessageBox MB_OK "Nie znaleziono .NET Framework!
Program ten jest wymagany do instalacji tej
aplikacji!"
Abort
FunctionEnd
Edycja gotowego skryptu
Nasz skrypt jest gotowy do użycia; możemy przetestować go
w każdej chwili wybierając opcję EclipseNSIS->Compile Script
and Test . Chociaż wtyczka EclipseNSIS nie udostępnia me-
chanizmów, które za pomocą kreatora pozwoliłyby zmienić
już istniejący skrypt, możemy się o to pokusić sami, analizując
wygenerowany kod.
Skrypt składa się z trzech części – informacji
wstępnych, zestawu sekcji oraz zestawu funkcji. Pierwsza
część zawiera dużo ustawień, które można było określić
w trakcie pracy kreatora (np. nazwa pliku wynikowego –
OutFile , pliku licencji – LicenseData , etc.), ale nie tylko –
jeśli chcemy stylizować interfejs aplikacji na starsze wersje
systemu Windows, możemy ustawić wartość XPStyle na
off . Okna instalatora są deiniowane za pomocą instrukcji
page . Instrukcje VIAddVersionKey pozwalają na określenie
kilku dodatkowych ustawień, niedostępnych w kreatorze –
np. noty copyright .
Główną część skryptu stanowią sekcje. Deiniują one
czynności instalacyjne i deinstalacyjne programu. Sek-
cja SEC0000 dokonuje kopiowania plików, zaś SEC0001
przygotowuje wpis w rejestrze systemowym, który umoż-
liwia dokonanie deinstalacji z poziomu apletu Dodaj/Usuń
programy . Pozostałe sekcje są związane z samym proce-
sem deinstalacji programu.
Całość skryptu dopełniają funkcje. Są to bloki instruk-
cji języka NSIS, wywoływane np. na początku działania
instalatora/deinstalatora (tak jak . onInit ). Można pisać
własne funkcje i ich wywołania umieszczać w kodzie za
pomocą instrukcji call . Mimo wielu interesujących kon-
strukcji, w naszym kodzie brakuje jednak istotnego za-
bezpieczenia – aplikacja może być zainstalowana tylko
w sytuacji, gdy na komputerze jest dostępny .NET Fra-
mework. W związku z tym dodamy do skryptu kod, który
zapewni nam sprawdzenie tego programu (Listing 1). Nie
będziemy wgłębiać się w konstrukcję języka, choć widać,
że za pomocą instrukcji Push i Pop możemy operować na
zmiennych (których nazwa jest zbudowana ze znaku do-
lara i liczby). Sprawdzenie obecności framework'a odby-
wa się w wyniku sprawdzenia istnienia kluczy rejestru.
Funkcja zwraca 1 , jeśli framework istnieje lub 0 w prze-
ciwnym razie. Ostatnią rzeczą do zrobienia jest wywoła-
nie funkcji w bloku inicjalizacyjnym instalatora. Odpowia-
da za niego funkcja . onInit . Domyślnie jej treść jest bar-
dzo prosta:
Function .onInit
InitPluginsDir
FunctionEnd
Jednak po dołączeniu naszego kodu staje się nieco bardziej
skomplikowana (Listing 2).
Po wywołaniu funkcji pobieramy wynik jej działania. Na-
stępnie dokonujemy sprawdzenia jego wartości (instrukcja
StrCmp ). Jeśli framework jest zainstalowany (wartość 1), wtedy
przeskakujemy w kodzie o 3 instrukcje – do zakończenia funk-
cji. W przeciwnym razie wyświetlamy okienko dialogowe i koń-
czy działanie instalatora (instrukcja Abort ).
Rysunek 2. Zestaw plików dodanych do instalatora
Podsumowanie
Nasz instalator jest jednym z prostszych przykładów, ja-
kie można utworzyć za pomocą duetu NSIS + EclipseN-
SIS. Wtyczka oferuje dużą pomoc także w zakresie tworze-
nia skryptu już po zakończeniu działania kreatora. Zachę-
cam do eksperymentów z innymi rodzajami instalatorów.
NSIS można pobrać ze strony http://nsis.sourceforge.net ;
tam też znajdują się bardzo interesujące przykłady skryp-
tów (takie jak powyższy, sprawdzające obecność różnego
rodzaju elementów, np. maszyny wirtualnej Javy). Wtyczka
EclipseNSIS jest dostępna na stronie http://eclipsensis.sou
rceforge.net.
Inicjatywa NSIS stanowi ciekawą alternatywę dla takich
komercyjnych projektów, jak chociażby InstallShield . Moim
zdaniem, jego zastosowanie w małych i średnich projektach
jest całkiem sensowne, gdyż możliwości NSIS (które nie
sposób dokładnie opisać w pojedynczym artykule) absolut-
nie wystarczają do takich celów. n
54
www.sdjournal.org Software Developer’s Journal 10/2007
441733556.010.png 441733556.001.png 441733556.002.png 441733556.003.png 441733556.004.png 441733556.005.png 441733556.006.png
 
Zgłoś jeśli naruszono regulamin