Sign in Join
Wiki copytemporary

LazAutoUpdater/pl: what changed

Revision 2 to 3. 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
159159![](/wiki-images/d/d4/Updatepack1.jpg)
160160
161161![](/wiki-images/3/30/Updatepack2.jpg)
162162
163163------------------------------------------------------------------------
164164
165165## Korzystanie z auOtherSourceFilename i auOtherSourceURL
166166
167167- Gdy ProjectType jest ustawiony na auOther, LazAutoUpdate użyje tych właściwości dla wszystkich metod. Zobacz przykładową aplikację w archiwum SVN.
168168
169169------------------------------------------------------------------------
170170
171171## Aplikacja LazAutoUpdate w zasobniku systemowym tray
172172
173173- Można ją znaleźć w folderze /trayicon kodu źródłowego.
174174- 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)
175175 - Jeśli znajdzie nową wersję, wyświetli użytkownikowi powiadomienie o konieczności aktualizacji:
176176 - Jeśli aplikacja nie działa, aktualizacja odbywa się po cichu w tle
177177 - Jeśli aplikacja jest uruchomiona, zamyka ją, a następnie wykonuje aktualizację. Aplikacja uruchomi się ponownie
178178- Systray Updater ma menu dostępne po kliknięciu prawym przyciskiem myszy:
179179 - Konfiguracja:
180180 - Użytkownik może edytować harmonogram – każda aplikacja ma swój „profil”
181181 - Uruchamia się przy starcie (Windows):
182182 - Zasobnik systemowy ładuje się bezgłośnie przy każdym rozruchu systemu Windows
183183- Zasobnik systemowy (lautraynotify) automatycznie pobiera wpisy z aplikacji korzystających z LazAutoupdate, więc nigdy nie trzeba jej konfigurować - wystarczy zainstalować raz i zapomnieć.
184184- Harmonogram jest elastyczny, może uruchamiać proces raz dziennie do raz w miesiącu
185185 - UpdatePack zajmuje się tworzeniem pliku konfiguracyjnego zasobnika systemowego dla Twojej aplikacji. Domyślnie sprawdzanie odbywa się w każdy poniedziałek o 9 rano.
186186- Aplikacja na pasku zadań działa zarówno w systemie Windows, jak i Linux — wystarczy ją wdrożyć.
187187
188188------------------------------------------------------------------------
189189
190190## Tworzenie ogólnego instalatora/aktualizatora online
191191
192192- Po upuszczeniu składnika LazAutoUpdate na formularz, można go używać do wielu aktualizacji, pobierania itp. (patrz „/testinstaller” w źródle pakietu)
193193- W przypadku zwykłego instalatora/aktualizatora należy ustawić:
194194 - VersionsINIFilename
195195 - ZipFilename
196196 - AppFileWithPath
197197 - AppVersion
198198- 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)
199199
200200- Oto przykładowy kod do użycia LazAutoUpdate do pobrania, a następnie uruchomienia aplikacji.
201201- Skompresowane pliki aplikacji (w tym 'whatsnew.txt') i plik 'mywizzyapp.ini' znajdują się w podkatalogu /updates projektu SourceForge 'mywizzy'
202202- Plik wykonywalny 'updatehm(ostype)(.exe)' znajduje się w tym samym katalogu co aplikacja aktualizacyjna
203203 - ostype=\[win32\|win64\|linux32\|linux64\]
204204 - Windows ext=(.exe)
205205- Użytkownik pobierałby mały instalator InnoSetup za pomocą samego instalatora/aktualizatora online, który z kolei pobierałby aplikacje i pliki pomocnicze.
206206 - Oczywiście „instalator” może **być** twoją główną aplikacją, z aplikacjami siostrzanymi, które można zainstalować za pomocą menu lub czymś podobnym.
207207
208208``` pascal
209209procedure TForm1.Button1Click(Sender: TObject);
210210// Uses SysUtils,LazFileUtils,ulazautoupdate itp.
211211Var sDirectoryToInstallTo: string;
212212begin
213213sDirectoryToInstallTo := ProgramDirectory + 'installed';
214214Application.Title:='My whizzy app'
215215LazAutoUpdate1.WorkingMode := lauInstall;
216216LazAutoUpdate1.ProjectType := auSourceForge;
217217LazAutoUpdate1.SFProjectname:='mywizzy';
218218LazAutoUpdate1.VersionsININame:='mywizzyapp.ini';
219219LazAutoUpdate1.ZipfileName:='mywizzyapp.zip';
220220LazAutoUpdate1.AppFileWithPath := sDirectoryToInstallTo + DirectorySeparator + 'mywizzyapp.exe';
221221// Odpowiada za stworzenie folderu
222222if not DirectoryExistsUTF8(sDirectoryToInstallTo) then ForceDirectoriesUTF8(sDirectoryToInstallTo);
223223LazAutoUpdate1.Appversion:='0.0.0.0';
224224If LazAutoUpdate1.DownloadNewVersion then
225225 begin
226226 If LazAutoUpdate1.UpdateToNewVersion then
227227 begin
228228 LazAutoUpdate1.ShortCut.Category := scUtility;
229229 LazAutoUpdate1.ShortCut.Target := LazAutoUpdate1.AppFileWithPath;
230230 LazAutoUpdate1.ShortCut.ShortcutName := Application.Title;
231231 LazAutoUpdate1.MakeShortCut; // tworzy skrót na pulpicie i wpis w menu Start w systemie Windows
232232 end;
233233 end;
234234end;
235235```
236236
237237- Następnie możesz łatwo programowo uruchomić zainstalowaną aplikację:
238238
239239``` pascal
240240// Uses asyncprocess
241241procedure TForm1.RunInstalledApp;
242242var
243243 AProcess: TAsyncProcess;
244244begin
245245 if not FileExistsUTF8(LazAutoUpdate1.AppFileWithPath) then
246246 begin
247247 ShowMessageFmt('Aplikacja %s nie istnieje! Najpierw ją zainstaluj.',
248248 [LazAutoUpdate1.AppFileWithPath]);
249249 Exit;
250250 end;
251251 AProcess := TAsyncProcess.Create(nil);
252252 try
253253 AProcess.Executable := LazAutoUpdate1.AppFileWithPath;
254254 AProcess.Execute;
255255 finally
256256 Aprocess.Free;
257257 end;
258258end;
259259```
260260
261261------------------------------------------------------------------------
262262
263263## Lista metod publicznych
264264
265265- Function NewVersionAvailable: Boolean;
266266- Function DownloadNewVersion: Boolean;
267267- Function UpdateToNewVersion: Boolean;
268268- Procedure ShowWhatsNewIfAvailable;
269269- Procedure AutoUpdate;
270270- function AppIsActive;
271271- procedure ResetAppVersion;
272272
273273------------------------------------------------------------------------
274274
275275## Lista właściwości niepublikowanych
276276
277277- GUIOnlineVersion: String;
278278- ReturnCode: Integer;
279279- DownloadInprogress: Boolean;
280280- AppFileWithPath: String;
281281- AppVersion: String;
282282- LastError: String;
283283- DebugMode: Boolean;
284284- LCLVersion: String;
285285- WidgetSet: String;
286286- FPCVersion: String;
287287- LastCompiled: String;
288288- TargetOS: String;
289289- WindowsAdminCheck: Boolean;
290290
291291------------------------------------------------------------------------
292292
293293## Wdrażanie wielu aktualizacji w jednym projekcie
294294
295295- 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
296296- Każda aplikacja, która ma zostać zaktualizowana, powinna mieć unikalną nazwę pliku version.ini. Ustaw właściwość VersionsINIFilename.
297297
298298------------------------------------------------------------------------
299299
300300## W przypadku, gdy pobieranie trwa zbyt długo
301301
302302- Właściwość VersionCountLimit określa, jak długo LazAutoUpdate będzie sprawdzać dostępność nowej wersji przed przekroczeniem limitu czasu.
303303- Właściwość DownloadCountLimit określa, jak długo LazAutoUpdate będzie próbował pobrać nową wersję przed przekroczeniem limitu czasu.
304304
305305------------------------------------------------------------------------
306306
307307## Versions.ini
308308
309309Format jest następujący:
310310
311-`;LazAutoUpdate versions file`\
312-`[versions]`\
313-`GUI=0.0.2`
311+```text
312+;LazAutoUpdate versions file
313+[versions]
314+GUI=0.0.2
315+```
314316
315317- Ten plik jest mały, dzięki czemu można go bardzo szybko pobrać
316318
317319------------------------------------------------------------------------
318320
319321## Kod źródłowy i najnowsze wersje
320322
321323- [Strona projektu](https://sourceforge.net/projects/lazautoupdate/)
322324- [SVN HTTP Checkout](https://svn.code.sf.net/p/lazarus-ccr/svn/components/lazautoupdate/latest_stable)
323325
324326------------------------------------------------------------------------
325327
326328## Bezpieczeństwo
327329
328330### Windows 10
329331
330332- 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.
331333 - 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.
332334 - 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ę.
333335 - 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.
334336
335337### Linux
336338
337339- Linux wykona aktualizację bez pokazywania konsoli aktualizacji, a użytkownik otrzymuje bezproblemową obsługę.
338340
339341------------------------------------------------------------------------
340342
341343## Przepływ pracy
342344
343345(Wyjaśnienia techniczne)
344346
345347Przepływ pracy Lazarus Auto-Updater do aktualizacji uruchomionej aplikacji wygląda następująco:
346348
347349- Aplikacja pobiera mały plik 'version.ini' z Sourceforge lub github z informacją o wersji (może to zrobić przy starcie)
348350- Aplikacja porównuje się z własną wersją wewnętrzną
349351- Jeśli dostępna jest nowa wersja
350352 - Aplikacja usuwa zawartość lokalnego folderu /updates
351353 - Pobiera aplikację, a następnie rozpakowuje ją z Internetu do lokalnego folderu /updates
352354- Aplikacja używa TAsyncProcess do uruchomienia konsoli updater.exe, przekazując mu w wierszu poleceń nazwę pliku do aktualizacji
353355- updater.exe kopiuje pobrany plik 'whatsnew.txt' do folderu aplikacji i przechodzi w stan uśpienia na kilka sekund
354356- W międzyczasie aplikacja wchodzi w pętlę sprawdzania, czy plik 'whatsnew.txt' został skopiowany do tego katalogu
355357- Aplikacja wykrywa 'whatsnew.txt' i zamyka się. (innymi słowy TProcess rozpoczął się pomyślnie)
356358- Aktualizator kopiuje /updates/UpdatedApp do katalogu aplikacji.
357359- Updater używa TProcess do uruchomienia zaktualizowanej aplikacji
358360- W Form.Show aplikacja wyświetla plik 'whatsnew.txt', a następnie go usuwa
359361
360362To co widzi użytkownik:
361363
362364- 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)
363365- Jeśli kliknięto Tak:
364366 - Pobieranie odbywa się w tle (poprzez wątek w tle). Opcjonalnie wyświetlany jest „licznik pobierania” w celu wskazania postępu.
365367 - Użytkownik nie może zamknąć aplikacji podczas pobierania (w Form.CloseQuery)
366368 - 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)
367369 - Użytkownik klika OK
368370 - 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”)
369371 - Po kilku sekundach konsola znika i uruchamia się nowa wersja aplikacji
370372 - Zaraz po wyświetleniu głównego okna pojawia się okno informacyjne 'What's New' („Co nowego”) z przyciskiem OK
371373 - Użytkownik klika przycisk OK i nigdy więcej nie widzi informacji
372374
373375------------------------------------------------------------------------
374376
375377Minesadorada
376378
377379---
378380*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