Jak wykonać mechanizm aktualizacji

dział ogólny

Jak wykonać mechanizm aktualizacji

Nowy postprzez cybersoft » sobota, 25 wrzeÅ›nia 2010, 10:15

Mam mały problem. Mając finalny program, chciałbym wprowadzić do niego możliwość aktualizowania go za pośrednictwem internetu. Wymyśliłem kilka sposobów w jaki mogło by być to robione, jednakże każdy ma swoje wady i zalety. Nie chcąc nic na razie sugerować prosił bym o jakieś wasze pomysły dotyczące tego zagadnienia. Ja również później się swoimi podzielę. Aplikacja składa się z pliku exe, kilku dll'ek oraz pliku pomocy.
Avatar użytkownika
cybersoft
Bladawiec
Bladawiec
 
Posty: 2
Dołączył(a): niedziela, 19 września 2010, 21:09
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows XP Pro
Kompilator: C++ Builder 6
Gadu Gadu: 0
    Windows XPFirefox

Re: Jak wykonać mechanizm aktualizacji

Nowy postprzez Cyfrowy Baron » sobota, 25 wrzeÅ›nia 2010, 11:24

Najprostszym sposobem aktualizacji jest sporządzenie instalatora programu za pomocą programu InstallShield lub podobnego. Instalator musi być tak skonstruowany, by w przypadku nowej instalacji instalował cały program, lub w sytuacji gdy program jest już zainstalowany, dokonywał tylko aktualizacji zmienionych plików. W przypadku InstallShield jest to tylko kwestia odpowiedniej konfiguracji projektu. Tak działa np. program Babilon, do pobrania z działu Aplikacje do pobrania.
To tyle w kwestii aktualizacji programu. Co się zaś tyczy sprawdzania, czy dostępna jest nowa aktualizacja, to musisz mieć gdzieś w sieci miejsce na serwerze. Umieszczasz na nim np. plik tekstowy zawierający informację o wersji pliku znajdującym się na serwerze. Program w chwili uruchomienia sprawdza czy połączenie z internetem jest aktywne, jeżeli tak pobiera z pliku tekstowego na serwerze numer wersji programu. Następnie program porównuje swój numer wersji z wersją w pliku tekstowym, jeżeli wersja w pliku ma większy numer, to program z tegoż samego pliku tekstowego odczytuje nazwę i lokalizację aktualizacji, czyli plik tekstowy oprócz numeru wersji musi zawierać również adres pliku z aktualizację. Potem program ściąga aktualizację. Do tego celu najlepiej jest stworzyć dodatkowy program zajmujący się tylko aktualizowaniem, tak działa większość programów. W przypadku gdy program będzie chciał pobrać aktualizację, po prostu uruchomi program do ściągania aktualizacji, który to zrobi za niego. Po pobraniu aktualizacji program aktualizujący może wysłać do użytkownika zapytanie, czy ten chcesz teraz zainstalować aktualizację. W przypadku akceptacji program aktualizujący zakończy działanie aplikacji głównej i uruchomi ściągnięty plik z aktualizacją, który sam już wykona aktualizację.
To wszystko oczywiście przy założeniu, że tworzysz do swojego programu instalator, w przeciwnym razie postępujesz podobnie, ale poszczególne pliki musisz pobierać pojedynczo, a program aktualizujący musi je również kopiować pojedynczo do katalogu aplikacji.
Użycie InstallShield ma jeszcze tą zaletę, że można tworzyć tzw. patche, czyli aktualizacja nie musi zawierać całej nowej wersji programu, lecz tylko zmiany.
Taka metoda aktualizacji ma swoje uzasadnienie, przy dużych aplikacjach. W przypadku małych do np. 20 MB, nie ma to większego sensu. Dla przykładu aktualizacje przeglądarki Firefox zawierają całą aplikację, a nie tylko zmiany.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Jak wykonać mechanizm aktualizacji

Nowy postprzez cybersoft » sobota, 25 wrzeÅ›nia 2010, 14:02

Dziękuje Baronie za odpowiedz. Przyznam że myślałem nad takim rozwiązaniem. Problem pojawia się następujący tyczący się chyba wszystkich moich pomysłów. O ile nie ma problemów z aktualizowaniem aplikacji na bieżąco czyli z wersji na wersję to problem pojawia się jeśli trzeba zaktualizować powiedzmy z wersji 1 do wersji 10. Rożnice zachodzić mogą wtedy już nie tylko na samych plikach ale strukturze katalogów, wymianie bibliotek na inne, czy też dodanie nowych. Dlatego aplikacja aktualizująca powinna działać jak takie małe repozytorium. Przedstawię jak to działa w tej chwili.

