Jeśli nie masz już opakowania swój program z InnoSetup, gorąco polecamy przełączyć się do niego, ponieważ ma ułatwienia w ułatwianiu tego typu rzeczy. Możesz określić dowolne specjalne sytuacje, takie jak pliki, które nie powinny być aktualizowane, jeśli już istnieją (tj. Jeśli masz jakieś wewnętrzne pliki konfiguracyjne lub podobne rzeczy), w skrypcie InnoSetup.
Następnie, aby umożliwić komputerowi klienta uzyskanie informacji o nowych wersjach aplikacji, należy zachować bardzo mały plik na publicznym serwerze sieciowym, który ma numer wersji bieżącej wersji i adres URL do instalatora najnowszej wersji exe. Aby ten plik był przydatny, za każdym razem, gdy wydajesz nowszą wersję swojego programu, musisz zaktualizować ten plik, jak również numer wersji w skrypcie InnoSetup, a także pewną stałą APP_VERSION w twoim programie.
Potem trzeba obsłużyć te części Updater siebie:
- Wykrywanie gdy nowsza wersja jest dostępna pobierając plik obecna wersja z serwera WWW za pomocą protokołu HTTP i porównując wersję tam numer do aplikacji APP_VERSION. Upewnij się, że robisz to zapytanie w sposób, który kończy się niepowodzeniem, jeśli komputer klienta nie ma dostępu do Internetu, i który nie blokuje GUI podczas wykonywania żądania (w przypadku, gdy istnieje problem z siecią, który zmusza zapytanie do oczekiwania długi czas na timeout).
- Jeśli dostępna jest nowsza wersja, użytkownik pyta, czy chce ją zaktualizować, a jeśli tak, to znaczy, pobiera zaktualizowany instalator do katalogu TEMP. W zależności od tego, jakiego zestawu narzędzi GUI używasz, istnieją różne mechanizmy wyświetlania okna dialogowego postępu podczas pobierania; jest to dobry pomysł, ponieważ instalator prawdopodobnie będzie miał co najmniej MB.
- Zamknięcie aplikacji, uruchomienie specjalnego skryptu aktualizacyjnego in the background, a następnie ponowne uruchomienie aplikacji.
Skrypt aktualizacja będzie czekać na oryginalnym procesie całkowicie die (najprostszym sposobem, aby to zrobić, to przekazać w sposób pierwotny PID jako argument wiersza polecenia i mieć skrypt aktualizacji send a query signal 0 to that process co sekundę lub tak, dopóki nie idzie away). Następnie może uruchomić program po cichu w tle, być może wyświetlając użytkownikowi okno dialogowe "Proszę czekać ...". Po zakończeniu instalacji i zgłoszeniu powodzenia w kodzie powrotu program aktualizujący może ponownie uruchomić program.
W zależności od tego, jak duża jest twoja aplikacja, jest to bardziej marnujące przepustowość niż metoda używająca git lub innego SCM. Każda aktualizacja z takim podejściem wymagałaby pobrania całego instalatora dla najnowszej wersji aplikacji, podczas gdy SCM pobierałby tylko pliki, które uległy zmianie. Ma jednak tę zaletę, że nie wymaga specjalnych urządzeń serwerowych, z wyjątkiem zwykłego serwera WWW, i nie wymaga specjalnej instalacji klienta SCM na komputerze użytkownika.
Plus, InnoSetup jest po prostu fajny. :-)
czy aktualnie pakujesz swoją aplikację do instalacji/dystrybucji? Czy to tylko plik skryptu? Czy kod aplikacji wymaga aktualizacji lub po prostu mówisz o pobieraniu aktualizacji danych z Internetu? –