BETA
Aby się zalogować, najpiew wybierz portal.
Aby się zarejestrować, najpiew wybierz portal.
Podaj słowa kluczowe
Słowa kluczowe muszą mieć co najmniej 3 sąsiadujące znaki alfanumeryczne
Pole zawiera niedozwolone znaki

Baza wiedzy











Updater Application Block w praktyce

31-12-2004 12:31 | sliwka
Temat artykułu związany jest z Application Building Blocks, czyli z blokami funkcjonalnymi dostarczanymi przez firmę Microsoft. Opiszę jedne z nich - Updater Application Block. Bloczek ten pozwala na utrzymywanie aplikacji „up to date”. Na początku przedstawię ogólne spojrzenie na jego architekturę. Następnie – wspierając się prostą aplikacją - pokażę w jaki sposób można go wykorzystać w praktyce.

Wstęp

 

            Application Building Blocks (w skrócie ABB) to bloczki aplikacyjne dostarczone przez firmę Microsoft. Każdy z nich, aktualnie jest ich dziewięć, realizuje pewną funkcjonalność, którą możesz wykorzystać we własnej aplikacji. Dostępne są one wraz z pełną dokumentacją, kodem źródłowym oraz licencję (pozwalającą Ci na ich bezpłatne wykorzystywanie oraz modyfikowanie). Tematem mojego artykułu jest jeden z tych bloczków.

Updater Application Block w łatwy i przyjemny sposób rozwiązuje problem utrzymywania aplikacji „up to date”. Updater Application Block wymaga aplikacji kontrolnej (kontrolera), która rozpocznie i zakończy proces aktualizacji oraz obsłuży szereg zdarzeń z nim związanych. Wyróżnia się trzy główne typy aplikacji kontrolnych:

1.       Kontroler dokonujący procesu aktualizacji wielu aplikacji na jednym komputerze. Aplikacje te są wylistowane w pliku konfiguracyjnym związanym z kontrolerem.

2.       Kontroler będący loader-em aktualizowanej aplikacji. Implementuje on metody rozpoczęcia, zakończenia procesu aktualizacji oraz wszystkich innych, które są wymagane.

3.       Aplikacja aktualizująca się samodzielnie, która jest jednocześnie kontrolerem dla samej siebie.

Na początku chciałabym przedstawić krótko i bardzo ogólnie zasadę funkcjonowania Updater Application Block. A następnie, nieco szerzej, opisać w jaki sposób w oparciu o Updater Application Block stworzyć aplikację, która aktualizuje się samodzielnie.

 

Architektura Updater Application Block

 

            Updater Application Block jest komponentem .NET implementującym klasy, które możesz wykorzystać do stworzenia kontrolera zarządzającego procesem aktualizacji aplikacji. Klasy te służą do wykrycia, walidacji oraz ściągnięcia najnowszej wersji aplikacji. Microsoft wraz z tym bloczkiem dostarcza przykładowe aplikacje, które prezentują jego możliwości. Updater Application Block składa się z pięciu zasadniczych elementów, które przedstawia rysunek 1.

 

 

Rysunek 1. Schemat wykorzystania Updater Application Block

 

 

1.       Serwer.

Najważniejszym elementem znajdującym się na serwerze jest plik w formacie XML - Manifest (jeden dla każdej aplikacji, która ma być aktualizowana) zawierający bardzo ważne informacje -  najnowszą wersję aplikacji dostępnej na serwerze oraz listę aktualizowanych plików z nią związanych. Każdy plik (również Manifest) posiada podpis cyfrowy, wykorzystany później w procesie walidacji. Opcjonalnie, na serwerze może się znaleźć post-processor, który po ściągnięciu i walidacji plików aktualizowanej aplikacji na komputerze klienckim, wykorzystany jest przez kontrolera do uruchomienia nowej wersji. Updater Application Block zawiera Manifest Utility, który administrator może wykorzystać między innymi do tworzenia pliku Manifest za każdym razem, gdy pojawi się nowa wersja aplikacji (plik ten można także utworzyć ręcznie).

2.       Aplikacja kontrolna (kontroler).

