Delphi: jak automatycznie aktualizować aplikacje? [zamknięte]

Myślałem o zrolowaniu własnego kodu, aby umożliwić mojej aplikacji Delphi bezproblemową aktualizację, ponieważ będę szedł za mentalnością "release czesto, release early". Istnieją różne rozwiązania Delphi (zarówno darmowe, jak i płatne) i chciałbym zapytać, czy korzystałeś z któregokolwiek z nich, czy po prostu korzystałeś z własnych rozwiązań w tej dziedzinie. Wszelkie komentarze na temat automatycznej aktualizacji są mile widziane.

Author: Jason Plank, 2008-11-10

10 answers

Lata temu napisałem proste narzędzie, które jest uruchamiane zamiast prawdziwego programu, sprawdza aktualizacje, ładuje i instaluje je (jeśli są dostępne), a na koniec uruchamia prawdziwą aplikację.

Istnieją jednak problemy z tym podejściem, jeśli twój program działa w prawidłowo administrowanym środowisku, gdzie użytkownicy zwykle nie mają prawa zapisu do katalogów programu. Nie można już po prostu aktualizować własnego programu w takich środowiskach. Dlatego w dzisiejszych czasach wiele programów dostarczane z własnym narzędziem updater, które można zainstalować do uruchamiania z podwyższonymi uprawnieniami, dzięki czemu aktualizacje programu mogą być stosowane, nawet jeśli tylko standardowi użytkownicy kiedykolwiek logują się do systemu.

Musisz zdecydować, czy Twoja grupa docelowa może działać na kontach power user lub administrator, lub czy będziesz musiał poradzić sobie z wyżej wymienionymi problemami. Z Vistą sprawy stały się już znacznie trudniejsze.

Z tymi wszystkimi problemami (dostęp do sieci przez proxy, brak zapis uprawnień do katalogów instalacyjnych, konieczność aktualizacji plików, których sam updater używa - żeby wymienić tylko kilka) nie próbowałbym ponownie tego kodować na własną rękę. Znacznie lepiej sprawdzić, czy któreś z dostępnych rozwiązań robi wszystko, czego potrzebujesz.

 13
Author: mghie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-10 12:52:37

Jakiego schematu używasz, może być przydatne wiedzieć, że możesz zmienić nazwę biegu .plik exe. Więc zmień nazwę pliku, Kopiuj w Nowym pliku działa ładnie. Następnym razem, gdy ktoś uruchomi program, uruchomi nową wersję. Jest to oczywiście bardzo przydatne w środowisku, w którym wielu użytkowników działa tak samo .plik exe, jak w przypadku Citrix/terminal server / network share.

 17
Author: Tom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-10 15:02:15

Używam procedury Synapse GetHTTP, aby zwrócić określony zasób, a jeśli zostanie znaleziony, sprawdź w lokalnym systemie, aby sprawdzić, czy wymagana jest aktualizacja. Jeśli tak, to zasób mówi mi, która strona iść do uruchomienia i wrzucić adres URL do powłoki wykonać tak użytkownicy wyświetlana jest preferowana przeglądarka.

Najczęściej pobierany jest program instalacyjny stworzony przez InnoSetup, który aktualizuje system użytkowników i bazę danych do najnowszej wersji. Gdy potrzebna jest nowa" płatna " aktualizacja, I następnie wyślij użytkownika do formularza "zakup upgrade". Moje zasoby internetowe To strony ASP, więc mogę przekierować do innego zasobu na podstawie numeru wersji klienta.

Dla głównej aplikacji (Nasza aplikacja ma kawałek serwera i kawałek klienta) mam loader, który sprawdzi serwer, aby sprawdzić, czy Wersja pliku klienta na serwerze jest inna niż wersja na kliencie...jeśli tak, wyświetli monit, czy użytkownik chce zaktualizować/przywrócić. Wybraliśmy monit użytkownika jako czasami przypadkowy błąd może przedostać się do systemu i użytkownik musi obniżyć/uaktualnić tylko określone maszyny, aby pomóc w rozwiązywaniu problemów. Utrzymuję rekord bazy danych z minimalną wymaganą wersją, która jest aktualizowana za pomocą poprawki do bazy danych, więc jeśli Wersja musi zostać wycofana, rekord jest odpowiednio aktualizowany.

 7
Author: skamradt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-10 13:48:38

Ja też stworzyłem własne rozwiązanie oparte na Indy do ściągnięcia i http://sourceforge.net/projects/makeupdate / do łatania plików. Wcześniej korzystałem i próbowałem kilku komercyjnych narzędzi, ale nikt nie robił dokładnie tego, czego potrzebowałem.

 6
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-10 12:04:53

Używam TmxWebUpdate . Jest darmowy, prosty i daje dobrą kontrolę nad procesem. Faktycznie posiadam pakiet komponentów TMS z TWebUpdate, ale nigdy nie znalazłem dobrego powodu, aby się przełączyć.

Edit: Link zaktualizowany

 5
Author: vrad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-27 14:11:10

