Difference between revisions of "LazAutoUpdater/pl"

From Free Pascal wiki
Jump to navigationJump to search
 
(9 intermediate revisions by the same user not shown)
Line 265: Line 265:
 
----
 
----
  
==Public Methods List==
+
==Lista metod publicznych==
  
 
*Function NewVersionAvailable: Boolean;
 
*Function NewVersionAvailable: Boolean;
Line 272: Line 272:
 
*Procedure ShowWhatsNewIfAvailable;
 
*Procedure ShowWhatsNewIfAvailable;
 
*Procedure AutoUpdate;
 
*Procedure AutoUpdate;
*function AppIsActive
+
*function AppIsActive;
 
*procedure ResetAppVersion;
 
*procedure ResetAppVersion;
  
 
----
 
----
  
==Non-published Properties list==
+
==Lista właściwości niepublikowanych==
*GUIOnlineVersion: String
+
 
*ReturnCode: Integer
+
*GUIOnlineVersion: String;
*DownloadInprogress: Boolean
+
*ReturnCode: Integer;
*AppFileWithPath: String
+
*DownloadInprogress: Boolean;
*AppVersion: String
+
*AppFileWithPath: String;
 +
*AppVersion: String;
 
*LastError: String;
 
*LastError: String;
*DebugMode: boolean
+
*DebugMode: Boolean;
*LCLVersion: string
+
*LCLVersion: String;
*WidgetSet: string
+
*WidgetSet: String;
*FPCVersion: string
+
*FPCVersion: String;
*LastCompiled: string
+
*LastCompiled: String;
*TargetOS: string
+
*TargetOS: String;
*WindowsAdminCheck: boolean
+
*WindowsAdminCheck: Boolean;
  
 
----
 
----
  
==Deploying multiple updates in a single project==
+
==Wdrażanie wielu aktualizacji w jednym projekcie==
* By default, the ZipFilename is the same as your application, but you can set it to a unique value, and deploy it to your Online Files/updates irectory
+
 
* Each application to be updated should have a unique name for the versions.ini file. Set the VersionsINIFilename property.
+
* Domyślnie nazwa pliku ZipFilename jest taka sama jak w Twojej aplikacji, ale możesz ustawić jej unikalną wartość i wdrożyć ją w swoim katalogu plików/aktualizacji online
 +
* Każda aplikacja, która ma zostać zaktualizowana, powinna mieć unikalną nazwę pliku version.ini. Ustaw właściwość VersionsINIFilename.
  
 
----
 
----
  
==In case the download takes to long==
+
==W przypadku, gdy pobieranie trwa zbyt długo==
* VersionCountLimit property determines how long LazAutoUpdate will check for a new version before timing out.
+
 
* DownloadCountLimit property determines how long LazAutoUpdate will try downloading the new version before timing out.
+
* Właściwość VersionCountLimit określa, jak długo LazAutoUpdate będzie sprawdzać dostępność nowej wersji przed przekroczeniem limitu czasu.
 +
* Właściwość DownloadCountLimit określa, jak długo LazAutoUpdate będzie próbował pobrać nową wersję przed przekroczeniem limitu czasu.
  
 
----
 
----
  
 
==Versions.ini==
 
==Versions.ini==
The format is as follows:
+
 
 +
Format jest następujący:
 
  ;LazAutoUpdate versions file
 
  ;LazAutoUpdate versions file
 
  [versions]
 
  [versions]
 
  GUI=0.0.2
 
  GUI=0.0.2
*The file is small so that it is very quick to download
+
 
 +
*Ten plik jest mały, dzięki czemu można go bardzo szybko pobrać
  
 
----
 
----
  
== Source Code and latest versions==
+
==Kod źródłowy i najnowsze wersje==
  