Aplikacja kontrolna wykorzystywana jest do uruchomienia i zatrzymania procesu aktualizacji aplikacji oraz reaguje na zachodzące w jej trakcie zdarzenia. W przypadku aplikacji aktualizującej się samodzielnie (jej przykład zamierzam przedstawić) ona sama dla siebie jest kontrolerem. Aktualizowana aplikacja związana jest z plikiem konfiguracyjnym, który definiuje trzy zasadnicze dla procesu aktualizacji elementy:

o        Lokalizację pliku konfiguracyjnego aktualizowanej aplikacji oraz Manifestu na serwerze (dzięki tym plikom kontroler może porównać wersje aplikacji z serwera oraz tej aktualizowanej).

o        Rodzaj Downloader’a, wykorzystywanego do kopiowania plików. Musi on implementować interfejs IDownloader zdefiniowany w Updater Application Block. Updater Application Block implementuje komponent downloader-a wykorzystującego BITS (Background Intelligent Transfer Service) do kopiowania plików. BITS nakłada spore ograniczenia na system operacyjny. Jeżeli chciałbyś/chciałabyś wykorzystać klasę Downloader’a z  Updater Application Block, musisz dysponować jednym z trzech następujących systemów operacyjnych: Windows 2000, Windows XP lub Windows Server 2003 (te trzy systemy wspierają mechanizm BITS). Jeżeli Twoja platforma nie wspiera mechanizmu BITS możesz samodzielnie zaimplementować komponent Downloader’a.

o        Rodzaj Validator’a wykorzystywany do walidacji ściągniętych plików. Komponent ten musi implementować interfejs IValidator zdefiniowany w Updater Application Block. Updater Application Block zawiera dwie klasy Validator’a symetryczny oraz RSA (oba oparte na kluczach prywatnym lub publicznym). Jeżeli żaden z nich nie spełnia Twoich oczekiwań, możesz zaimplementować własny komponent Validator’a.

3.       Downloader.

Aplikacja okresowo inicjuje proces aktualizacji. Wykorzystuje komponent Downloader’a do skopiowania pliku Manifest z serwera (dla każdej aplikacji wyróżnionej w pliku konfiguracyjnym klienta). Jeżeli na serwerze znajduje się nowsza wersja aplikacji, Downloader kopiuje pliki do tymczasowego katalogu na komputerze klienta.

4.       Validator.

Komponent ten wykorzystywany jest w sytuacji, gdy Downloader skopiuje aktualne pliki z serwera. Aplikacja wykorzystuje go do nowych plików walidacji. Są one kopiowane do właściwego katalogu, a następnie plik konfiguracyjny aplikacji jest aktualizowany (następuje poprawienie wpisu odnośnie aktualnej wersji aplikacji na komputerze klienckim).

5.       Post Procesor (opcjonalnie).

Jeżeli post-procesor był wyróżniony w pliku Manifest, to zostaje uruchomiony, a objawia się to wyłączeniem aktualnej wersji aplikacji oraz uruchomieniem nowej.

 

Wymagania

 

            Zanim przejdę do opisania procesu tworzenia aplikacji aktualizującej się samodzielnie, chciałabym wspomnieć o wymaganiach systemowych. Aby zainstalować i uruchomić Updater Application Block, potrzebujesz:

  • Microsoft Windows 2000, Windows XP Professional lub Microsoft Windows Server 2003.
  • Microsoft .NET Framework w wersji 1.1.
  • Zainstalowanego i uruchomionego serwera IIS.

 

Co zawiera pakiet Updater Application Block?

 

           Microsoft wraz z kodem źródłowym Updater Application Block dostarcza przykładowe aplikacje (obrazujące jego funkcjonalność), pełną dokumentację (polecam ją każdemu, kto chciałby pogłębić swoją wiedzę na temat Updater Application Block) oraz dwa dodatkowe programiki Manifest Utility oraz AppStart. Manifest Utility, który można wykorzystać do automatycznego tworzenia Manifest lub kluczy (prywatnego i publicznego), natomiast AppStart pełni rolę loadera – tę aplikację uruchamiamy za każdym razem, gdy chcemy uruchomić aktualizowaną aplikację. Dzięki plikowi konfiguracyjnemu AppStart.exe, który musi być do niej dołączony, aplikacja ta wie który program i w której wersji ma uruchomić.

 