1. Po kliknięciu w aplikacji macierzystej Narzędzia -> Aktualizacja, uruchamia się zewnętrzny program aktualizujący.
2. Podczas uruchamiania tego programu pobiera on z rejestru systemu aktualnie zainstalowanÄ… wersje.
3. Po przyciśnięciu przycisku sprawdź dostępność aktualizacji program pobiera plik z serwera zawierający informacje o dostępnej wersji na serwerze.
4. Jeśli numer aplikacji jest równy wyświetlany jest komunikat o braku aktualizacji do pobrania. Jeśli zaś większy wtedy wyświetlane jest pytanie czy pobrać informacje dotyczące nowej wersji.
5. Program pobiera informacje dotyczące nowej wersji (opis zmian w stosunku do poprzedniej, listę plików do zaktualizowania)
6. Po kliknięciu przycisku aktualizuj, program prosi o zamknięcie aplikacji bazowej i dokonuje pobrania oraz instalacji poszczególnych plików.

Tak jak już mówiłem rozważałem wiele wersji aktualizacji:
1. Odinstalowanie poprzedniej wersji w całości i instalacja nowej.
2. Cała aplikacja podzielona jest na moduły i każdy moduł z osobna jest sprawdzany, usuwany oraz instalowany.
3. Oraz sprawdzanie różnic wersji i pobieranie tylko plików które uległy zmianie.

Jednak chciałbym pozostać przy aktualizacji pojedynczych plików. Zastanawiam się co zlecić serwerowi a co aplikacji sprawdzającej, i w jaki sposób trzymać pliki na serwerze.
Avatar użytkownika
cybersoft
Bladawiec
Bladawiec
 
Posty: 2
Dołączył(a): niedziela, 19 września 2010, 21:09
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows XP Pro
Kompilator: C++ Builder 6
Gadu Gadu: 0
    Windows XPFirefox

Re: Jak wykonać mechanizm aktualizacji

Nowy postprzez Cyfrowy Baron » sobota, 25 wrzeÅ›nia 2010, 14:22

Nie bardzo rozumiem. Jeżeli stworzysz instalator za pomocą InstallShield, to dokona on aktualizacji tylko tych bibliotek, modułów i plików programu (nie dotyczy plików użytkownika), które uległy zmianie.

Aktualizacja z wersji 1 do 10!? :shock: To już chyba lekka przesada! Kto tworzy w krótkim czasie tak wiele wersji programu! :o

Rożnice zachodzić mogą wtedy już nie tylko na samych plikach ale strukturze katalogów, wymianie bibliotek na inne, czy też dodanie nowych.


Instalator InstallShield to wszystko uwzględnia, poza plikami użytkownika. Za przykład podałem program Babilon, który może być aktualizowany dowolnie. instalator zawiera przykładowa bazę danych, są to pliki użytkownika. Jeżeli program jest instalowany pierwszy raz, to przykładowa baza danych również się instaluje, ale jeżeli program jest aktualizowany, to aktualizacji ulegają wszystkie pliki poza plikami przykładowej bazy danych, mimo iż w aktualizacji ta baza się znajduje. Takie rozwiązanie jest niezbędne, gdyż użytkownik tworzy w programie własną bazę danych i podczas aktualizacji pliki tej bazy nie mogą ulec podmianie na pliki z przykładowej bazy danych, gdyż spowodowałoby to uszkodzenie bazy danych użytkownika. Struktura katalogów nie może się jednak zmienić, gdyż program musi wiedzieć gdzie ma szukać bazy danych. Ten problem daje się jednak również ominąć. Trzeba tak napisać nową wersję programu by ten przy pierwszym uruchomieniu utworzył nową brakującą strukturę katalogów i przeniósł bazę danych do tejże struktury. Czyli aktualizujesz program w sposób standardowy, ale nowa wersja programu zawiera moduł, który aktualizuje pliki użytkownika, strukturę katalogów itp. W ten sposób instalator aktualizuje wszystkie pliki programu, a sam program dokonuje reszty aktualizacji.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 6 gości