2009-09-07 13 views
9

Opracowałem aplikację Swing na komputery stacjonarne i zastanawiam się, jak najlepiej udostępnić funkcję automatycznej aktualizacji. Wiem, że JavaWebStart zapewnia to, ale myślę, że to nie odpowiada moim potrzebom, ponieważ muszę czytać pliki lokalne, więc musiałbym podpisać słoik. Poza tym JWS wymaga dodatkowej pracy do wdrożenia na serwerze, podczas gdy teraz muszę tylko przesłać plik .jar.Funkcja automatycznej aktualizacji w aplikacji Java Swing na komputer stacjonarny

Myślałam o tym podejściu:

  • pierwszym JAR (który nigdy nie wymaga aktualizacji) ładuje się ekran powitalny, sprawdza aktualną wersję w config.xml i porównuje je do konfiguracji serwera. xml.

  • Jeśli wersja serwera jest nowsza, zapytaj użytkownika, czy chce ją zaktualizować. W takim przypadku pobierz nowy "main.jar", nowy "config.xml" i nowy splash/icon, sprawdź MD5SUM i zastąp stare pliki nowymi.

  • Uruchom "main.jar".

Nie wiem, czy próbuję odkryć nowe koło, czy jest lepszy wzór niż ten, który umieściłem powyżej.

+3

Przeprojektowujesz koło i już to wiesz, ponieważ wspomniałeś o Java WebStart. Wdrożenie na serwerze jest minimalne, wystarczy opublikować kilka plików, nie ma potrzeby stosowania aktywnego składnika na serwerze. –

+0

Sugeruję użycie certyfikatu zamiast sprawdzania hasha z https. Dzięki technice mieszania zaatakowany serwer https oznacza naruszenie wszystkich klientów automatycznych aktualizacji./Sprawdź także, czy instalujesz nowszą wersję, aby uniknąć ataków polegających na obniżeniu wersji./WebStart zapewnia ograniczony interfejs do używania plików, chociaż kontrola/dostosowanie przeglądarki plików jest ograniczona. –

+0

Myślę, że to nie jest tak minimalne. Muszę wdrożyć go na serwerze, który w ogóle nie jest kontrolowany przeze mnie. Nie mogę na przykład zmienić typów MIME. Poza tym, jak już powiedziałem, musiałby uzyskać dostęp do lokalnych plików, więc musiałbym to podpisać. – ktulur

Odpowiedz

5

Zrobiliśmy coś podobnego. Właśnie dostaliśmy go przez https i pobraliśmy plik jar. Aby dowiedzieć się, czy potrzebujesz nowego, po prostu sprawdzamy rozmiar w strumieniu. Teoretycznie to może nie działać, ale w praktyce tak się stało. Jeszcze bardziej wyszukaliśmy, zdobywając katalog, w którym znajdowały się słoiki, parsując je i pobierając każdy słoik, więc nazwa słoika również nie była zakodowana. Jest jednak kilka brzydkich punktów.

Najpierw uruchomiono nowy proces jvm, aby rozpocząć nowy słoik, nie jest tak prosty.

Po drugie, musisz mieć pewność, że nie uszkodzisz słoika, jeśli aktualizacja zakończy się niepowodzeniem.

Wreszcie, nie ma sposobu, aby zaktualizować słoik do ładowania z tym procesem.

+0

W przypadku, gdy ktoś szuka przykładu, jak to zrobić, zbudowałem prawie to przez ostatnie kilka dni: https://github.com/UrsKR/updates-r-simple –

Powiązane problemy