*[https://sourceforge.net/projects/lazautoupdate/ Project Page]
+
*[https://sourceforge.net/projects/lazautoupdate/ Strona projektu]
 
*[https://svn.code.sf.net/p/lazarus-ccr/svn/components/lazautoupdate/latest_stable SVN HTTP Checkout]
 
*[https://svn.code.sf.net/p/lazarus-ccr/svn/components/lazautoupdate/latest_stable SVN HTTP Checkout]
 +
 
----
 
----
  
==Security==
+
==Bezpieczeństwo==
  
 
===Windows 10===
 
===Windows 10===
  
*Windows 10 security will not allow a non-admin user to update applications from the internet (unless it's a Windows Store App). This is a sensible policy in my opinion, and LazAutoUpdate adheres to it.
+
*Zabezpieczenia systemu Windows 10 nie pozwolą użytkownikom niebędącym administratorami na aktualizowanie aplikacji z Internetu (chyba że jest to aplikacja Windows Store). Moim zdaniem jest to rozsądna polityka i LazAutoUpdate się do niej stosuje.
**If an 'ordinary user' tries to update an app using LazAutoUpdate, all will go smoothly until the final 'Update app' phase. At that point LazAutoUpdate will pop up a dialog informing the user that an administrator account is needed for the actual update.
+
**Jeśli „zwykły użytkownik” spróbuje zaktualizować aplikację za pomocą LazAutoUpdate, wszystko pójdzie gładko aż do ostatniej fazy „Aktualizuj aplikację”. W tym momencie LazAutoUpdate wyświetli okno dialogowe informujące użytkownika, że ​​do rzeczywistej aktualizacji potrzebne jest konto administratora.
**For an 'admin user', LazAutoUpdate will pop up a UAC dialog (the same as any installer) and proceed upon clicking 'yes' to do the update.
+
** W przypadku „użytkownika administratora” LazAutoUpdate wyświetli okno dialogowe UAC (takie samo jak w przypadku każdego instalatora) i przejdzie dalej po kliknięciu „tak”, aby wykonać aktualizację.
**If you wish to circumvent this (perhaps with a manifest) LazAutoUpdate has the public property 'WindowsAdminCheck' which you can set to FALSE and avoid the dialog.
+
**Jeśli chcesz to obejść (na przykład za pomocą manifestu), LazAutoUpdate ma właściwość publiczną „WindowsAdminCheck”, którą możesz ustawić na FALSE i uniknąć okna dialogowego.
  
 
===Linux===
 
===Linux===
  
*Linux will do the update without even showing the update console, and the user gets a seamless experience.
+
*Linux wykona aktualizację bez pokazywania konsoli aktualizacji, a użytkownik otrzymuje bezproblemową obsługę.
  
 
----
 
----
  
==Workflow==
+
==Przepływ pracy==
(Technical explanation)
+
 
 +
(Wyjaśnienia techniczne)
  
The Lazarus Auto-Updater workflow for updating a running application is as follows:
+
Przepływ pracy Lazarus Auto-Updater do aktualizacji uruchomionej aplikacji wygląda następująco:
  
*App downloads a small 'version.ini' file from sourceforge or github with version info (it can do this at start-up)
+
*Aplikacja pobiera mały plik 'version.ini' z Sourceforge lub github z informacją o wersji (może to zrobić przy starcie)
*App compares with its own internal version
+
*Aplikacja porównuje się z własną wersją wewnętrzną
*If new version available
+
*Jeśli dostępna jest nowa wersja
**App deletes any contents of local /updates folder
+
**Aplikacja usuwa zawartość lokalnego folderu /updates
**App downloads then unzips it from the web into a local /updates folder
+
**Pobiera aplikację, a następnie rozpakowuje ją z Internetu do lokalnego folderu /updates
*App uses TAsyncProcess to start the console updater.exe, passing it the name of the file to be updated in the command line
+
*Aplikacja używa TAsyncProcess do uruchomienia konsoli updater.exe, przekazując mu w wierszu poleceń nazwę pliku do aktualizacji
*updater.exe copies a downloaded 'whatsnew.txt' into the App folder and enters Sleep for a few seconds
+
*updater.exe kopiuje pobrany plik 'whatsnew.txt' do folderu aplikacji i przechodzi w stan uśpienia na kilka sekund
*Meanwhile App has entered loop checking whether a 'whatsnew.txt' file has been copied into it's directory
+
*W międzyczasie aplikacja wchodzi w pętlę sprawdzania, czy plik 'whatsnew.txt' został skopiowany do tego katalogu
*App detects 'whatsnew.txt' and Closes. (in other words the TProcess has started successfully)
+
*Aplikacja wykrywa 'whatsnew.txt' i zamyka się. (innymi słowy TProcess rozpoczął się pomyślnie)
*Updater copies /updates/UpdatedApp to App directory.
+
*Aktualizator kopiuje /updates/UpdatedApp do katalogu aplikacji.
*Updater uses TProcess to start the updated app
+
*Updater używa TProcess do uruchomienia zaktualizowanej aplikacji
*On Form.Show, App displays 'whatsnew.txt' then deletes it
+
*W Form.Show aplikacja wyświetla plik 'whatsnew.txt', a następnie go usuwa
  
The User sees:
+
To co widzi użytkownik:
*Dialog: 'There's a new version of xxx available.  Would you like to download it?' Yes/No
+
*Okno dialogowe: 'There's a new version of xxx available.  Would you like to download it?' Yes/No ('Dostępna jest nowa wersja xxx. Czy chcesz go pobrać?' Tak/Nie)
*If Yes clicked:
+
*Jeśli kliknięto Tak:
**Download happens in the background (via a background thread) Optional 'download counter' is shown to indicate progress.
+
**Pobieranie odbywa się w tle (poprzez wątek w tle). Opcjonalnie wyświetlany jest „licznik pobierania” w celu wskazania postępu.
**User is prevented from closing the app whilst the download is in progress (in Form.CloseQuery)
+
**Użytkownik nie może zamknąć aplikacji podczas pobierania (w Form.CloseQuery)
**Dialog: 'The update is downloaded.  Click OK to install it and restart xxx now' OK
+
**Okno dialogowe: 'The update is downloaded.  Click OK to install it and restart xxx now' OK („Aktualizacja została pobrana. Kliknij OK, aby teraz zainstalować i zrestartować xxx' OK)
**User clicks OK
+
**Użytkownik klika OK
**A console (DOS window in Windows) opens automatically and the Application closes. The console says 'Please wait updating xxx'
+
**Konsola (okno DOS w systemie Windows) otworzy się automatycznie, a aplikacja zostanie zamknięta. Konsola wyświetla komunikat 'Please wait updating xxx' („Proszę czekać, trwa aktualizacja xxx”)
**After a couple of seconds the console disappears, and the new version of the App starts
+
**Po kilku sekundach konsola znika i uruchamia się nowa wersja aplikacji
**As soon as the main window is shown, a 'What's New' info box is shown with an OK button
+
**Zaraz po wyświetleniu głównego okna pojawia się okno informacyjne 'What's New' („Co nowego”) z przyciskiem OK
**User clicks OK button, and never sees the info again
+
**Użytkownik klika przycisk OK i nigdy więcej nie widzi informacji
  
 
----
 
----
  
 
[[User:Minesadorada|Minesadorada]]
 
[[User:Minesadorada|Minesadorada]]

Latest revision as of 00:10, 8 January 2022

English (en) polski (pl) русский (ru)

Streszczenie

  • LazAutoUpdate lazautoupdate.png to wizualny komponent dla środowiska Lazarus/FPC IDE, który ułatwia i usprawnia aktualizowanie aplikacji ze źródła online.
  • Podczas tworzenia aplikacji do dystrybucji, kodowanie procesu aktualizacji dla użytkowników może być kłopotliwe, ale użytkownicy doceniają tę łatwość (o ile nie jest to dla nich wymuszone!), a wsparcie jest łatwiejsze, jeśli wiesz, że użytkownik ma zawsze najbardziej aktualną wersję Twojej aplikacji. LazAutoUpdate został zaprojektowany tak, aby dobrze integrował się z kontrolą wersji SourceForge lub GitHub, zapewniając bezproblemowe działanie dla Ciebie i Twoich użytkowników.
  • LazAutoUpdate pobierane jest za pośrednictwem wątku w tle, dzięki czemu użytkownik może kontynuować korzystanie z aplikacji bez przerw
    • Oznacza to na przykład, że Twoja aplikacja może „sprawdzać dostępność aktualizacji” podczas uruchamiania, bez zatrzymywania się.
  • LazAutoUpdate jest skierowany do programistów Lazarusa dla Windows i Linux, którzy hostują swój projekt w serwisach SourceForge lub GitHub.
  • Upuść komponent, ustaw kilka właściwości (nazwę projektu SourceForge lub niektóre właściwości GitHub) i wywołaj jedną prostą metodę:
    • LazAutoUpdate.AutoUpdate
  • Ty (programista) masz dużą kontrolę nad zachowaniem komponentu, ale jest on prosty w użyciu.
  • Użytkownicy końcowi postrzegają proces aktualizacji jako prosty i przejrzysty.
  • Komponent ten został opracowany i przetestowany w systemach Windows 10 64/32-bitowym i Linux 64/32-bitowym.


lauobjinsp1.jpg lauobjinsp2.jpg


Pobieranie

  • Instalator pakietu LazAutoUpdate (Windows) lub zip (Linux) można pobrać ze strony projektu na SourceForge
  • Lazarus OnlinePackager również zawiera pakiet LazAutoUpdate

Instalacja

  • Pobierz plik instalacyjny systemu Windows lub pliki binarne zip
  • Windows: Zainstaluj, Linux: Rozpakuj w zapasowym folderze
  • Użyj pakietu UpdatePack, aby tworzyć i rozpowszechniać pliki aktualizacji
  • Użyj komponentu LazAutoUpdate, aby dodać funkcję aktualizacji do swojej aplikacji Lazarus
    • Będziesz musiał rozesłać updatehm<os>(.exe) ze swoją aplikacją, aby LazAutoUpdate działał poprawnie
    • Nie zapomnij ustawić numerów VersionInfo w opcjach projektu Lazarus

Przykładowa aplikacja

  • W pakiecie do pobrania znajduje się projekt 'TestApp'
  • Skompiluj i uruchom TestApp (pamiętając o skompilowaniu i skopiowaniu odpowiedniego aktualizatora konsoli (updatehm_xxx) do folderu wykonywalnego)
    • Powinien aktualizować się od razu bez podejmowania dodatkowych czynności
  • Sprawdź kod źródłowy TestApp, aby dowiedzieć się, jak wykorzystać pełny potencjał LazAutoUpdate

Umiędzynarodowienie

  • i8n: LazAutoUpdate ma folder „locale” ze wszystkimi plikami .po potrzebnymi do tłumaczenia. Językiem podstawowym jest angielski

Użycie

  • Ustaw numer wersji swojej aplikacji w Projekt/Opcje projektu.../Informacje o wersji

(Uwaga! Jeśli tego nie zrobisz komponent może wygenerować błąd)

  • Upuść komponent na główny formularz aplikacji
  • Ustaw właściwość SFProjectName na nazwę projektu SourceForge (ten sam tekst, który pojawia się w adresie URL strony projektu)
  • lub... Ustaw właściwości GitHub:
    • Nazwa projektu GitHub: nazwa użytkownika lub organizacja
    • GitHubRepositoryName: Twój projekt/repozytorium
    • GitHubBranchOrTag: „master” dla nazwy katalogu głównego lub gałęzi GitHub „lub” Nazwa tagu
  • W obu przypadkach ustaw folder UpdatesFolder na lokalizację plików aktualizacji (możesz pozostawić go pustym)
  • Użyj pakietu UpdatePack, aby przesłać swoją aplikację do Internetu (SourceForge, GitHub itp.)
  • Następnie pozwól komponentowi zająć się szczegółami. Po prostu użyj go (np. jako pozycji menu Pomoc „Sprawdź aktualizacje”)
LazAutoUpdate1.AutoUpdate;
  • Jeśli nie chcesz, aby użytkownik zamknął aplikację w trakcie aktualizacji! Użyj tego kodu w obsłudze Form.CloseQuery:
If LazAutoUpdate1.DownloadInProgress Then
  Begin
  CanClose := False;
  ShowMessage('Proszę czekać. Pobieranie aktualizacji nadal jest w toku.');
  End;
  • Po aktualizacji Twoja aplikacja może automatycznie wyświetlać „Co nowego”. Umieść tę linię w wydarzeniu OnShow swojego formularza:
LazAutoUpdate1.ShowWhatsNewIfAvailable;
  • W ten sposób otrzymujesz szkielet kodu aktualizacji dla Twojej aplikacji. Jak widać, wszystko jest całkiem automatyczne i proste.

Większa kontrola

  • Zdecyduj, czy chcesz, aby Twoja aplikacja sprawdzała dostępność aktualizacji podczas uruchamiania. Jeśli tak, to podczas aktywacji w swoim formularzu umieść następujący kod:
If LazAutoUpdate1.NewVersionAvailable Then
      MessageDlg(Application.Title, 'Dostępna jest nowa wersja ' + Application.Title + LineEnding +
        'Kliknij ''Sprawdź nową wersję'' w menu Pomoc aby ją zaktualizować', mtConfirmation,
        [mbOK], 0);
  • Jeśli nie korzystasz z metody AutoUpdate, masz kontrolę nad procesem aktualizacji etapami za pomocą funkcji:
If LazAutoUpdate1.NewVersionAvailable then ..... else ...
If LazAutoUpdate1.DownloadNewVersion then ..... else ...
If LazAutoUpdate1.UpdateToNewVersion then ..... else ...

Debugowanie

  • Jeśli ustawisz
LazAutoUpdate1.DebugMode:=TRUE;

wówczas możesz użyć wbudowanej metody OnDebugEvent do rejestrowania aktywności:

procedure TForm1.LazAutoUpdate1DebugEvent(Sender: TObject; lauMethodName,
      lauMessage: string);
begin
// Użyj TEventLog
   Logger.Info('('+lauMethodName+') - ' + lauMessage);
end;

Są tu też dostępne zdarzenia: OnDownloaded i OnNewVersionAvailable oraz właściwość LastError z informacjami, które można wykorzystać do debugowania.


Wsparcie

  • LazAutoUpdate jest obsługiwane przez forum Lazarus w tym wątku.

Licencja

  • LazaAutoUpdate: LGPLv2 (tak samo jak komponenty Lazarusa)
  • Pakiet aktualizacji: GPLv2

Wdrażanie aplikacji za pomocą LazAutoUpdate

  • Użyj UpdatePack do zarządzania procesem.
    • UpdatePack to aplikacja z graficznym interfejsem użytkownika, która umożliwia dokładne i szybkie aktualizowanie plików aktualizacji, a nawet zapewnia odpowiedni kod LazAutoUpdate dla Twojej aplikacji.
    • Wykorzystuje ona „profile”, które umożliwiają wdrażanie przyszłych aktualizacji, po prostu aktualizując numer wersji i klikając „Utwórz pakiet aktualizacji”.
    • Użytkownicy Twojej aplikacji skorzystają na tym, że zawsze będzie dostępna najnowsza wersja oprogramowania
  • Podczas testowania pamiętaj, że Twoja aplikacja testowa powinna mieć niższy numer wersji niż aplikacja do aktualizacji przechowywana online :)
  • Jeżeli chcesz samodzielnie skomponować (lub dodać) plik zip aktualizacji, powinien on zawierać co najmniej aplikację i plik tekstowy 'whatsnew.txt'.

updatepack1.jpg

updatepack2.jpg


Korzystanie z auOtherSourceFilename i auOtherSourceURL

  • Gdy ProjectType jest ustawiony na auOther, LazAutoUpdate użyje tych właściwości dla wszystkich metod. Zobacz przykładową aplikację w archiwum SVN.

Aplikacja LazAutoUpdate w zasobniku systemowym tray

  • Można ją znaleźć w folderze /trayicon kodu źródłowego.
  • Po uruchomieniu znajduje się ona w obszarze zasobnika systemowego (tray) i po cichu sprawdza dostępność aktualizacji za pomocą harmonogramu (konfigurowalne przez programistę i użytkownika)
    • Jeśli znajdzie nową wersję, wyświetli użytkownikowi powiadomienie o konieczności aktualizacji:
      • Jeśli aplikacja nie działa, aktualizacja odbywa się po cichu w tle
      • Jeśli aplikacja jest uruchomiona, zamyka ją, a następnie wykonuje aktualizację. Aplikacja uruchomi się ponownie
  • Systray Updater ma menu dostępne po kliknięciu prawym przyciskiem myszy:
    • Konfiguracja:
      • Użytkownik może edytować harmonogram – każda aplikacja ma swój „profil”
    • Uruchamia się przy starcie (Windows):
      • Zasobnik systemowy ładuje się bezgłośnie przy każdym rozruchu systemu Windows
  • Zasobnik systemowy (lautraynotify) automatycznie pobiera wpisy z aplikacji korzystających z LazAutoupdate, więc nigdy nie trzeba jej konfigurować - wystarczy zainstalować raz i zapomnieć.
  • Harmonogram jest elastyczny, może uruchamiać proces raz dziennie do raz w miesiącu
    • UpdatePack zajmuje się tworzeniem pliku konfiguracyjnego zasobnika systemowego dla Twojej aplikacji. Domyślnie sprawdzanie odbywa się w każdy poniedziałek o 9 rano.
  • Aplikacja na pasku zadań działa zarówno w systemie Windows, jak i Linux — wystarczy ją wdrożyć.

Tworzenie ogólnego instalatora/aktualizatora online

  • Po upuszczeniu składnika LazAutoUpdate na formularz, można go używać do wielu aktualizacji, pobierania itp. (patrz „/testinstaller” w źródle pakietu)
  • W przypadku zwykłego instalatora/aktualizatora należy ustawić:
    • VersionsINIFilename
    • ZipFilename
    • AppFileWithPath
    • AppVersion
  • Ustawiając te właściwości dynamicznie (być może za pomocą menu), możesz umożliwić użytkownikowi aktualizowanie wielu aplikacji hostowanych na witrynie projektu SourceForge/GitHub (lub dowolnej witrynie korzystającej z ustawień auOther - patrz wyżej)
  • Oto przykładowy kod do użycia LazAutoUpdate do pobrania, a następnie uruchomienia aplikacji.
  • Skompresowane pliki aplikacji (w tym 'whatsnew.txt') i plik 'mywizzyapp.ini' znajdują się w podkatalogu /updates projektu SourceForge 'mywizzy'
  • Plik wykonywalny 'updatehm(ostype)(.exe)' znajduje się w tym samym katalogu co aplikacja aktualizacyjna
    • ostype=[win32|win64|linux32|linux64]
    • Windows ext=(.exe)
  • Użytkownik pobierałby mały instalator InnoSetup za pomocą samego instalatora/aktualizatora online, który z kolei pobierałby aplikacje i pliki pomocnicze.
    • Oczywiście „instalator” może być twoją główną aplikacją, z aplikacjami siostrzanymi, które można zainstalować za pomocą menu lub czymś podobnym.
procedure TForm1.Button1Click(Sender: TObject);
// Uses SysUtils,LazFileUtils,ulazautoupdate itp.
Var sDirectoryToInstallTo: string;
begin
sDirectoryToInstallTo := ProgramDirectory + 'installed';
Application.Title:='My whizzy app'
LazAutoUpdate1.WorkingMode := lauInstall;
LazAutoUpdate1.ProjectType := auSourceForge;
LazAutoUpdate1.SFProjectname:='mywizzy';
LazAutoUpdate1.VersionsININame:='mywizzyapp.ini';
LazAutoUpdate1.ZipfileName:='mywizzyapp.zip';
LazAutoUpdate1.AppFileWithPath := sDirectoryToInstallTo + DirectorySeparator + 'mywizzyapp.exe';
// Odpowiada za stworzenie folderu
if not DirectoryExistsUTF8(sDirectoryToInstallTo) then ForceDirectoriesUTF8(sDirectoryToInstallTo);
LazAutoUpdate1.Appversion:='0.0.0.0';
If LazAutoUpdate1.DownloadNewVersion then
  begin
    If LazAutoUpdate1.UpdateToNewVersion then
    begin
      LazAutoUpdate1.ShortCut.Category := scUtility;
      LazAutoUpdate1.ShortCut.Target := LazAutoUpdate1.AppFileWithPath;
      LazAutoUpdate1.ShortCut.ShortcutName := Application.Title;
      LazAutoUpdate1.MakeShortCut; // tworzy skrót na pulpicie i wpis w menu Start w systemie Windows
    end;
  end;
end;
  • Następnie możesz łatwo programowo uruchomić zainstalowaną aplikację:
// Uses asyncprocess
procedure TForm1.RunInstalledApp;
var
  AProcess: TAsyncProcess;
begin
  if not FileExistsUTF8(LazAutoUpdate1.AppFileWithPath) then
  begin
    ShowMessageFmt('Aplikacja %s nie istnieje! Najpierw ją zainstaluj.',
      [LazAutoUpdate1.AppFileWithPath]);
    Exit;
  end;
  AProcess := TAsyncProcess.Create(nil);
  try
    AProcess.Executable := LazAutoUpdate1.AppFileWithPath;
    AProcess.Execute;
  finally
    Aprocess.Free;
  end;
end;

Lista metod publicznych

  • Function NewVersionAvailable: Boolean;
  • Function DownloadNewVersion: Boolean;
  • Function UpdateToNewVersion: Boolean;
  • Procedure ShowWhatsNewIfAvailable;
  • Procedure AutoUpdate;
  • function AppIsActive;
  • procedure ResetAppVersion;

Lista właściwości niepublikowanych

  • GUIOnlineVersion: String;
  • ReturnCode: Integer;
  • DownloadInprogress: Boolean;
  • AppFileWithPath: String;
  • AppVersion: String;
  • LastError: String;
  • DebugMode: Boolean;
  • LCLVersion: String;
  • WidgetSet: String;
  • FPCVersion: String;
  • LastCompiled: String;
  • TargetOS: String;
  • WindowsAdminCheck: Boolean;

Wdrażanie wielu aktualizacji w jednym projekcie

  • Domyślnie nazwa pliku ZipFilename jest taka sama jak w Twojej aplikacji, ale możesz ustawić jej unikalną wartość i wdrożyć ją w swoim katalogu plików/aktualizacji online
  • Każda aplikacja, która ma zostać zaktualizowana, powinna mieć unikalną nazwę pliku version.ini. Ustaw właściwość VersionsINIFilename.

W przypadku, gdy pobieranie trwa zbyt długo

  • Właściwość VersionCountLimit określa, jak długo LazAutoUpdate będzie sprawdzać dostępność nowej wersji przed przekroczeniem limitu czasu.
  • Właściwość DownloadCountLimit określa, jak długo LazAutoUpdate będzie próbował pobrać nową wersję przed przekroczeniem limitu czasu.

Versions.ini

Format jest następujący:

;LazAutoUpdate versions file
[versions]
GUI=0.0.2
  • Ten plik jest mały, dzięki czemu można go bardzo szybko pobrać

Kod źródłowy i najnowsze wersje


Bezpieczeństwo

Windows 10

  • Zabezpieczenia systemu Windows 10 nie pozwolą użytkownikom niebędącym administratorami na aktualizowanie aplikacji z Internetu (chyba że jest to aplikacja Windows Store). Moim zdaniem jest to rozsądna polityka i LazAutoUpdate się do niej stosuje.
    • Jeśli „zwykły użytkownik” spróbuje zaktualizować aplikację za pomocą LazAutoUpdate, wszystko pójdzie gładko aż do ostatniej fazy „Aktualizuj aplikację”. W tym momencie LazAutoUpdate wyświetli okno dialogowe informujące użytkownika, że ​​do rzeczywistej aktualizacji potrzebne jest konto administratora.
    • W przypadku „użytkownika administratora” LazAutoUpdate wyświetli okno dialogowe UAC (takie samo jak w przypadku każdego instalatora) i przejdzie dalej po kliknięciu „tak”, aby wykonać aktualizację.
    • Jeśli chcesz to obejść (na przykład za pomocą manifestu), LazAutoUpdate ma właściwość publiczną „WindowsAdminCheck”, którą możesz ustawić na FALSE i uniknąć okna dialogowego.

Linux

  • Linux wykona aktualizację bez pokazywania konsoli aktualizacji, a użytkownik otrzymuje bezproblemową obsługę.

Przepływ pracy

(Wyjaśnienia techniczne)

Przepływ pracy Lazarus Auto-Updater do aktualizacji uruchomionej aplikacji wygląda następująco:

  • Aplikacja pobiera mały plik 'version.ini' z Sourceforge lub github z informacją o wersji (może to zrobić przy starcie)
  • Aplikacja porównuje się z własną wersją wewnętrzną
  • Jeśli dostępna jest nowa wersja
    • Aplikacja usuwa zawartość lokalnego folderu /updates
    • Pobiera aplikację, a następnie rozpakowuje ją z Internetu do lokalnego folderu /updates
  • Aplikacja używa TAsyncProcess do uruchomienia konsoli updater.exe, przekazując mu w wierszu poleceń nazwę pliku do aktualizacji
  • updater.exe kopiuje pobrany plik 'whatsnew.txt' do folderu aplikacji i przechodzi w stan uśpienia na kilka sekund
  • W międzyczasie aplikacja wchodzi w pętlę sprawdzania, czy plik 'whatsnew.txt' został skopiowany do tego katalogu
  • Aplikacja wykrywa 'whatsnew.txt' i zamyka się. (innymi słowy TProcess rozpoczął się pomyślnie)
  • Aktualizator kopiuje /updates/UpdatedApp do katalogu aplikacji.
  • Updater używa TProcess do uruchomienia zaktualizowanej aplikacji
  • W Form.Show aplikacja wyświetla plik 'whatsnew.txt', a następnie go usuwa

To co widzi użytkownik:

  • Okno dialogowe: 'There's a new version of xxx available. Would you like to download it?' Yes/No ('Dostępna jest nowa wersja xxx. Czy chcesz go pobrać?' Tak/Nie)
  • Jeśli kliknięto Tak:
    • Pobieranie odbywa się w tle (poprzez wątek w tle). Opcjonalnie wyświetlany jest „licznik pobierania” w celu wskazania postępu.
    • Użytkownik nie może zamknąć aplikacji podczas pobierania (w Form.CloseQuery)
    • Okno dialogowe: 'The update is downloaded. Click OK to install it and restart xxx now' OK („Aktualizacja została pobrana. Kliknij OK, aby teraz zainstalować i zrestartować xxx' OK)
    • Użytkownik klika OK
    • Konsola (okno DOS w systemie Windows) otworzy się automatycznie, a aplikacja zostanie zamknięta. Konsola wyświetla komunikat 'Please wait updating xxx' („Proszę czekać, trwa aktualizacja xxx”)
    • Po kilku sekundach konsola znika i uruchamia się nowa wersja aplikacji
    • Zaraz po wyświetleniu głównego okna pojawia się okno informacyjne 'What's New' („Co nowego”) z przyciskiem OK
    • Użytkownik klika przycisk OK i nigdy więcej nie widzi informacji

Minesadorada