Aplikacja Prostokąt

 

           Stworzony przeze mnie programik jest bardzo prosty i poza zobrazowaniem sposobu, w jaki aplikacja może się samodzielnie aktualizować, nie przedstawia prawie żadnej funkcjonalności. Tworząc go korzystałam z przykładowej aplikacji dostarczonej w pakiecie Updater Application Block – Quickstart-SelfUpdating. Nadałam mu banalną J nazwę Prostokąt.

Przygodę z Updater Application Block rozpoczynamy od utworzenia nowego projektu w Visual Studio .NET 2003 – Windows Application. Projekt nazywamy Prostokąt, następnie wrzucamy kilka kontrolek na formularz oraz dodajemy referencje do dostarczonych przez Microsoft bibliotek:

·         Microsoft.ApplicationBlocks.ApplicationUpdater,

·         Microsoft.ApplicationBlocks.ApplicationUpdater.Interfaces,

·         Microsoft.ApplicationBlocks.ExceptionManagement,

·         Microsoft.ApplicationBlocks.ExceptionManagement.Interfaces.

Referencje do bloku Exception Management są niezbędne, ponieważ blok ten wykorzystywany jest w klasach implementujących Updater Application Block. Następnie przechodzimy do kodu programu i tu musimy zaprogramować naszą aplikację tak, by spełniała nasze oczekiwania (poza zwykłą funkcjonalnością musi ona być także kontrolerem).

Teraz chciałabym opisać proces samodzielnego aktualizowania się aplikacji.

 

Aplikację uruchamiamy poprzez loadera  - program AppStart – który dzięki plikowi konfiguracyjnemu AppStart.exe (rysunek 2) wie którą aplikację (lokalizacja - D:\ProstokatClient\1.0.0.0, nazwa- Prostokat.exe ) i w której wersji(1.0.0.0) powinien uruchomić.

 

 

Rysunek 2. Zawartość pliku konfiguracyjnego AppStart.exe

 

Najważniejsze informacje zawarte w tym pliku to ścieżka do aplikacji, która ma zostać uruchomiona (D:\ProstokatClient\1.0.0.0), nazwa pliku ją uruchamiającego (Prostokat.exe) oraz zainstalowana wersja (1.0.0.0). Okienko aplikacji przedstawia rysunek 3 (poniżej).

 

 

Rysunek 3.  Wygląd okienka aplikacji

 

 

Programik pozwala Ci na „wyklikanie” różnokolorowych prostokątów w polu kontrolki PictureBox. Kolor rysowanych prostokątów możesz zmienić wybierając opcję menu Plik-Kolory. Wciskając przycisk „wyczyść” skasujesz wszystkie narysowane prostokąty. W momencie zamykania aplikacji stan narysowanych prostokątów jest zapisywany w pliku binarnym, dzięki temu podczas kolejnego startu aplikacji odtwarzany jest obraz taki jak zostawiłeś/łaś podczas ostatniego zamykania aplikacji. W przypadku braku pliku – pojawia się puste tło.

