2012-03-02 18 views
6

Jaka byłaby logika aktualizacji mechanizmu aplikacji AIR przy użyciu środowiska wykonawczego captive? Aplikacja powinna być dystrybuowana dla systemów Windows i Mac.Jak utworzyć aktualizator dla aplikacji AIR w pakiecie ze środowiskiem wykonawczym?

utknąłem tutaj:

Należy pamiętać, że to nie musi oznaczać, że trzeba zaimplementować własną mechanizm automatycznej aktualizacji. Jeśli używasz narzędzia komercyjnego do utworzenia instalatora, może on zawierać mechanizmy automatycznej aktualizacji, które możesz wykorzystać. Z drugiej strony, jeśli potrzebujesz napisać własny mechanizm aktualizacji, powinieneś znaleźć porftelety URLStream, File i NativeProcess w implementacji.

po przeczytaniu go pod adresem: http://www.adobe.com/devnet/air/articles/air3-install-and-deployment-options.html

jest to coś podobnego (dla Windows, po zainstalowaniu aplikacji z pewnym exe lub msi instalatora):

  1. po uruchomieniu aplikacji, sprawdzić nowa wersja
  2. czy istnieje nowa wersja, pobierz ją
  3. nadpisać istniejące pliki aplikacji i plików wykonawczego AIR

Należy ją zaktualizować przed uruchomieniem aplikacji.

Jak zastąpić uruchomioną aplikację? Lub zrobić inną aplikację (aktualizator) do wymiany plików, a następnie uruchomić główną aplikację z NativeProcess?

Odpowiedz

0

Nie ma potrzeby nadpisywania. Poproś użytkownika o pobranie nowego pakietu i uruchomienie go. AIR będzie wiedział, że pakiet jest już zainstalowany jako poprzednia wersja i wyświetli monit użytkownika, jeśli chce go zaktualizować. Tak więc przepływ pracy to: sprawdź, czy jest nowsza paczka, powiadom użytkownika, że ​​jest, poproś go o pobranie i uruchomienie. Air zarządza aktualizacją.

+0

Niestety nie umieściłem : To powinna być wymuszona aktualizacja, przed uruchomieniem aplikacji. Nie wiem, czy rozumiem twoją odpowiedź ... to jest środowisko wykonawcze captive, nie mogę używać środowiska aktualizacji AIR. – Nemi

2

Zasadniczo, trzeba mieć swój punkt aplikacji do jakiegoś pliku XML na serwerze, który będzie zawierał takie rzeczy Najnowszy numer wersji, ścieżka do nowych plików na serwerze itp

Można użyć oddzielnej aplikacji, aby wykonać restart pamiętaj jednak, że skoro używasz Captive Runtime, będzie to oznaczać kolejne 40-60MB tylko dla aktualizacji (chyba że użyjesz niezalecanych hacków).

Byłoby lepiej po prostu zachęcić użytkownika do ponownego uruchomienia po pobraniu aktualizacji.

Podstępem nie jest nadpisanie pliku EXE, lecz zastąpienie pliku SWF (i wszelkich innych plików wymagających aktualizacji). Z tego, co mogę powiedzieć, EXE jest po prostu wskaźnikiem do manifestu XML i SWF.

Nie należy aktualizować plików środowiska wykonawczego AIR za każdym razem - tylko w przypadku aktualizacji krytycznych (ponieważ są to duże pliki).

+0

dziękuję, więc nie ma możliwości automatycznego ponownego uruchomienia aplikacji? – Nemi

+0

@Nemi: Jak już powiedziałem, możesz użyć innej aplikacji Captive Runtime, aby wykonać restart, ale w zależności od sytuacji, która może nie być warta dodatkowych 40-60MB. Alternatywnie możesz spróbować [this] (http://snipplr.com/view/58457/), ale pamiętam, że miałem problemy z uzyskaniem tego do pracy (jestem pewien, że nigdy tak naprawdę nie działałem poprawnie). –

+0

Zgadzam się na innego captive, do dużej ilości MB. Ta połączona metoda restartu nie działa dla .exe, ale działa dla plików .air, więc nie nadaje się do użytku dla tego, co próbuję zrobić. – Nemi

3

Dla Windows używam rodzimej Updater Application

http://code.google.com/p/nativeapplicationupdater/

i archiwum WinRAR SFX (.exe) na auto zaktualizować uwięzione aplikacje wykonawcze.

Aplikacja Native Application Updater sprawdzi wersję, pobierze nowy plik exe, zamknie aplikację i uruchomi nowy plik exe.

W opcjach SFX:

użyć ścieżki bezwzględnej, coś jak:% USERPROFILE% \ AppData \ Local \ com \ thenewkid \ appname \

punkcie "Tryby" można wybrać "Hide All" w trybie cichym. W "Instalatorze" dostaniesz go do uruchomienia pliku application.exe po ekstrakcji.

można zachować rozmiar aktualizacji niski usuwając folder Adobe AIR aż nowa wersja SDK będzie dostępny (czyli po prostu musiał wcisnąć większą aktualizację się niedawno do 3.3)

dla Mac używam Installer. Nie jest tak cichy, jak Windows Updater, ponieważ użytkownik będzie musiał kliknąć kilka monitów instalatora, ale pozwala umieścić go w swoim katalogu domowym, więc uprzywilejowanie administracyjne nie jest wymagane, co jest dla mnie najbardziej użytecznym aspektem. Przechwytywanie runtime.

1

Dla restartu powietrza w czasie wykonywania tej niewoli u mnie działa na Mac (nie sprawdzone dla Windows jeszcze) (Uwaga: UpdateAutoTest była nazwa mojego app):

var appLauncher:File; 
       appLauncher = new File(File.applicationDirectory.nativePath).parent.parent.resolvePath("Contents").resolvePath("MacOS").resolvePath("AutoUpdateTest"); 

      var npInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo; 
      npInfo.executable = appLauncher; 
      var _args:Vector.<String> = new Vector.<String>; 
      //_args.push("-a"); 

      //_args.push(); 
      npInfo.arguments = _args; 
      var np:NativeProcess = new NativeProcess; 
      np.addEventListener(NativeProcessExitEvent.EXIT, npExitHandler); 
      np.start(npInfo); 
      exit();