Sign in Join
Wiki copytemporary

LazAutoUpdater/pl: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11## Streszczenie
22
33- **LazAutoUpdate** ![](/wiki-images/9/9e/Lazautoupdate.png) to wizualny komponent dla środowiska Lazarus/FPC IDE, który ułatwia i usprawnia aktualizowanie aplikacji ze źródła online.
44- 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.
55- LazAutoUpdate pobierane jest za pośrednictwem wątku w tle, dzięki czemu użytkownik może kontynuować korzystanie z aplikacji bez przerw
66 - Oznacza to na przykład, że Twoja aplikacja może „sprawdzać dostępność aktualizacji” podczas uruchamiania, bez zatrzymywania się.
77- LazAutoUpdate jest skierowany do programistów Lazarusa dla Windows i Linux, którzy hostują swój projekt w serwisach SourceForge lub GitHub.
88- 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ę:
99 - **LazAutoUpdate.AutoUpdate**
1010- Ty (programista) masz dużą kontrolę nad zachowaniem komponentu, ale jest on prosty w użyciu.
1111- Użytkownicy końcowi postrzegają proces aktualizacji jako prosty i przejrzysty.
1212- Komponent ten został opracowany i przetestowany w systemach Windows 10 64/32-bitowym i Linux 64/32-bitowym.
1313
1414![](/wiki-images/9/94/Lauobjinsp1.jpg) ![](/wiki-images/1/18/Lauobjinsp2.jpg)
1515
1616------------------------------------------------------------------------
1717
1818## Pobieranie
1919
2020- Instalator pakietu LazAutoUpdate (Windows) lub zip (Linux) można pobrać ze [strony projektu na SourceForge](http://sourceforge.net/projects/lazautoupdate/)
2121- Lazarus OnlinePackager również zawiera pakiet LazAutoUpdate
2222
2323------------------------------------------------------------------------
2424
2525## Instalacja
2626
2727- Pobierz plik instalacyjny systemu Windows lub pliki binarne zip
2828- Windows: Zainstaluj, Linux: Rozpakuj w zapasowym folderze
2929- Użyj pakietu UpdatePack, aby tworzyć i rozpowszechniać pliki aktualizacji
3030- Użyj komponentu LazAutoUpdate, aby dodać funkcję aktualizacji do swojej aplikacji Lazarus
3131 - **Będziesz musiał rozesłać updatehm\<os\>(.exe) ze swoją aplikacją, aby LazAutoUpdate działał poprawnie**
3232 - **Nie zapomnij ustawić numerów VersionInfo w opcjach projektu Lazarus**
3333
3434------------------------------------------------------------------------
3535
3636## Przykładowa aplikacja
3737
3838- W pakiecie do pobrania znajduje się projekt 'TestApp'
3939- Skompiluj i uruchom TestApp (pamiętając o skompilowaniu i skopiowaniu odpowiedniego aktualizatora konsoli (updatehm_xxx) do folderu wykonywalnego)
4040 - Powinien aktualizować się od razu bez podejmowania dodatkowych czynności
4141- Sprawdź kod źródłowy TestApp, aby dowiedzieć się, jak wykorzystać pełny potencjał LazAutoUpdate
4242
4343------------------------------------------------------------------------
4444
4545## Umiędzynarodowienie
4646
4747- i8n: LazAutoUpdate ma folder „locale” ze wszystkimi plikami .po potrzebnymi do tłumaczenia. Językiem podstawowym jest angielski
4848
4949------------------------------------------------------------------------
5050
5151## Użycie
5252
5353- Ustaw numer wersji swojej aplikacji w Projekt/Opcje projektu.../Informacje o wersji
5454
5555(Uwaga! Jeśli tego nie zrobisz komponent może wygenerować błąd)
5656
5757- Upuść komponent na główny formularz aplikacji
5858- Ustaw właściwość SFProjectName na nazwę projektu SourceForge (ten sam tekst, który pojawia się w adresie URL strony projektu)
5959- lub... Ustaw właściwości GitHub:
6060 - Nazwa projektu GitHub: nazwa użytkownika lub organizacja
6161 - GitHubRepositoryName: Twój projekt/repozytorium
6262 - GitHubBranchOrTag: „master” dla nazwy katalogu głównego lub gałęzi GitHub „lub” Nazwa tagu
6363- W obu przypadkach ustaw folder UpdatesFolder na lokalizację plików aktualizacji (możesz pozostawić go pustym)
6464- Użyj pakietu UpdatePack, aby przesłać swoją aplikację do Internetu (SourceForge, GitHub itp.)
6565- **Następnie pozwól komponentowi zająć się szczegółami. Po prostu użyj go (np. jako pozycji menu Pomoc „Sprawdź aktualizacje”)**
6666
6767``` pascal
6868LazAutoUpdate1.AutoUpdate;
6969```
7070
7171- Jeśli nie chcesz, aby użytkownik zamknął aplikację w trakcie aktualizacji! Użyj tego kodu w obsłudze Form.CloseQuery:
7272
7373``` pascal
7474If LazAutoUpdate1.DownloadInProgress Then
7575 Begin
7676 CanClose := False;
7777 ShowMessage('Proszę czekać. Pobieranie aktualizacji nadal jest w toku.');
7878 End;
7979```
8080
8181- Po aktualizacji Twoja aplikacja może automatycznie wyświetlać „Co nowego”. Umieść tę linię w wydarzeniu OnShow swojego formularza:
8282
8383``` pascal
8484LazAutoUpdate1.ShowWhatsNewIfAvailable;
8585```
8686
8787- W ten sposób otrzymujesz szkielet kodu aktualizacji dla Twojej aplikacji. Jak widać, wszystko jest całkiem automatyczne i proste.
8888
8989### Większa kontrola
9090
9191- 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:
9292
9393``` pascal
9494If LazAutoUpdate1.NewVersionAvailable Then
9595 MessageDlg(Application.Title, 'Dostępna jest nowa wersja ' + Application.Title + LineEnding +
9696 'Kliknij ''Sprawdź nową wersję'' w menu Pomoc aby ją zaktualizować', mtConfirmation,
9797 [mbOK], 0);
9898```
9999
100100- Jeśli nie korzystasz z metody AutoUpdate, masz kontrolę nad procesem aktualizacji etapami za pomocą funkcji:
101101
102102``` pascal
103103If LazAutoUpdate1.NewVersionAvailable then ..... else ...
104104```
105105
106106``` pascal
107107If LazAutoUpdate1.DownloadNewVersion then ..... else ...
108108```
109109
110110``` pascal
111111If LazAutoUpdate1.UpdateToNewVersion then ..... else ...
112112```
113113
114114### Debugowanie
115115
116116- Jeśli ustawisz
117117
118118``` pascal
119119LazAutoUpdate1.DebugMode:=TRUE;
120120```
121121
122122wówczas możesz użyć wbudowanej metody OnDebugEvent do rejestrowania aktywności:
123123
124124``` pascal
125125procedure TForm1.LazAutoUpdate1DebugEvent(Sender: TObject; lauMethodName,
126126 lauMessage: string);
127127begin
128128// Użyj TEventLog
129129 Logger.Info('('+lauMethodName+') - ' + lauMessage);
130130end;
131131```
132132
133133Są tu też dostępne zdarzenia: OnDownloaded i OnNewVersionAvailable oraz właściwość LastError z informacjami, które można wykorzystać do debugowania.
134134
135135------------------------------------------------------------------------
136136
137137## Wsparcie
138138
139139- LazAutoUpdate jest obsługiwane przez forum Lazarus [w tym wątku](http://forum.lazarus.freepascal.org/index.php/topic,25444.0.html).
140140
141141------------------------------------------------------------------------
142142
143143## Licencja
144144
145145- LazaAutoUpdate: LGPLv2 (tak samo jak komponenty Lazarusa)
146146- Pakiet aktualizacji: GPLv2
147147
148148------------------------------------------------------------------------
149149
150150## Wdrażanie aplikacji za pomocą LazAutoUpdate
151151
152152- Użyj UpdatePack do zarządzania procesem.
153153 - 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.
154154 - 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”.
155155 - Użytkownicy Twojej aplikacji skorzystają na tym, że zawsze będzie dostępna najnowsza wersja oprogramowania
156156- Podczas testowania pamiętaj, że Twoja aplikacja testowa powinna mieć niższy numer wersji niż aplikacja do aktualizacji przechowywana online :)
157157- Jeżeli chcesz samodzielnie skomponować (lub dodać) plik zip aktualizacji, powinien on zawierać co najmniej aplikację **i** plik tekstowy 'whatsnew.txt'.
158158
159-<figure>
160-<img src="updatepack1.jpg" title="updatepack1.jpg" />
161-<figcaption>updatepack1.jpg</figcaption>
162-</figure>
159+![](/wiki-images/d/d4/Updatepack1.jpg)
163160
164-<figure>
165-<img src="updatepack2.jpg" title="updatepack2.jpg" />
166-<figcaption>updatepack2.jpg</figcaption>
167-</figure>
161+![](/wiki-images/3/30/Updatepack2.jpg)
168162
169163------------------------------------------------------------------------
170164
171165## Korzystanie z auOtherSourceFilename i auOtherSourceURL
172166
173167- Gdy ProjectType jest ustawiony na auOther, LazAutoUpdate użyje tych właściwości dla wszystkich metod. Zobacz przykładową aplikację w archiwum SVN.
174168
175169------------------------------------------------------------------------
176170
177171## Aplikacja LazAutoUpdate w zasobniku systemowym tray
178172
179173- Można ją znaleźć w folderze /trayicon kodu źródłowego.
180174- 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)
181175 - Jeśli znajdzie nową wersję, wyświetli użytkownikowi powiadomienie o konieczności aktualizacji:
182176 - Jeśli aplikacja nie działa, aktualizacja odbywa się po cichu w tle
183177 - Jeśli aplikacja jest uruchomiona, zamyka ją, a następnie wykonuje aktualizację. Aplikacja uruchomi się ponownie
184178- Systray Updater ma menu dostępne po kliknięciu prawym przyciskiem myszy:
185179 - Konfiguracja:
186180 - Użytkownik może edytować harmonogram – każda aplikacja ma swój „profil”
187181 - Uruchamia się przy starcie (Windows):
188182 - Zasobnik systemowy ładuje się bezgłośnie przy każdym rozruchu systemu Windows
189183- Zasobnik systemowy (lautraynotify) automatycznie pobiera wpisy z aplikacji korzystających z LazAutoupdate, więc nigdy nie trzeba jej konfigurować - wystarczy zainstalować raz i zapomnieć.
190184- Harmonogram jest elastyczny, może uruchamiać proces raz dziennie do raz w miesiącu
191185 - UpdatePack zajmuje się tworzeniem pliku konfiguracyjnego zasobnika systemowego dla Twojej aplikacji. Domyślnie sprawdzanie odbywa się w każdy poniedziałek o 9 rano.
192186- Aplikacja na pasku zadań działa zarówno w systemie Windows, jak i Linux — wystarczy ją wdrożyć.
193187
194188------------------------------------------------------------------------
195189
196190## Tworzenie ogólnego instalatora/aktualizatora online
197191
198192- Po upuszczeniu składnika LazAutoUpdate na formularz, można go używać do wielu aktualizacji, pobierania itp. (patrz „/testinstaller” w źródle pakietu)
199193- W przypadku zwykłego instalatora/aktualizatora należy ustawić:
200194 - VersionsINIFilename
201195 - ZipFilename
202196 - AppFileWithPath
203197 - AppVersion
204198- 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)
205199
206200- Oto przykładowy kod do użycia LazAutoUpdate do pobrania, a następnie uruchomienia aplikacji.
207201- Skompresowane pliki aplikacji (w tym 'whatsnew.txt') i plik 'mywizzyapp.ini' znajdują się w podkatalogu /updates projektu SourceForge 'mywizzy'
208202- Plik wykonywalny 'updatehm(ostype)(.exe)' znajduje się w tym samym katalogu co aplikacja aktualizacyjna
209203 - ostype=\[win32\|win64\|linux32\|linux64\]
210204 - Windows ext=(.exe)
211205- Użytkownik pobierałby mały instalator InnoSetup za pomocą samego instalatora/aktualizatora online, który z kolei pobierałby aplikacje i pliki pomocnicze.
212206 - Oczywiście „instalator” może **być** twoją główną aplikacją, z aplikacjami siostrzanymi, które można zainstalować za pomocą menu lub czymś podobnym.
213207
214208``` pascal
215209procedure TForm1.Button1Click(Sender: TObject);
216210// Uses SysUtils,LazFileUtils,ulazautoupdate itp.
217211Var sDirectoryToInstallTo: string;
218212begin
219213sDirectoryToInstallTo := ProgramDirectory + 'installed';
220214Application.Title:='My whizzy app'
221215LazAutoUpdate1.WorkingMode := lauInstall;
222216LazAutoUpdate1.ProjectType := auSourceForge;
223217LazAutoUpdate1.SFProjectname:='mywizzy';
224218LazAutoUpdate1.VersionsININame:='mywizzyapp.ini';
225219LazAutoUpdate1.ZipfileName:='mywizzyapp.zip';
226220LazAutoUpdate1.AppFileWithPath := sDirectoryToInstallTo + DirectorySeparator + 'mywizzyapp.exe';
227221// Odpowiada za stworzenie folderu
228222if not DirectoryExistsUTF8(sDirectoryToInstallTo) then ForceDirectoriesUTF8(sDirectoryToInstallTo);
229223LazAutoUpdate1.Appversion:='0.0.0.0';
230224If LazAutoUpdate1.DownloadNewVersion then
231225 begin
232226 If LazAutoUpdate1.UpdateToNewVersion then
233227 begin
234228 LazAutoUpdate1.ShortCut.Category := scUtility;
235229 LazAutoUpdate1.ShortCut.Target := LazAutoUpdate1.AppFileWithPath;
236230 LazAutoUpdate1.ShortCut.ShortcutName := Application.Title;
237231 LazAutoUpdate1.MakeShortCut; // tworzy skrót na pulpicie i wpis w menu Start w systemie Windows
238232 end;
239233 end;
240234end;
241235```
242236
243237- Następnie możesz łatwo programowo uruchomić zainstalowaną aplikację:
244238
245239``` pascal
246240// Uses asyncprocess
247241procedure TForm1.RunInstalledApp;
248242var
249243 AProcess: TAsyncProcess;
250244begin
251245 if not FileExistsUTF8(LazAutoUpdate1.AppFileWithPath) then
252246 begin
253247 ShowMessageFmt('Aplikacja %s nie istnieje! Najpierw ją zainstaluj.',
254248 [LazAutoUpdate1.AppFileWithPath]);
255249 Exit;
256250 end;
257251 AProcess := TAsyncProcess.Create(nil);
258252 try
259253 AProcess.Executable := LazAutoUpdate1.AppFileWithPath;
260254 AProcess.Execute;
261255 finally
262256 Aprocess.Free;
263257 end;
264258end;
265259```
266260
267261------------------------------------------------------------------------
268262
269263## Lista metod publicznych
270264
271265- Function NewVersionAvailable: Boolean;
272266- Function DownloadNewVersion: Boolean;
273267- Function UpdateToNewVersion: Boolean;
274268- Procedure ShowWhatsNewIfAvailable;
275269- Procedure AutoUpdate;
276270- function AppIsActive;
277271- procedure ResetAppVersion;
278272
279273------------------------------------------------------------------------
280274
281275## Lista właściwości niepublikowanych
282276
283277- GUIOnlineVersion: String;
284278- ReturnCode: Integer;
285279- DownloadInprogress: Boolean;
286280- AppFileWithPath: String;
287281- AppVersion: String;
288282- LastError: String;
289283- DebugMode: Boolean;
290284- LCLVersion: String;
291285- WidgetSet: String;
292286- FPCVersion: String;
293287- LastCompiled: String;
294288- TargetOS: String;
295289- WindowsAdminCheck: Boolean;
296290
297291------------------------------------------------------------------------
298292
299293## Wdrażanie wielu aktualizacji w jednym projekcie
300294
301295- 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
302296- Każda aplikacja, która ma zostać zaktualizowana, powinna mieć unikalną nazwę pliku version.ini. Ustaw właściwość VersionsINIFilename.
303297
304298------------------------------------------------------------------------
305299
306300## W przypadku, gdy pobieranie trwa zbyt długo
307301
308302- Właściwość VersionCountLimit określa, jak długo LazAutoUpdate będzie sprawdzać dostępność nowej wersji przed przekroczeniem limitu czasu.
309303- Właściwość DownloadCountLimit określa, jak długo LazAutoUpdate będzie próbował pobrać nową wersję przed przekroczeniem limitu czasu.
310304
311305------------------------------------------------------------------------
312306
313307## Versions.ini
314308
315309Format jest następujący:
316310
317311`;LazAutoUpdate versions file`\
318312`[versions]`\
319313`GUI=0.0.2`
320314
321315- Ten plik jest mały, dzięki czemu można go bardzo szybko pobrać
322316
323317------------------------------------------------------------------------
324318
325319## Kod źródłowy i najnowsze wersje
326320
327321- [Strona projektu](https://sourceforge.net/projects/lazautoupdate/)
328322- [SVN HTTP Checkout](https://svn.code.sf.net/p/lazarus-ccr/svn/components/lazautoupdate/latest_stable)
329323
330324------------------------------------------------------------------------
331325
332326## Bezpieczeństwo
333327
334328### Windows 10
335329
336330- 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.
337331 - 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.
338332 - 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ę.
339333 - 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.
340334
341335### Linux
342336
343337- Linux wykona aktualizację bez pokazywania konsoli aktualizacji, a użytkownik otrzymuje bezproblemową obsługę.
344338
345339------------------------------------------------------------------------
346340
347341## Przepływ pracy
348342
349343(Wyjaśnienia techniczne)
350344
351345Przepływ pracy Lazarus Auto-Updater do aktualizacji uruchomionej aplikacji wygląda następująco:
352346
353347- Aplikacja pobiera mały plik 'version.ini' z Sourceforge lub github z informacją o wersji (może to zrobić przy starcie)
354348- Aplikacja porównuje się z własną wersją wewnętrzną
355349- Jeśli dostępna jest nowa wersja
356350 - Aplikacja usuwa zawartość lokalnego folderu /updates
357351 - Pobiera aplikację, a następnie rozpakowuje ją z Internetu do lokalnego folderu /updates
358352- Aplikacja używa TAsyncProcess do uruchomienia konsoli updater.exe, przekazując mu w wierszu poleceń nazwę pliku do aktualizacji
359353- updater.exe kopiuje pobrany plik 'whatsnew.txt' do folderu aplikacji i przechodzi w stan uśpienia na kilka sekund
360354- W międzyczasie aplikacja wchodzi w pętlę sprawdzania, czy plik 'whatsnew.txt' został skopiowany do tego katalogu
361355- Aplikacja wykrywa 'whatsnew.txt' i zamyka się. (innymi słowy TProcess rozpoczął się pomyślnie)
362356- Aktualizator kopiuje /updates/UpdatedApp do katalogu aplikacji.
363357- Updater używa TProcess do uruchomienia zaktualizowanej aplikacji
364358- W Form.Show aplikacja wyświetla plik 'whatsnew.txt', a następnie go usuwa
365359
366360To co widzi użytkownik:
367361
368362- 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)
369363- Jeśli kliknięto Tak:
370364 - Pobieranie odbywa się w tle (poprzez wątek w tle). Opcjonalnie wyświetlany jest „licznik pobierania” w celu wskazania postępu.
371365 - Użytkownik nie może zamknąć aplikacji podczas pobierania (w Form.CloseQuery)
372366 - 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)
373367 - Użytkownik klika OK
374368 - 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”)
375369 - Po kilku sekundach konsola znika i uruchamia się nowa wersja aplikacji
376370 - Zaraz po wyświetleniu głównego okna pojawia się okno informacyjne 'What's New' („Co nowego”) z przyciskiem OK
377371 - Użytkownik klika przycisk OK i nigdy więcej nie widzi informacji
378372
379373------------------------------------------------------------------------
380374
381375Minesadorada
382376
383377---
384378*From the Free Pascal wiki, page "LazAutoUpdater/pl", as it stood on 2022-01-07 after a change by Slawek, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history