Zwykle używamy narzędzia innej firmy. Ale w niektórych sytuacjach nie był użyteczny, więc stworzyłem własne rozwiązanie, które było dość standardowe:

  • Pobierz xml (lub inny format) z informacjami o aktualizacji.
  • jeśli zostaną opublikowane nowsze pliki, pobierz je i zainstaluj.
 4
Author: Toon Krijthe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-10 10:20:35

Używam TWebUpdate . Działa ok i ma mnóstwo ciekawych opcji, ale dokumentacja nie jest tak wielka i natknąłem się na kilka problemów - dlatego pobieram pełny instalator, zamiast tylko plików...

Będę miał oko na to pytanie, btw...

 4
Author: stg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-10 15:31:37

My też zwijaliśmy swoje. To naprawdę nie jest zbyt trudne.

Nasz proces przebiega w następujący sposób:

  • Gdy główna aplikacja jest uruchomiona, sprawdza (używając funkcji z biblioteki synapse), czy jest dostępna aktualizacja(zakładając oczywiście, że jest skonfigurowana do sprawdzania).

  • Jeśli tak, powiadamia użytkownika i pyta, czy chce zaktualizować.

  • Jeśli tak się stanie, uruchamia aktualizator .exe i zamyka główną aplikację.

  • Updater exe pobiera nowe pliki na podstawie zawartości pobranego pliku tekstowego, zachowując pliki w pamięci .

  • Gdy program updater pobierze wszystko poprawnie, zapisze pobrane pliki na dysk, tworząc kopię zapasową wszystkich plików, które zastąpi. W ten sposób, jeśli pobieranie zostanie przerwane, nie skończysz z zainstalowaną połową plików.

  • Wreszcie ponownie uruchamia główną aplikację i zamyka się.

The trick w / Vista is that musisz mieć wpis w manifeście programu updater, aby wymusić jego działanie z prawami administratora.

 4
Author: GrandmasterB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-23 21:46:19

Używamy własnego rozwiązania, które wykonuje następujące kroki:

  1. aplikacja łączy się z zasobem http i pobiera plik informacyjny (plik tekstowy ini)do pamięci, sprawdza numer wersji najnowszej wersji.
  2. Jeśli dostępna jest nowsza wersja, Aplikacja pobiera skompresowany pakiet binarny do lokalizacji exe.
  3. Po zakończeniu pobierania użytkownik jest proszony o ponowne uruchomienie aplikacji.
  4. Po uruchomieniu aplikacja sprawdza obecność pakietu aktualizacji
  5. aplikacja wyodrębnia Zawartość pakietu (Zwykle nowy exe aplikacji, ale możliwe również dodatkowe zasoby, np. zaktualizowane pliki językowe itp.)- dla każdego pliku najpierw zmienia nazwę bieżącego / starego pliku na tymczasową, a następnie wyciąga nowy plik. Jeśli proces zawiedzie w dowolnym momencie, pliki tymczasowe zostaną przywrócone.
  6. Po zakończeniu, aplikacja wykonuje nowy exe i zamyka się.

Nie jest potrzebny dodatkowy updater, aplikacja exe może obsłużyć to wszystko sama.

Dla skompresowanego pakietu używamy naszego własnego Kreatora aktualizacji. Pakiet zawiera indeks plików z Hashem pliku, folder docelowy (względna ścieżka do głównego exe) i skompresowane pliki. Podczas aktualizacji porównujemy przechowywany hash z wyodrębnionym plikiem, aby wykryć corupted files.

Z Vistą widzę dwa rozwiązania umożliwiające standardowym kontom użytkowników aktualizację plików aplikacji:

  1. Skonfiguruj swoją konfigurację, aby zmienić uprawnienia katalogu instalacyjnego programów. W ten sposób pliki w "C:\Program Files (x86)\Twoja firma \ Twoja aplikacja" mogą być modyfikowane na kontach z ograniczonymi uprawnieniami.

    Przykładowy kod dla InnoSetup to:

    [Dirs]
    Name: "{app}"; Permissions: users-modify
    
  2. Zainstaluj pliki, które planujesz zaktualizować do folderu ProgramData zamiast katalogu zdefiniowanego przez użytkownika i użyj tego katalogu jako folderu nadpisania. Jeśli pliki istnieją w ProgramData, użyj tych, w przeciwnym razie sprawdź w katalogu install.

    InnoSetup code:

    [Files]
    Source: "C:\Your Project\YourApp.exe"; DestDir: "{commonappdata}\Company Name\App Name\"; 
    
 4
Author: BlackOut,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-30 22:13:30

Podobnie jak " stg " i "GuyWithDogs", używam TWebUpdate z TMS. Chociaż dokumentacja nie jest tak wielka, nie jest tak trudna do nauczenia się.

Z TWebUpdate, masz kilka opcji, co protokół, którego używasz, można to zrobić poprzez HTTP, FTP lub dostęp do sieci.

Dla warstwy komunikacyjnej TWebUpdate używa WinInet. W niektórych maszynach pamięć podręczna URL windows / IE może być frustating, więc dodałem rutynę, aby wyczyścić adres serwera automatycznej aktualizacji z pamięci podręcznej, aby zapewnić informacje zebrane z serwera są aktualne.

 1
Author: bprasetio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-21 12:09:27