Sign in Join
Wiki copytemporary

LazAutoUpdater/ru: what changed

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

OldNewLine
11## Lazarus Auto-Updater
22
33### Резюме
44
55- LazAutoUpdate - это визуальный раскрывающийся компонент для IDE Lazarus / FPC, который делает обновление приложения из онлайн-источника более простым и интеллектуальным.
66- При создании приложения для распространения, написание процесса обновления для пользователей может быть проблематичным, однако пользователи ценят это средство (если оно не навязано им!), и поддержка проще, если вы знаете, что пользователь всегда имеет самую актуальную версию вашего приложения. LazAutoUpdate предназначен для хорошей интеграции с системой контроля версий SourceForge или GitHub, обеспечивая беспроблемную работу для вас и ваших пользователей.
77- LazAutoUpdate загружает через фоновый поток, чтобы пользователь мог продолжать использовать ваше приложение без перерыва
88 - Это означает, например, что ваше приложение может «проверять наличие обновлений» при запуске без "зависаний".
99- Компонент предназначен для разработчиков Lazarus для Windows и Linux, которые размещают свои проекты в SourceForge или GitHub.
1010- Вставьте компонент, установите пару свойств (имя вашего проекта SourceForge или некоторые свойства GitHub) и вызовите один простой метод:
1111 - **LazAutoUpdate.AutoUpdate**
1212- Вы (разработчик) имеете достаточный контроль над поведением компонента, и он достаточно прост в использовании.
1313- Конечные пользователи видят процесс обновления простым и прозрачным
1414- Протестировано и разработано в Windows 10 64/32-битной и Linux 64/32-битной
1515
16-\
1716![botton](/wiki-images/9/94/Lauobjinsp1.jpg) ![](/wiki-images/1/18/Lauobjinsp2.jpg)\
1817----
1918
2019### Загрузка
2120
2221- Установщик пакета LazAutoUpdate (Windows) или zip (Linux) можно загрузить с [сайта проекта SourceForge](http://sourceforge.net/projects/lazautoupdate/)
2322- OnlinePackageManager Lazarus также содержит LazAutoUpdate
2423
25-\
2624----
2725
2826### Установка
2927
3028- Загрузите установочный файл Windows или zip-файл linuxbinaries
3129- Windows: установить, Linux: распаковать в запасную папку
3230- Используйте UpdatePack для создания и распространения ваших файлов обновлений.
3331- Используйте компонент LazAutoUpdate, чтобы добавить функциональность обновления в ваши Lazarus'овские приложения.
3432 - **Вам нужно будет распространять updatehm\<os\>(.exe) вместе с вашим приложением, чтобы LazAutoUpdate работал правильно**
3533 - **Не забудьте устанавливать номера VersionInfo в опциях вашего проекта Lazarus**
3634
37-\
3835----
3936
4037### Пример приложения
4138
4239- В загруженном пакете находится проект «TestApp»
4340- Скомпилируйте и запустите TestApp (не забудьте скомпилировать + скопировать соответствующее средство обновления консоли (updatehm_xxx) в исполняемую папку)
4441 - Это должно обновить себя "из коробки"
4542- Проверьте исходный код TestApp, чтобы получить представление о том, как использовать LazAutoUpdate в полной мере
4643
47-\
4844----
4945
5046### Интернационализация(локализация)
5147
5248- i8n: LazAutoUpdate имеет папку 'locale' со всеми файлами .po, необходимыми для перевода. Базовый язык английский
5349
54-\
5550----
5651
5752### Использование
5853
5954- Установите номер версии для вашего приложения в Project(Проект)/Options(Настройки)/Versioninfo(Информация о версии)
6055- Перетащите компонент в основную форму вашего приложения
6156- Задайте для свойства SFProjectName имя проекта на SourceForge (тот же текст, который отображается в URL-адресе страницы вашего проекта).
6257- или .. Установите свойства GitHub:
6358 - GitHubProjectname: Имя пользователя или Организация
6459 - GitHubRepositoryName: Ваш project(проект)/repository(хранилище)
6560 - GitHubBranchOrTag: 'master' для root или имя ветки GitHub **или** имя тэга
6661- В обоих случаях укажите в UpdatesFolder расположение ваших файлов обновлений (вы можете оставить его пустым)
6762- Используйте UpdatePack для загрузки вашего приложения в Интернет (SourceForge, GitHub и т.д.)
6863- **Затем позвольте компоненту позаботиться о деталях. Просто используйте его (возможно, как пункт меню справки «Проверка обновлений»)**
6964
7065``` pascal
7166LazAutoUpdate1.AutoUpdate;
7267```
7368
7469- Вы не хотите, чтобы пользователь закрывал ваше приложение в середине обновления? Используйте этот код в обработчике Form.CloseQuery:
7570
7671``` pascal
7772If LazAutoUpdate1.DownloadInProgress Then
7873 Begin
7974 CanClose := False;
8075 ShowMessage('Пожалуйста, подождите. Загрузка все еще продолжается.');
8176 End;
8277```
8378
8479- После обновления ваше приложение может автоматически показывать «Что нового». Поместите эту строку в событие OnShow вашей формы:
8580
8681``` pascal
8782LazAutoUpdate1.ShowWhatsNewIfAvailable;
8883```
8984
9085- Это дает вам «каркасность»(бареюон-основу) кода обновления для вашего приложения. Как видите, все довольно просто и автоматизировано.
9186
9287#### Больший контроль
9388
9489- Вы хотите, чтобы ваше приложение проверяло наличие обновлений при запуске? В этом случае, в вашем обработчике form.activate:
9590
9691``` pascal
9792If LazAutoUpdate1.NewVersionAvailable Then
9893 MessageDlg(Application.Title, 'Новая версия ' + Application.Title +
9994 ' - доступна.' + LineEnding +
10095 'Нажмите «Проверить наличие новой версии» в меню «Справка», чтобы обновиться.', mtConfirmation,
10196 [mbOK], 0);
10297```
10398
10499- Если вы не используете метод автоматического обновления, вы можете контролировать процесс обновления поэтапно с помощью функций:
105100
106101``` pascal
107102If LazAutoUpdate1.NewVersionAvailable then ..... else ...
108103```
109104
110105``` pascal
111106If LazAutoUpdate1.DownloadNewVersion then ..... else ...
112107```
113108
114109``` pascal
115110If LazAutoUpdate1.UpdateToNewVersion then ..... else ...
116111```
117112
118113#### Отладка
119114
120115- Если вы установите
121116
122117``` pascal
123118LazAutoUpdate1.DebugMode:=TRUE;
124119```
125120
126121тогда вы можете использовать встроенный метод OnDebugEvent для отслеживания активности:
127122
128123``` pascal
129124procedure TForm1.LazAutoUpdate1DebugEvent(Sender: TObject; lauMethodName,lauMessage: string);
130125begin
131126// используется TEventLog
132127 Logger.Info('('+lauMethodName+') - ' + lauMessage);
133128end;
134129```
135130
136131Также возникают события: OnDownloaded и OnNewVersionAvailable, а также свойство LastError с информацией, которую вы можете использовать для отладки.\
137132----
138133
139134### Поддержка
140135
141136- LazAutoUpdate поддерживается через форум Lazarus [здесь](http://forum.lazarus.freepascal.org/index.php/topic,25444.0.html).
142137
143-\
144138----
145139
146140### Лицензия
147141
148142- LazaAutoUpdate: LGPLv2 (так же, как компоненты Lazarus)
149143- Update Pack: GPLv2
150144
151-\
152145----
153146
154147### Развертывание вашего приложения с помощью LazAutoUpdate
155148
156149- Используйте UpdatePack для управления процессом.
157150 - UpdatePack - это приложение с графическим интерфейсом, которое делает файлы обновления точными и быстрыми и даже предоставляет вам соответствующий код LazAutoUpdate для вашего приложения.
158151 - Оно использует 'profiles'(профили), которые позволяют вам развертывать будущие обновления, просто обновляя номер версии и нажимая «Создать пакет обновления».
159152 - Пользователям вашего приложения всегда будет полезна последняя версия программного обеспечения.
160153- При тестировании помните, что ваше тестовое приложение должно иметь меньший номер версии, чем ваше приложение 'для обновления', хранящееся в сети :)
161154- Если вы хотите создать (или добавить) обновление zip самостоятельно, оно должно содержать, как минимум, приложение **и** текстовый файл «whatsnew.txt»(что нового?).
162155
163-\
164156![](/wiki-images/d/d4/Updatepack1.jpg) ![](/wiki-images/3/30/Updatepack2.jpg)
165157
166158------------------------------------------------------------------------
167159
168160### Использование \[свойств\] auOtherSourceFilename и auOtherSourceURL
169161
170162- Когда для ProjectType установлено значение auOther, LazAutoUpdate будет использовать эти свойства для всех методов. Смотрите пример приложения в архиве SVN.
171163
172-\
173164----
174165
175166### LazAutoUpdate \[в виде приложения\] в системном трее
176167
177168- Пример можно найти в папке /trayicon исходника.
178169- Когда он запускается, он находится в области панели задач и молча проверяет наличие обновлений по расписанию (настраивается разработчиком и пользователем)
179170 - Если он находит новую версию, появляется всплывающее уведомление для обновления:
180171 - Если приложение не запущено, обновление выполняется в фоновом режиме
181172 - Если приложение работает, оно закрывает его, а затем выполняет обновление. \[Затем\] приложение перезапускается.
182173- Updater в системном трее имеет контекстное меню:
183174 - *Configure* (Настройка):
184175 - Пользователь может редактировать расписание - у каждого приложения есть 'profile'(профиль)
185176 - *Runs at startup* (Автозапуск после старта ОС (для Windows)):
186177 - Приложение молча запускается в системный трей при каждой загрузке Windows
187178- Приложение в системном трее (lautraynotify) автоматически выбирает точки входа из приложений, использующих LazAutoupdate, поэтому его не нужно настраивать - его просто устанавливают один раз и забывают.
188179- График \[обновления\] гибкий, от одного раза в день до одного раза в месяц
189180 - UpdatePack заботится о создании файла конфигурации systray для вашего приложения. По умолчанию проверка \[осуществляется\] каждый понедельник в 9 утра.
190181- Приложение systray работает как в Windows, так и в Linux - все, что вам нужно сделать, это привести его в действие.
191182
192-\
193183----
194184
195185### Создание универсального онлайн-установщика/программы обновления
196186
197187- После того, как компонент LazAutoUpdate был добавлен в форму, его можно использовать для нескольких обновлений, загрузок и т.д. (См. '/testinstaller' в исходном коде пакета)
198188- Для универсального установщика/программы обновления вам необходимо установить:
199189 - VersionsINIFilename
200190 - ZipFilename
201191 - AppFileWithPath
202192 - AppVersion
203193- Динамически устанавливая эти свойства (возможно, через меню), вы можете разрешить пользователю обновлять несколько приложений, размещенных на сайте проекта SourceForge/GitHub (или на любом сайте, использующем параметры auOther - см. выше).
204194
205195- Вот пример кода для использования LazAutoUpdate для загрузки и запуска приложения.
206196- Заархивированные файлы для приложения (включая 'whatsnew.txt') и файл 'mywizzyapp.ini' находятся в подкаталоге /updates проекта SourceForge 'mywizzy'.
207197- Исполняемый файл 'updatehm(ostype)(.exe)' находится в том же каталоге, что и ваше приложение для обновления
208198 - ostype=\[win32\|win64\|linux32\|linux64\]
209199 - Windows ext=(.exe)
210200- Пользователь загружает небольшой установщик InnoSetup только с онлайн-установщиком/программой обновления, который, в свою очередь, загружает приложения и вспомогательные файлы.
211201 - Конечно, "installer"(установщик) может **быть** основным приложением, а родственные приложения можно установить через меню или что-то подобное.
212202
213203``` pascal
214204procedure TForm1.Button1Click(Sender: TObject);
215205// Uses SysUtils,LazFileUtils,ulazautoupdate и т.д.
216206Var sDirectoryToInstallTo: string;
217207begin
218208sDirectoryToInstallTo := ProgramDirectory + 'installed';
219209Application.Title:='My whizzy app'
220210LazAutoUpdate1.WorkingMode := lauInstall;
221211LazAutoUpdate1.ProjectType := auSourceForge;
222212LazAutoUpdate1.SFProjectname:='mywizzy';
223213LazAutoUpdate1.VersionsININame:='mywizzyapp.ini';
224214LazAutoUpdate1.ZipfileName:='mywizzyapp.zip';
225215LazAutoUpdate1.AppFileWithPath := sDirectoryToInstallTo + DirectorySeparator + 'mywizzyapp.exe';
226216// Наша обязанность создать папку
227217if not DirectoryExistsUTF8(sDirectoryToInstallTo) then ForceDirectoriesUTF8(sDirectoryToInstallTo);
228218LazAutoUpdate1.Appversion:='0.0.0.0';
229219If LazAutoUpdate1.DownloadNewVersion then
230220 begin
231221 If LazAutoUpdate1.UpdateToNewVersion then
232222 begin
233223 LazAutoUpdate1.ShortCut.Category := scUtility;
234224 LazAutoUpdate1.ShortCut.Target := LazAutoUpdate1.AppFileWithPath;
235225 LazAutoUpdate1.ShortCut.ShortcutName := Application.Title;
236226 LazAutoUpdate1.MakeShortCut; //создает ярлык на рабочем столе и пункт меню Пуск в Windows
237227 end;
238228 end;
239229end;
240230```
241231
242232- Затем вы можете легко запустить установленное приложение программно:
243233
244234``` pascal
245235// Uses asyncprocess
246236procedure TForm1.RunInstalledApp;
247237var
248238 AProcess: TAsyncProcess;
249239begin
250240 if not FileExistsUTF8(LazAutoUpdate1.AppFileWithPath) then
251241 begin
252242 ShowMessageFmt('%s не существует! Сначала установите его.',
253243 [LazAutoUpdate1.AppFileWithPath]);
254244 Exit;
255245 end;
256246 AProcess := TAsyncProcess.Create(nil);
257247 try
258248 AProcess.Executable := LazAutoUpdate1.AppFileWithPath;
259249 AProcess.Execute;
260250 finally
261251 Aprocess.Free;
262252 end;
263253end;
264254```
265255
266-\
267256----
268257
269258### Список Public-методов
270259
271260- Function NewVersionAvailable: Boolean;
272261- Function DownloadNewVersion: Boolean;
273262- Function UpdateToNewVersion: Boolean;
274263- Procedure ShowWhatsNewIfAvailable;
275264- Procedure AutoUpdate;
276265- function AppIsActive
277266- procedure ResetAppVersion;
278267
279-\
280268----
281269
282270### Список неопубликованных свойств
283271
284272- GUIOnlineVersion: String
285273- ReturnCode: Integer
286274- DownloadInprogress: Boolean
287275- AppFileWithPath: String
288276- AppVersion: String
289277- LastError: String;
290278- DebugMode: boolean
291279- LCLVersion: string
292280- WidgetSet: string
293281- FPCVersion: string
294282- LastCompiled: string
295283- TargetOS: string
296284- WindowsAdminCheck: boolean
297285
298-\
299286----
300287
301288### Развертывание нескольких обновлений в одном проекте
302289
303290- По умолчанию ZipFilename совпадает с вашим приложением, но вы можете установить для него уникальное значение и развернуть его в своем каталоге Online Files/updates
304291- Каждое обновляемое приложение должно иметь уникальное имя для файла versions.ini. Установите свойство VersionsINIFilename.
305292
306-\
307293----
308294
309295### Если загрузка занимает много времени
310296
311297- Свойство `VersionCountLimit` определяет, как долго LazAutoUpdate будет проверять наличие новой версии до истечения времени ожидания.
312298- Свойство `DownloadCountLimit` определяет, как долго LazAutoUpdate будет пытаться загрузить новую версию до истечения времени ожидания.
313299
314-\
315300----
316301
317302### Versions.ini
318303
319304Формат выглядит следующим образом:
320305
321306`;файл версии LazAutoUpdate `\
322307`[versions]`\
323308`GUI=0.0.2`
324309
325310- Файл небольшой, поэтому его очень быстро скачать
326311
327-\
328312----
329313
330314### Исходный код и последние версии
331315
332316- [Страница проекта](https://sourceforge.net/projects/lazautoupdate/)
333317- [SVN HTTP Checkout](https://svn.code.sf.net/p/lazarus-ccr/svn/components/lazautoupdate/latest_stable)
334318
335-\
336319----
337320
338321### Безопасность
339322
340323#### Windows 10
341324
342325- Безопасность Windows 10 не позволит пользователю без прав администратора обновлять приложения из Интернета (если только это не приложение Магазина Windows). На мой взгляд, это разумная политика, и LazAutoUpdate придерживается ее.
343326 - Если «обычный пользователь» попытается обновить приложение с помощью LazAutoUpdate, все пройдет гладко до финальной фазы «Обновление приложения». В этот момент у LazAutoUpdate появится диалоговое окно, информирующее пользователя о том, что для фактического обновления необходима учетная запись администратора.
344327 - Для пользователя с правами администратора LazAutoUpdate откроет диалоговое окно UAC (так же, как и любой установщик) и продолжит работу после нажатия «Да», чтобы выполнить обновление.
345328 - Если вы хотите обойти это (возможно, с помощью манифеста), LazAutoUpdate имеет public-свойство 'WindowsAdminCheck', которое вы можете установить в FALSE, чтобы избежать \[появление\] диалога.
346329
347330#### Linux
348331
349332- Linux будет выполнять обновление, даже не показывая консоль обновления, и пользователь получает беспроблемный опыт.
350333
351-\
352334----
353335
354336### Рабочий процесс
355337
356338(Техническое объяснение)
357339
358340Рабочий процесс LazAutoUpdater для обновления запущенного приложения выглядит следующим образом:
359341
360342- Приложение загружает небольшой файл 'version.ini' из sourceforge или github с информацией о версии (это можно сделать при запуске)
361343- Приложение сравнивается с собственной внутренней версией
362344- Если доступна новая версия
363345 - Приложение удаляет любое содержимое локальной папки/папки обновлений
364346 - Приложение загружает, а затем распаковывает его из Интернета в локальную папку/папку обновлений.
365347- Updater.exe копирует загруженный файл «whatsnew.txt» в папку с приложением и на несколько секунд переходит в режим сна.
366348- Между тем приложение производит цикл проверки того, был ли скопирован файл «whatsnew.txt» в его каталог
367349- Приложение обнаруживает «whatsnew.txt» и закрывает (другими словами, TProcess успешно запускается)
368350- Updater копирует/обновляет/ обновляет приложение в каталоге приложения.
369351- Updater использует TProcess для запуска обновленного приложения
370352- В Form.Show приложение отображает «whatsnew.txt», а затем удаляет его.
371353
372354Пользователь видит:
373355
374356- Диалоговое окно: "Доступна новая версия ххх. Хотите скачать?" Да/Нет
375357- Если Да, нажмите:
376358 - Загрузка происходит в фоновом режиме (через фоновый поток). Необязательный «счетчик загрузки» отображается для обозначения прогресса \[загрузки\].
377359 - Пользователю запрещено закрывать приложение во время загрузки (в Form.CloseQuery)
378360 - Диалоговое окно: "Обновление загружено. Нажмите OK, чтобы установить его и перезапустить xxx сейчас" OK
379361 - Пользователь нажимает ОК
380362 - Консоль (окно DOS в Windows) открывается автоматически, а приложение закрывается. Консоль сообщает: «Пожалуйста, подождите, обновляется ххх»
381363 - Через пару секунд консоль исчезает, и запускается новая версия приложения.
382364 - Как только отображается главное окно, отображается информационное окно «Что нового» с кнопкой «ОК»
383365 - Пользователь нажимает кнопку ОК и больше никогда не видит \[эту\] информацию \[вновь\]
384366
385-\
386367----
387368
388369Minesadorada
389370
390371---
391372*From the Free Pascal wiki, page "LazAutoUpdater/ru", as it stood on 2022-01-07 after a change by FTurtle, 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