Zaraz po uruchomieniu aplikacji klasa ApplicationUpdateManager odczytuje z pliku konfiguracyjnego aplikacji Prostokąt.exe (rysunek 4)  położenie pliku Manifest (http://localhost/Prostokat/Manifest.xml) oraz informacje o rodzaju Downloader’a i Validator’a, które zostaną wykorzystane do kopiowania i walidacji plików. W sekcji <RSAKeyValue> należy wpisać zawartość pliku klucza publicznego, który powinien znajdować się na serwerze ( o tym, w jaki sposób wygenerować ten plik, napiszę za chwilę).

 

 

Rysunek 4. Zawartość pliku konfiguracyjnego Prostokat.exe

 

Ważną informacją jest to, iż mechanizm BITS, który jest wykorzystywany przez  Downloader’a wymaga aby Twój komputer był podłączony do sieci. Jeżeli nie jesteś podłączony/na do sieci, klasa ApplicationUpdateManager nie zainicjuje procesu skopiowania Manifest-u z sewera, zapisze jedynie odpowiednią informację do log-ów.

Po szczęśliwym J ściągnięciu Manifest-u (rysunek 5) następuje porównanie wersji aplkacji Twojej (wersja 1) i najnowszej wersji znajdującej się na serwerze (wersja 2 - informacja ta zawarta jest w pliku Manifest).

 

 

Rysunek 5. Zawartość pliku Manifest

 

 

Ponieważ wersja Prostokąta znajdująca się na serwerze jest bardziej aktualna niż ta, która została uruchomiona, zostaniesz poinformowany/na o zaistniałym fakcie i zapytany/na o to czy chcesz dokonać aktualizacji (rysunek 6). Jeżeli nie wyrazisz zgody, za jakiś czas pytanie zostanie Ci postawione ponownie, ponieważ co pewien czas aplikacja inicjalizuje proces aktualizacji od nowa. Jeśli jednak wyrazisz zgodę, klasa ApplicationUpdateManager skopiuje pliki wyróżnione w sekcji <files> pliku Manifest (ze względu na zbyt dużą ilość tych plików nie wyróżniłam ich na rysunku 5) z serwera do tymczasowego katalogu (wykorzystana zostaje klasa BITSDownloader implementująca interfejs IDownloader), a następnie Validator sprawdza sygnatury plików.

Updater Application Block dostarcza dwóch różnych klas implementujących interfejs IValidator. Są to RSAValidator ( asymetryczny,  używający prywatnego i publicznego klucza w procesie walidacji) oraz KeyValidator (używająca symetrycznego, kryptograficznego klucza do oznaczania i weryfikacji autentyczności plików). Ja wykorzystuje klasę RSAValidator. Jeżeli żaden z dwóch oferowanych przez Updater Application Block Validator-ów nie odpowiada Ci, możesz stworzyć własną klasę pamiętaj tylko, iż musi ona implementować interfejs IValidator. Pozostaje jeszcze wyjaśnić iż prywatny i publiczny klucz używany przez RSAValidator można wygenerować używając programu Manifest Utility ( o którym wspominałam już wcześniej, programik ten służy także do generowania Manifest-u ). Pliki z dwoma kluczami musisz umieścić na serwerze.

 

 

Rysunek 6.  Na serwerze pojawiła się nowsza wersja aplikacji

 

 

Po pomyślnie zakończonej weryfikacji plików uruchomiony zostaje Post-Procesor. Zapytany/na zostaniesz o to, czy chciałbyś/chciałabyś zakończyć działanie aktualnej wersji aplikacji i rozpocząć pracę z jej nową wersją (rysunek 7).

 

 

Rysunek 7. Możliwość uruchomienia nowej wersji aplikacji

 

 

Jeżeli wyrazisz zgodę aplikacja zostanie zamknięta, a następnie uruchomiona zostanie jej wersja 2.0.0.0. W momencie zamykania wersji 1.0.0.0 aktualny stan narysowanych prostokątów zostaje „zapisany do pliku”. W kolejnym kroku zostaje on skopiowany do katalogu, w którym znajduje się najnowsza wersja programu. Dzięki temu po uruchomieniu wersji 2.0.0.0, aplikacja rozpoczyna pracę dokładnie w tym momencie, w którym przerwała ją w poprzedniej wersji (rysunek 8).

 

 

 

Rysunek 8. Wystartowała nowa wersja aplikacji

 

 

Wersja 2 programu Prostokąt różni się od wersji poprzedniej jedynie kolorem formularza. W ten sposób już na pierwszy rzut oka widać różnice pomiędzy wersjami aplikacji J.

 

Teraz przyszedł czas by opisać, w jaki sposób zorganizować serwera, na którym umieścimy niezbędne pliki i oczywiście najnowszą wersję aplikacji. Program Prostokąt korzysta z Downloader’a dostarczonego przez Updater Application Block, dlatego narzucona zostaje nam forma serwera jako Web foldera. Jeżeli ta postaci Ci nie odpowiada, musisz zaimplementować własną klasę Downloader’a. Cała instalacja serwera sprowadza się jedynie do utworzenia wirtualnego katalogu w IIS (rysunek 9).

 

 

Rysunek 9. Instalowanie serwera

 

Ja nadałam serwerowi taką samą nazwę jak aplikacji. Ważne jest podanie lokalnej ścieżki do katalogu ( u mnie D:\ProstokatServer ). Jak można zauważyć na rysunku 9, na serwerze znajdują się dwie wersje aplikacji (1.0.0.0 oraz 2.0.0.0), Manifest oraz dwa klucze (prywatny i publiczny). Pliki te (trzy ostatnio wymienione) można wygenerować używając programiku Manifest Utility, którego interfejs przedstawia rysunek 10 (poniżej).

 

 

 

Rysunek 10. Program Manifest Utility

 

 

Z menu File możesz wybrać opcję generacji kluczy lub pliku Manifest (jak widać na rysunku 10). Do wygenerowania kluczy nie musisz wypełniać formularza – on dotyczy tylko pliku Manifest. Jego kolejne pola oznaczają:

1.       Ścieżka do katalogu zawierającego najnowszą wersję plików aplikacji.

2.       „Wirtualna” lokalizacja tych samych plików najnowszej wersji aplikacji (czyli po prostu adres Sewera).

3.       Najnowsza wersja aplikacji.

4.       Prywatny klucz (należy wskazać wcześniej wygenerowany plik).

5.       Lokalizacja biblioteki implementującej Validator.

6.       Nazwa klasy Validator’a.

Oraz jeżeli zdecydujemy się na wykorzystanie Post-Procesor’a.

7.       Lokalizacja biblioteki implementującej Post-Procesor.

8.       Nazwa klasy Post-Procesor’a.

 

Aby przetestować jak działa programik Prostokąt, musisz posiadać jeden z trzech wymaganych systemów operacyjnych, musisz mieć zainstalowanego Microsoft .NET Framework version 1.1 (minimum ta wersja), IIS oraz Updater Application Block. Następnie musisz utworzyć wirtualny katalog o nazwie Prostokąt, powiązany z katalogiem (najlepiej D:\ProstokatServer). Do tego katalogu wklej pliki znajdujące się w katalogu ProstokatServer.zip. Kolejnym etapem jest utworzenie katalogu dla aplikacji klienta (najlepiej D:\ProstokatClient), do którego wklej pliki z katalogu ProstokatClient.zip. Pamiętaj o wystartowaniu serwisu BITS i podłączeniu się do sieci J. Jeżeli zachowasz podane przeze mnie ścieżki, nie będziesz musiał/ła zmieniać ustawień w plikach konfiguracyjnych. Jeszcze jedna uwaga. Updater Application Block bardzo często dokonuje wpisów do logów. Ich przepełnienie nie ma pozytywnego wpływu na jego działanie. Proponuję więc usunąć wszystkie te pliki lub zwiększyć znacząca ich rozmiar J. A teraz czas na uruchomienie AppStart z katalogu D:\ProstokatClient. Życzę miłej zabawy.

 

Źródła

 

            Pisząc ten artykuł korzystałam ze strony http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/updater.asp . Stamtąd możesz ściągnąć cały pakiet Updater Application Block, o którego zawartości już wcześniej wspominałam. Bloczek ten zawiera bardzo szczegółową dokumentację, do której odsyłam każdego, kto chce pogłębić wiedzę na ten temat. Bardzo przydatny jest oczywiście także kod źródłowy.

 

Zakończenie

 

            Wydaje mi się, iż stosowanie Updater Application Block wspomaga i znacznie upraszcza proces aktualizacji aplikacji. Na pierwszy rzut oka może się to wydawać dość skomplikowane, ale jeżeli poświecisz trochę czasu na przestudiowanie załączonej dokumentacji oraz przejrzenie kodu, to gwarantuję Ci, iż wszystko stanie się przejrzyste i zrozumiałe. Pamiętaj, że możesz korzystać z gotowych rozwiązań Updater Application Block lub możesz tworzyć własne. Bloczek ten, nie jest pozbawiony wad. Na przykład zastosowanie mechanizmów BITS w klasie Downloadera’a nakłada spore ograniczenia na system operacyjny (jeżeli zdecydujesz się na użycie gotowych komponentów) oraz konieczność podłączenia do sieci. Częste testowanie aplikacji korzystających z bibliotek Updater Application Block, powoduje szybki przyrost logów – ja musiałam usuwać je kilka razy dziennie. W trakcie testowania aplikacji zauważyłam, że od czasu do czasu zawodzi Validator – bez żadnej przyczyny przestaje funkcjonować. Po czym podczas kolejnego uruchomienia testowanej aplikacji działa ona bez zarzutów.

 

Załączniki:

Komentarze 1

jedrekwie
jedrekwie
5 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0
Dobry artykul, jednak nie w kazdym miejscu czytelny, powiedzialbym nawet, malo zrozumialy. Na pewno duzy wplyw na to ma gigantyczna liczba wtracen, ktore mozna znalezc na kazdym kroku cztajac artykul.

pkt.

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.