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-
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
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
Plik z chomika:
Kapy97
Inne pliki z tego folderu:
2007.10_Instalator w 5 minut – projekt NSIS_[Projektownie Oprogramowania].pdf
(338 KB)
2006.05_Domain-Specific Modeling w generacji kompletnego kodu_[Projektowanie].pdf
(565 KB)
2008.04_Wzorce Q-Patterns_[Projektowanie].pdf
(285 KB)
Inne foldery tego chomika:
Algorytmy
Antyhaking
Aplikacje Biznesowe
Aspekty
Bazy Danych
Zgłoś jeśli
naruszono regulamin