Sign in Join
Wiki copytemporary

LazAutoUpdater/pl: what changed

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

Title: LazAutoUpdater/pl

OldNewLine
1+## Streszczenie
2+
3+- **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.
4+- 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.
5+- LazAutoUpdate pobierane jest za pośrednictwem wątku w tle, dzięki czemu użytkownik może kontynuować korzystanie z aplikacji bez przerw
6+ - Oznacza to na przykład, że Twoja aplikacja może „sprawdzać dostępność aktualizacji” podczas uruchamiania, bez zatrzymywania się.
7+- LazAutoUpdate jest skierowany do programistów Lazarusa dla Windows i Linux, którzy hostują swój projekt w serwisach SourceForge lub GitHub.
8+- 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ę:
9+ - **LazAutoUpdate.AutoUpdate**
10+- Ty (programista) masz dużą kontrolę nad zachowaniem komponentu, ale jest on prosty w użyciu.
11+- Użytkownicy końcowi postrzegają proces aktualizacji jako prosty i przejrzysty.
12+- Komponent ten został opracowany i przetestowany w systemach Windows 10 64/32-bitowym i Linux 64/32-bitowym.
13+
14+![](/wiki-images/9/94/Lauobjinsp1.jpg) ![](/wiki-images/1/18/Lauobjinsp2.jpg)
15+
16+------------------------------------------------------------------------
17+
18+## Pobieranie
19+
20+- Instalator pakietu LazAutoUpdate (Windows) lub zip (Linux) można pobrać ze [strony projektu na SourceForge](http://sourceforge.net/projects/lazautoupdate/)
21+- Lazarus OnlinePackager również zawiera pakiet LazAutoUpdate
22+
23+------------------------------------------------------------------------
24+
25+## Instalacja
26+
27+- Pobierz plik instalacyjny systemu Windows lub pliki binarne zip
28+- Windows: Zainstaluj, Linux: Rozpakuj w zapasowym folderze
29+- Użyj pakietu UpdatePack, aby tworzyć i rozpowszechniać pliki aktualizacji
30+- Użyj komponentu LazAutoUpdate, aby dodać funkcję aktualizacji do swojej aplikacji Lazarus
31+ - **Będziesz musiał rozesłać updatehm\<os\>(.exe) ze swoją aplikacją, aby LazAutoUpdate działał poprawnie**
32+ - **Nie zapomnij ustawić numerów VersionInfo w opcjach projektu Lazarus**
33+
34+------------------------------------------------------------------------
35+
36+## Przykładowa aplikacja
37+
38+- W pakiecie do pobrania znajduje się projekt 'TestApp'
39+- Skompiluj i uruchom TestApp (pamiętając o skompilowaniu i skopiowaniu odpowiedniego aktualizatora konsoli (updatehm_xxx) do folderu wykonywalnego)
40+ - Powinien aktualizować się od razu bez podejmowania dodatkowych czynności
41+- Sprawdź kod źródłowy TestApp, aby dowiedzieć się, jak wykorzystać pełny potencjał LazAutoUpdate
42+
43+------------------------------------------------------------------------
44+
45+## Umiędzynarodowienie
46+
47+- i8n: LazAutoUpdate ma folder „locale” ze wszystkimi plikami .po potrzebnymi do tłumaczenia. Językiem podstawowym jest angielski
48+
49+------------------------------------------------------------------------
50+
51+## Użycie
52+
53+- Ustaw numer wersji swojej aplikacji w Projekt/Opcje projektu.../Informacje o wersji
54+
55+(Uwaga! Jeśli tego nie zrobisz komponent może wygenerować błąd)
56+
57+- Upuść komponent na główny formularz aplikacji
58+- Ustaw właściwość SFProjectName na nazwę projektu SourceForge (ten sam tekst, który pojawia się w adresie URL strony projektu)
59+- lub... Ustaw właściwości GitHub:
60+ - Nazwa projektu GitHub: nazwa użytkownika lub organizacja
61+ - GitHubRepositoryName: Twój projekt/repozytorium
62+ - GitHubBranchOrTag: „master” dla nazwy katalogu głównego lub gałęzi GitHub „lub” Nazwa tagu
63+- W obu przypadkach ustaw folder UpdatesFolder na lokalizację plików aktualizacji (możesz pozostawić go pustym)
64+- Użyj pakietu UpdatePack, aby przesłać swoją aplikację do Internetu (SourceForge, GitHub itp.)
65+- **Następnie pozwól komponentowi zająć się szczegółami. Po prostu użyj go (np. jako pozycji menu Pomoc „Sprawdź aktualizacje”)**
66+
67+``` pascal
68+LazAutoUpdate1.AutoUpdate;
69+```
70+
71+- Jeśli nie chcesz, aby użytkownik zamknął aplikację w trakcie aktualizacji! Użyj tego kodu w obsłudze Form.CloseQuery:
72+
73+``` pascal
74+If LazAutoUpdate1.DownloadInProgress Then
75+ Begin
76+ CanClose := False;
77+ ShowMessage('Proszę czekać. Pobieranie aktualizacji nadal jest w toku.');
78+ End;
79+```
80+
81+- Po aktualizacji Twoja aplikacja może automatycznie wyświetlać „Co nowego”. Umieść tę linię w wydarzeniu OnShow swojego formularza:
82+
83+``` pascal
84+LazAutoUpdate1.ShowWhatsNewIfAvailable;
85+```
86+
87+- W ten sposób otrzymujesz szkielet kodu aktualizacji dla Twojej aplikacji. Jak widać, wszystko jest całkiem automatyczne i proste.
88+
89+### Większa kontrola
90+
91+- 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:
92+
93+``` pascal
94+If LazAutoUpdate1.NewVersionAvailable Then
95+ MessageDlg(Application.Title, 'Dostępna jest nowa wersja ' + Application.Title + LineEnding +
96+ 'Kliknij ''Sprawdź nową wersję'' w menu Pomoc aby ją zaktualizować', mtConfirmation,
97+ [mbOK], 0);
98+```
99+
100+- Jeśli nie korzystasz z metody AutoUpdate, masz kontrolę nad procesem aktualizacji etapami za pomocą funkcji:
101+
102+``` pascal
103+If LazAutoUpdate1.NewVersionAvailable then ..... else ...
104+```
105+
106+``` pascal
107+If LazAutoUpdate1.DownloadNewVersion then ..... else ...
108+```
109+
110+``` pascal
111+If LazAutoUpdate1.UpdateToNewVersion then ..... else ...
112+```
113+
114+### Debugowanie
115+
116+- Jeśli ustawisz
117+
118+``` pascal
119+LazAutoUpdate1.DebugMode:=TRUE;
120+```
121+
122+wówczas możesz użyć wbudowanej metody OnDebugEvent do rejestrowania aktywności:
123+
124+``` pascal
125+procedure TForm1.LazAutoUpdate1DebugEvent(Sender: TObject; lauMethodName,
126+ lauMessage: string);
127+begin
128+// Użyj TEventLog
129+ Logger.Info('('+lauMethodName+') - ' + lauMessage);
130+end;
131+```
132+
133+Są tu też dostępne zdarzenia: OnDownloaded i OnNewVersionAvailable oraz właściwość LastError z informacjami, które można wykorzystać do debugowania.
134+
135+------------------------------------------------------------------------
136+
137+## Wsparcie
138+
139+- LazAutoUpdate jest obsługiwane przez forum Lazarus [w tym wątku](http://forum.lazarus.freepascal.org/index.php/topic,25444.0.html).
140+
141+------------------------------------------------------------------------
142+
143+## Licencja
144+
145+- LazaAutoUpdate: LGPLv2 (tak samo jak komponenty Lazarusa)
146+- Pakiet aktualizacji: GPLv2
147+
148+------------------------------------------------------------------------
149+
150+## Wdrażanie aplikacji za pomocą LazAutoUpdate
151+
152+- Użyj UpdatePack do zarządzania procesem.
153+ - 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.
154+ - 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”.
155+ - Użytkownicy Twojej aplikacji skorzystają na tym, że zawsze będzie dostępna najnowsza wersja oprogramowania
156+- Podczas testowania pamiętaj, że Twoja aplikacja testowa powinna mieć niższy numer wersji niż aplikacja do aktualizacji przechowywana online :)
157+- Jeżeli chcesz samodzielnie skomponować (lub dodać) plik zip aktualizacji, powinien on zawierać co najmniej aplikację **i** plik tekstowy 'whatsnew.txt'.
158+
159+<figure>
160+<img src="updatepack1.jpg" title="updatepack1.jpg" />
161+<figcaption>updatepack1.jpg</figcaption>
162+</figure>
163+
164+<figure>
165+<img src="updatepack2.jpg" title="updatepack2.jpg" />
166+<figcaption>updatepack2.jpg</figcaption>
167+</figure>
168+
169+------------------------------------------------------------------------
170+
171+## Korzystanie z auOtherSourceFilename i auOtherSourceURL
172+
173+- Gdy ProjectType jest ustawiony na auOther, LazAutoUpdate użyje tych właściwości dla wszystkich metod. Zobacz przykładową aplikację w archiwum SVN.
174+
175+------------------------------------------------------------------------
176+
177+## Aplikacja LazAutoUpdate w zasobniku systemowym tray
178+
179+- Można ją znaleźć w folderze /trayicon kodu źródłowego.
180+- 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)
181+ - Jeśli znajdzie nową wersję, wyświetli użytkownikowi powiadomienie o konieczności aktualizacji:
182+ - Jeśli aplikacja nie działa, aktualizacja odbywa się po cichu w tle
183+ - Jeśli aplikacja jest uruchomiona, zamyka ją, a następnie wykonuje aktualizację. Aplikacja uruchomi się ponownie
184+- Systray Updater ma menu dostępne po kliknięciu prawym przyciskiem myszy:
185+ - Konfiguracja:
186+ - Użytkownik może edytować harmonogram – każda aplikacja ma swój „profil”
187+ - Uruchamia się przy starcie (Windows):
188+ - Zasobnik systemowy ładuje się bezgłośnie przy każdym rozruchu systemu Windows
189+- Zasobnik systemowy (lautraynotify) automatycznie pobiera wpisy z aplikacji korzystających z LazAutoupdate, więc nigdy nie trzeba jej konfigurować - wystarczy zainstalować raz i zapomnieć.
190+- Harmonogram jest elastyczny, może uruchamiać proces raz dziennie do raz w miesiącu
191+ - UpdatePack zajmuje się tworzeniem pliku konfiguracyjnego zasobnika systemowego dla Twojej aplikacji. Domyślnie sprawdzanie odbywa się w każdy poniedziałek o 9 rano.
192+- Aplikacja na pasku zadań działa zarówno w systemie Windows, jak i Linux — wystarczy ją wdrożyć.
193+
194+------------------------------------------------------------------------
195+
196+## Tworzenie ogólnego instalatora/aktualizatora online
197+
198+- Po upuszczeniu składnika LazAutoUpdate na formularz, można go używać do wielu aktualizacji, pobierania itp. (patrz „/testinstaller” w źródle pakietu)
199+- W przypadku zwykłego instalatora/aktualizatora należy ustawić:
200+ - VersionsINIFilename
201+ - ZipFilename
202+ - AppFileWithPath
203+ - AppVersion
204+- 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)
205+
206+- Oto przykładowy kod do użycia LazAutoUpdate do pobrania, a następnie uruchomienia aplikacji.
207+- Skompresowane pliki aplikacji (w tym 'whatsnew.txt') i plik 'mywizzyapp.ini' znajdują się w podkatalogu /updates projektu SourceForge 'mywizzy'
208+- Plik wykonywalny 'updatehm(ostype)(.exe)' znajduje się w tym samym katalogu co aplikacja aktualizacyjna
209+ - ostype=\[win32\|win64\|linux32\|linux64\]
210+ - Windows ext=(.exe)
211+- Użytkownik pobierałby mały instalator InnoSetup za pomocą samego instalatora/aktualizatora online, który z kolei pobierałby aplikacje i pliki pomocnicze.
212+ - Oczywiście „instalator” może **być** twoją główną aplikacją, z aplikacjami siostrzanymi, które można zainstalować za pomocą menu lub czymś podobnym.
213+
214+``` pascal
215+procedure TForm1.Button1Click(Sender: TObject);
216+// Uses SysUtils,LazFileUtils,ulazautoupdate itp.
217+Var sDirectoryToInstallTo: string;
218+begin
219+sDirectoryToInstallTo := ProgramDirectory + 'installed';
220+Application.Title:='My whizzy app'
221+LazAutoUpdate1.WorkingMode := lauInstall;
222+LazAutoUpdate1.ProjectType := auSourceForge;
223+LazAutoUpdate1.SFProjectname:='mywizzy';
224+LazAutoUpdate1.VersionsININame:='mywizzyapp.ini';
225+LazAutoUpdate1.ZipfileName:='mywizzyapp.zip';
226+LazAutoUpdate1.AppFileWithPath := sDirectoryToInstallTo + DirectorySeparator + 'mywizzyapp.exe';
227+// Odpowiada za stworzenie folderu
228+if not DirectoryExistsUTF8(sDirectoryToInstallTo) then ForceDirectoriesUTF8(sDirectoryToInstallTo);
229+LazAutoUpdate1.Appversion:='0.0.0.0';
230+If LazAutoUpdate1.DownloadNewVersion then
231+ begin
232+ If LazAutoUpdate1.UpdateToNewVersion then
233+ begin
234+ LazAutoUpdate1.ShortCut.Category := scUtility;
235+ LazAutoUpdate1.ShortCut.Target := LazAutoUpdate1.AppFileWithPath;
236+ LazAutoUpdate1.ShortCut.ShortcutName := Application.Title;
237+ LazAutoUpdate1.MakeShortCut; // tworzy skrót na pulpicie i wpis w menu Start w systemie Windows
238+ end;
239+ end;
240+end;
241+```
242+
243+- Następnie możesz łatwo programowo uruchomić zainstalowaną aplikację:
244+
245+``` pascal
246+// Uses asyncprocess
247+procedure TForm1.RunInstalledApp;
248+var
249+ AProcess: TAsyncProcess;
250+begin
251+ if not FileExistsUTF8(LazAutoUpdate1.AppFileWithPath) then
252+ begin
253+ ShowMessageFmt('Aplikacja %s nie istnieje! Najpierw ją zainstaluj.',
254+ [LazAutoUpdate1.AppFileWithPath]);
255+ Exit;
256+ end;
257+ AProcess := TAsyncProcess.Create(nil);
258+ try
259+ AProcess.Executable := LazAutoUpdate1.AppFileWithPath;
260+ AProcess.Execute;
261+ finally
262+ Aprocess.Free;
263+ end;
264+end;
265+```
266+
267+------------------------------------------------------------------------
268+
269+## Lista metod publicznych
270+
271+- Function NewVersionAvailable: Boolean;
272+- Function DownloadNewVersion: Boolean;
273+- Function UpdateToNewVersion: Boolean;
274+- Procedure ShowWhatsNewIfAvailable;
275+- Procedure AutoUpdate;
276+- function AppIsActive;
277+- procedure ResetAppVersion;
278+
279+------------------------------------------------------------------------
280+
281+## Lista właściwości niepublikowanych
282+
283+- GUIOnlineVersion: String;
284+- ReturnCode: Integer;
285+- DownloadInprogress: Boolean;
286+- AppFileWithPath: String;
287+- AppVersion: String;
288+- LastError: String;
289+- DebugMode: Boolean;
290+- LCLVersion: String;
291+- WidgetSet: String;
292+- FPCVersion: String;
293+- LastCompiled: String;
294+- TargetOS: String;
295+- WindowsAdminCheck: Boolean;
296+
297+------------------------------------------------------------------------
298+
299+## Wdrażanie wielu aktualizacji w jednym projekcie
300+
301+- 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
302+- Każda aplikacja, która ma zostać zaktualizowana, powinna mieć unikalną nazwę pliku version.ini. Ustaw właściwość VersionsINIFilename.
303+
304+------------------------------------------------------------------------
305+
306+## W przypadku, gdy pobieranie trwa zbyt długo
307+
308+- Właściwość VersionCountLimit określa, jak długo LazAutoUpdate będzie sprawdzać dostępność nowej wersji przed przekroczeniem limitu czasu.
309+- Właściwość DownloadCountLimit określa, jak długo LazAutoUpdate będzie próbował pobrać nową wersję przed przekroczeniem limitu czasu.
310+
311+------------------------------------------------------------------------
312+
313+## Versions.ini
314+
315+Format jest następujący:
316+
317+`;LazAutoUpdate versions file`\
318+`[versions]`\
319+`GUI=0.0.2`
320+
321+- Ten plik jest mały, dzięki czemu można go bardzo szybko pobrać
322+
323+------------------------------------------------------------------------
324+
325+## Kod źródłowy i najnowsze wersje
326+
327+- [Strona projektu](https://sourceforge.net/projects/lazautoupdate/)
328+- [SVN HTTP Checkout](https://svn.code.sf.net/p/lazarus-ccr/svn/components/lazautoupdate/latest_stable)
329+
330+------------------------------------------------------------------------
331+
332+## Bezpieczeństwo
333+
334+### Windows 10
335+
336+- 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.
337+ - 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.
338+ - 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ę.
339+ - 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.
340+
341+### Linux
342+
343+- Linux wykona aktualizację bez pokazywania konsoli aktualizacji, a użytkownik otrzymuje bezproblemową obsługę.
344+
345+------------------------------------------------------------------------
346+
347+## Przepływ pracy
348+
349+(Wyjaśnienia techniczne)
350+
351+Przepływ pracy Lazarus Auto-Updater do aktualizacji uruchomionej aplikacji wygląda następująco:
352+
353+- Aplikacja pobiera mały plik 'version.ini' z Sourceforge lub github z informacją o wersji (może to zrobić przy starcie)
354+- Aplikacja porównuje się z własną wersją wewnętrzną
355+- Jeśli dostępna jest nowa wersja
356+ - Aplikacja usuwa zawartość lokalnego folderu /updates
357+ - Pobiera aplikację, a następnie rozpakowuje ją z Internetu do lokalnego folderu /updates
358+- Aplikacja używa TAsyncProcess do uruchomienia konsoli updater.exe, przekazując mu w wierszu poleceń nazwę pliku do aktualizacji
359+- updater.exe kopiuje pobrany plik 'whatsnew.txt' do folderu aplikacji i przechodzi w stan uśpienia na kilka sekund
360+- W międzyczasie aplikacja wchodzi w pętlę sprawdzania, czy plik 'whatsnew.txt' został skopiowany do tego katalogu
361+- Aplikacja wykrywa 'whatsnew.txt' i zamyka się. (innymi słowy TProcess rozpoczął się pomyślnie)
362+- Aktualizator kopiuje /updates/UpdatedApp do katalogu aplikacji.
363+- Updater używa TProcess do uruchomienia zaktualizowanej aplikacji
364+- W Form.Show aplikacja wyświetla plik 'whatsnew.txt', a następnie go usuwa
365+
366+To co widzi użytkownik:
367+
368+- 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)
369+- Jeśli kliknięto Tak:
370+ - Pobieranie odbywa się w tle (poprzez wątek w tle). Opcjonalnie wyświetlany jest „licznik pobierania” w celu wskazania postępu.
371+ - Użytkownik nie może zamknąć aplikacji podczas pobierania (w Form.CloseQuery)
372+ - 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)
373+ - Użytkownik klika OK
374+ - 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”)
375+ - Po kilku sekundach konsola znika i uruchamia się nowa wersja aplikacji
376+ - Zaraz po wyświetleniu głównego okna pojawia się okno informacyjne 'What's New' („Co nowego”) z przyciskiem OK
377+ - Użytkownik klika przycisk OK i nigdy więcej nie widzi informacji
378+
379+------------------------------------------------------------------------
380+
381+Minesadorada
382+
383+---
384+*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