Sign in Join
Wiki copytemporary

LazAutoUpdater/ru: what changed

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

Title: LazAutoUpdater/ru

OldNewLine
1+## Lazarus Auto-Updater
2+
3+### Резюме
4+
5+- LazAutoUpdate - это визуальный раскрывающийся компонент для IDE Lazarus / FPC, который делает обновление приложения из онлайн-источника более простым и интеллектуальным.
6+- При создании приложения для распространения, написание процесса обновления для пользователей может быть проблематичным, однако пользователи ценят это средство (если оно не навязано им!), и поддержка проще, если вы знаете, что пользователь всегда имеет самую актуальную версию вашего приложения. LazAutoUpdate предназначен для хорошей интеграции с системой контроля версий SourceForge или GitHub, обеспечивая беспроблемную работу для вас и ваших пользователей.
7+- LazAutoUpdate загружает через фоновый поток, чтобы пользователь мог продолжать использовать ваше приложение без перерыва
8+ - Это означает, например, что ваше приложение может «проверять наличие обновлений» при запуске без "зависаний".
9+- Компонент предназначен для разработчиков Lazarus для Windows и Linux, которые размещают свои проекты в SourceForge или GitHub.
10+- Вставьте компонент, установите пару свойств (имя вашего проекта SourceForge или некоторые свойства GitHub) и вызовите один простой метод:
11+ - **LazAutoUpdate.AutoUpdate**
12+- Вы (разработчик) имеете достаточный контроль над поведением компонента, и он достаточно прост в использовании.
13+- Конечные пользователи видят процесс обновления простым и прозрачным
14+- Протестировано и разработано в Windows 10 64/32-битной и Linux 64/32-битной
15+
16+\
17+![botton](/wiki-images/9/94/Lauobjinsp1.jpg) ![](/wiki-images/1/18/Lauobjinsp2.jpg)\
18+----
19+
20+### Загрузка
21+
22+- Установщик пакета LazAutoUpdate (Windows) или zip (Linux) можно загрузить с [сайта проекта SourceForge](http://sourceforge.net/projects/lazautoupdate/)
23+- OnlinePackageManager Lazarus также содержит LazAutoUpdate
24+
25+\
26+----
27+
28+### Установка
29+
30+- Загрузите установочный файл Windows или zip-файл linuxbinaries
31+- Windows: установить, Linux: распаковать в запасную папку
32+- Используйте UpdatePack для создания и распространения ваших файлов обновлений.
33+- Используйте компонент LazAutoUpdate, чтобы добавить функциональность обновления в ваши Lazarus'овские приложения.
34+ - **Вам нужно будет распространять updatehm\<os\>(.exe) вместе с вашим приложением, чтобы LazAutoUpdate работал правильно**
35+ - **Не забудьте устанавливать номера VersionInfo в опциях вашего проекта Lazarus**
36+
37+\
38+----
39+
40+### Пример приложения
41+
42+- В загруженном пакете находится проект «TestApp»
43+- Скомпилируйте и запустите TestApp (не забудьте скомпилировать + скопировать соответствующее средство обновления консоли (updatehm_xxx) в исполняемую папку)
44+ - Это должно обновить себя "из коробки"
45+- Проверьте исходный код TestApp, чтобы получить представление о том, как использовать LazAutoUpdate в полной мере
46+
47+\
48+----
49+
50+### Интернационализация(локализация)
51+
52+- i8n: LazAutoUpdate имеет папку 'locale' со всеми файлами .po, необходимыми для перевода. Базовый язык английский
53+
54+\
55+----
56+
57+### Использование
58+
59+- Установите номер версии для вашего приложения в Project(Проект)/Options(Настройки)/Versioninfo(Информация о версии)
60+- Перетащите компонент в основную форму вашего приложения
61+- Задайте для свойства SFProjectName имя проекта на SourceForge (тот же текст, который отображается в URL-адресе страницы вашего проекта).
62+- или .. Установите свойства GitHub:
63+ - GitHubProjectname: Имя пользователя или Организация
64+ - GitHubRepositoryName: Ваш project(проект)/repository(хранилище)
65+ - GitHubBranchOrTag: 'master' для root или имя ветки GitHub **или** имя тэга
66+- В обоих случаях укажите в UpdatesFolder расположение ваших файлов обновлений (вы можете оставить его пустым)
67+- Используйте UpdatePack для загрузки вашего приложения в Интернет (SourceForge, GitHub и т.д.)
68+- **Затем позвольте компоненту позаботиться о деталях. Просто используйте его (возможно, как пункт меню справки «Проверка обновлений»)**
69+
70+``` pascal
71+LazAutoUpdate1.AutoUpdate;
72+```
73+
74+- Вы не хотите, чтобы пользователь закрывал ваше приложение в середине обновления? Используйте этот код в обработчике Form.CloseQuery:
75+
76+``` pascal
77+If LazAutoUpdate1.DownloadInProgress Then
78+ Begin
79+ CanClose := False;
80+ ShowMessage('Пожалуйста, подождите. Загрузка все еще продолжается.');
81+ End;
82+```
83+
84+- После обновления ваше приложение может автоматически показывать «Что нового». Поместите эту строку в событие OnShow вашей формы:
85+
86+``` pascal
87+LazAutoUpdate1.ShowWhatsNewIfAvailable;
88+```
89+
90+- Это дает вам «каркасность»(бареюон-основу) кода обновления для вашего приложения. Как видите, все довольно просто и автоматизировано.
91+
92+#### Больший контроль
93+
94+- Вы хотите, чтобы ваше приложение проверяло наличие обновлений при запуске? В этом случае, в вашем обработчике form.activate:
95+
96+``` pascal
97+If LazAutoUpdate1.NewVersionAvailable Then
98+ MessageDlg(Application.Title, 'Новая версия ' + Application.Title +
99+ ' - доступна.' + LineEnding +
100+ 'Нажмите «Проверить наличие новой версии» в меню «Справка», чтобы обновиться.', mtConfirmation,
101+ [mbOK], 0);
102+```
103+
104+- Если вы не используете метод автоматического обновления, вы можете контролировать процесс обновления поэтапно с помощью функций:
105+
106+``` pascal
107+If LazAutoUpdate1.NewVersionAvailable then ..... else ...
108+```
109+
110+``` pascal
111+If LazAutoUpdate1.DownloadNewVersion then ..... else ...
112+```
113+
114+``` pascal
115+If LazAutoUpdate1.UpdateToNewVersion then ..... else ...
116+```
117+
118+#### Отладка
119+
120+- Если вы установите
121+
122+``` pascal
123+LazAutoUpdate1.DebugMode:=TRUE;
124+```
125+
126+тогда вы можете использовать встроенный метод OnDebugEvent для отслеживания активности:
127+
128+``` pascal
129+procedure TForm1.LazAutoUpdate1DebugEvent(Sender: TObject; lauMethodName,lauMessage: string);
130+begin
131+// используется TEventLog
132+ Logger.Info('('+lauMethodName+') - ' + lauMessage);
133+end;
134+```
135+
136+Также возникают события: OnDownloaded и OnNewVersionAvailable, а также свойство LastError с информацией, которую вы можете использовать для отладки.\
137+----
138+
139+### Поддержка
140+
141+- LazAutoUpdate поддерживается через форум Lazarus [здесь](http://forum.lazarus.freepascal.org/index.php/topic,25444.0.html).
142+
143+\
144+----
145+
146+### Лицензия
147+
148+- LazaAutoUpdate: LGPLv2 (так же, как компоненты Lazarus)
149+- Update Pack: GPLv2
150+
151+\
152+----
153+
154+### Развертывание вашего приложения с помощью LazAutoUpdate
155+
156+- Используйте UpdatePack для управления процессом.
157+ - UpdatePack - это приложение с графическим интерфейсом, которое делает файлы обновления точными и быстрыми и даже предоставляет вам соответствующий код LazAutoUpdate для вашего приложения.
158+ - Оно использует 'profiles'(профили), которые позволяют вам развертывать будущие обновления, просто обновляя номер версии и нажимая «Создать пакет обновления».
159+ - Пользователям вашего приложения всегда будет полезна последняя версия программного обеспечения.
160+- При тестировании помните, что ваше тестовое приложение должно иметь меньший номер версии, чем ваше приложение 'для обновления', хранящееся в сети :)
161+- Если вы хотите создать (или добавить) обновление zip самостоятельно, оно должно содержать, как минимум, приложение **и** текстовый файл «whatsnew.txt»(что нового?).
162+
163+\
164+![](/wiki-images/d/d4/Updatepack1.jpg) ![](/wiki-images/3/30/Updatepack2.jpg)
165+
166+------------------------------------------------------------------------
167+
168+### Использование \[свойств\] auOtherSourceFilename и auOtherSourceURL
169+
170+- Когда для ProjectType установлено значение auOther, LazAutoUpdate будет использовать эти свойства для всех методов. Смотрите пример приложения в архиве SVN.
171+
172+\
173+----
174+
175+### LazAutoUpdate \[в виде приложения\] в системном трее
176+
177+- Пример можно найти в папке /trayicon исходника.
178+- Когда он запускается, он находится в области панели задач и молча проверяет наличие обновлений по расписанию (настраивается разработчиком и пользователем)
179+ - Если он находит новую версию, появляется всплывающее уведомление для обновления:
180+ - Если приложение не запущено, обновление выполняется в фоновом режиме
181+ - Если приложение работает, оно закрывает его, а затем выполняет обновление. \[Затем\] приложение перезапускается.
182+- Updater в системном трее имеет контекстное меню:
183+ - *Configure* (Настройка):
184+ - Пользователь может редактировать расписание - у каждого приложения есть 'profile'(профиль)
185+ - *Runs at startup* (Автозапуск после старта ОС (для Windows)):
186+ - Приложение молча запускается в системный трей при каждой загрузке Windows
187+- Приложение в системном трее (lautraynotify) автоматически выбирает точки входа из приложений, использующих LazAutoupdate, поэтому его не нужно настраивать - его просто устанавливают один раз и забывают.
188+- График \[обновления\] гибкий, от одного раза в день до одного раза в месяц
189+ - UpdatePack заботится о создании файла конфигурации systray для вашего приложения. По умолчанию проверка \[осуществляется\] каждый понедельник в 9 утра.
190+- Приложение systray работает как в Windows, так и в Linux - все, что вам нужно сделать, это привести его в действие.
191+
192+\
193+----
194+
195+### Создание универсального онлайн-установщика/программы обновления
196+
197+- После того, как компонент LazAutoUpdate был добавлен в форму, его можно использовать для нескольких обновлений, загрузок и т.д. (См. '/testinstaller' в исходном коде пакета)
198+- Для универсального установщика/программы обновления вам необходимо установить:
199+ - VersionsINIFilename
200+ - ZipFilename
201+ - AppFileWithPath
202+ - AppVersion
203+- Динамически устанавливая эти свойства (возможно, через меню), вы можете разрешить пользователю обновлять несколько приложений, размещенных на сайте проекта SourceForge/GitHub (или на любом сайте, использующем параметры auOther - см. выше).
204+
205+- Вот пример кода для использования LazAutoUpdate для загрузки и запуска приложения.
206+- Заархивированные файлы для приложения (включая 'whatsnew.txt') и файл 'mywizzyapp.ini' находятся в подкаталоге /updates проекта SourceForge 'mywizzy'.
207+- Исполняемый файл 'updatehm(ostype)(.exe)' находится в том же каталоге, что и ваше приложение для обновления
208+ - ostype=\[win32\|win64\|linux32\|linux64\]
209+ - Windows ext=(.exe)
210+- Пользователь загружает небольшой установщик InnoSetup только с онлайн-установщиком/программой обновления, который, в свою очередь, загружает приложения и вспомогательные файлы.
211+ - Конечно, "installer"(установщик) может **быть** основным приложением, а родственные приложения можно установить через меню или что-то подобное.
212+
213+``` pascal
214+procedure TForm1.Button1Click(Sender: TObject);
215+// Uses SysUtils,LazFileUtils,ulazautoupdate и т.д.
216+Var sDirectoryToInstallTo: string;
217+begin
218+sDirectoryToInstallTo := ProgramDirectory + 'installed';
219+Application.Title:='My whizzy app'
220+LazAutoUpdate1.WorkingMode := lauInstall;
221+LazAutoUpdate1.ProjectType := auSourceForge;
222+LazAutoUpdate1.SFProjectname:='mywizzy';
223+LazAutoUpdate1.VersionsININame:='mywizzyapp.ini';
224+LazAutoUpdate1.ZipfileName:='mywizzyapp.zip';
225+LazAutoUpdate1.AppFileWithPath := sDirectoryToInstallTo + DirectorySeparator + 'mywizzyapp.exe';
226+// Наша обязанность создать папку
227+if not DirectoryExistsUTF8(sDirectoryToInstallTo) then ForceDirectoriesUTF8(sDirectoryToInstallTo);
228+LazAutoUpdate1.Appversion:='0.0.0.0';
229+If LazAutoUpdate1.DownloadNewVersion then
230+ begin
231+ If LazAutoUpdate1.UpdateToNewVersion then
232+ begin
233+ LazAutoUpdate1.ShortCut.Category := scUtility;
234+ LazAutoUpdate1.ShortCut.Target := LazAutoUpdate1.AppFileWithPath;
235+ LazAutoUpdate1.ShortCut.ShortcutName := Application.Title;
236+ LazAutoUpdate1.MakeShortCut; //создает ярлык на рабочем столе и пункт меню Пуск в Windows
237+ end;
238+ end;
239+end;
240+```
241+
242+- Затем вы можете легко запустить установленное приложение программно:
243+
244+``` pascal
245+// Uses asyncprocess
246+procedure TForm1.RunInstalledApp;
247+var
248+ AProcess: TAsyncProcess;
249+begin
250+ if not FileExistsUTF8(LazAutoUpdate1.AppFileWithPath) then
251+ begin
252+ ShowMessageFmt('%s не существует! Сначала установите его.',
253+ [LazAutoUpdate1.AppFileWithPath]);
254+ Exit;
255+ end;
256+ AProcess := TAsyncProcess.Create(nil);
257+ try
258+ AProcess.Executable := LazAutoUpdate1.AppFileWithPath;
259+ AProcess.Execute;
260+ finally
261+ Aprocess.Free;
262+ end;
263+end;
264+```
265+
266+\
267+----
268+
269+### Список Public-методов
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+
282+### Список неопубликованных свойств
283+
284+- GUIOnlineVersion: String
285+- ReturnCode: Integer
286+- DownloadInprogress: Boolean
287+- AppFileWithPath: String
288+- AppVersion: String
289+- LastError: String;
290+- DebugMode: boolean
291+- LCLVersion: string
292+- WidgetSet: string
293+- FPCVersion: string
294+- LastCompiled: string
295+- TargetOS: string
296+- WindowsAdminCheck: boolean
297+
298+\
299+----
300+
301+### Развертывание нескольких обновлений в одном проекте
302+
303+- По умолчанию ZipFilename совпадает с вашим приложением, но вы можете установить для него уникальное значение и развернуть его в своем каталоге Online Files/updates
304+- Каждое обновляемое приложение должно иметь уникальное имя для файла versions.ini. Установите свойство VersionsINIFilename.
305+
306+\
307+----
308+
309+### Если загрузка занимает много времени
310+
311+- Свойство `VersionCountLimit` определяет, как долго LazAutoUpdate будет проверять наличие новой версии до истечения времени ожидания.
312+- Свойство `DownloadCountLimit` определяет, как долго LazAutoUpdate будет пытаться загрузить новую версию до истечения времени ожидания.
313+
314+\
315+----
316+
317+### Versions.ini
318+
319+Формат выглядит следующим образом:
320+
321+`;файл версии LazAutoUpdate `\
322+`[versions]`\
323+`GUI=0.0.2`
324+
325+- Файл небольшой, поэтому его очень быстро скачать
326+
327+\
328+----
329+
330+### Исходный код и последние версии
331+
332+- [Страница проекта](https://sourceforge.net/projects/lazautoupdate/)
333+- [SVN HTTP Checkout](https://svn.code.sf.net/p/lazarus-ccr/svn/components/lazautoupdate/latest_stable)
334+
335+\
336+----
337+
338+### Безопасность
339+
340+#### Windows 10
341+
342+- Безопасность Windows 10 не позволит пользователю без прав администратора обновлять приложения из Интернета (если только это не приложение Магазина Windows). На мой взгляд, это разумная политика, и LazAutoUpdate придерживается ее.
343+ - Если «обычный пользователь» попытается обновить приложение с помощью LazAutoUpdate, все пройдет гладко до финальной фазы «Обновление приложения». В этот момент у LazAutoUpdate появится диалоговое окно, информирующее пользователя о том, что для фактического обновления необходима учетная запись администратора.
344+ - Для пользователя с правами администратора LazAutoUpdate откроет диалоговое окно UAC (так же, как и любой установщик) и продолжит работу после нажатия «Да», чтобы выполнить обновление.
345+ - Если вы хотите обойти это (возможно, с помощью манифеста), LazAutoUpdate имеет public-свойство 'WindowsAdminCheck', которое вы можете установить в FALSE, чтобы избежать \[появление\] диалога.
346+
347+#### Linux
348+
349+- Linux будет выполнять обновление, даже не показывая консоль обновления, и пользователь получает беспроблемный опыт.
350+
351+\
352+----
353+
354+### Рабочий процесс
355+
356+(Техническое объяснение)
357+
358+Рабочий процесс LazAutoUpdater для обновления запущенного приложения выглядит следующим образом:
359+
360+- Приложение загружает небольшой файл 'version.ini' из sourceforge или github с информацией о версии (это можно сделать при запуске)
361+- Приложение сравнивается с собственной внутренней версией
362+- Если доступна новая версия
363+ - Приложение удаляет любое содержимое локальной папки/папки обновлений
364+ - Приложение загружает, а затем распаковывает его из Интернета в локальную папку/папку обновлений.
365+- Updater.exe копирует загруженный файл «whatsnew.txt» в папку с приложением и на несколько секунд переходит в режим сна.
366+- Между тем приложение производит цикл проверки того, был ли скопирован файл «whatsnew.txt» в его каталог
367+- Приложение обнаруживает «whatsnew.txt» и закрывает (другими словами, TProcess успешно запускается)
368+- Updater копирует/обновляет/ обновляет приложение в каталоге приложения.
369+- Updater использует TProcess для запуска обновленного приложения
370+- В Form.Show приложение отображает «whatsnew.txt», а затем удаляет его.
371+
372+Пользователь видит:
373+
374+- Диалоговое окно: "Доступна новая версия ххх. Хотите скачать?" Да/Нет
375+- Если Да, нажмите:
376+ - Загрузка происходит в фоновом режиме (через фоновый поток). Необязательный «счетчик загрузки» отображается для обозначения прогресса \[загрузки\].
377+ - Пользователю запрещено закрывать приложение во время загрузки (в Form.CloseQuery)
378+ - Диалоговое окно: "Обновление загружено. Нажмите OK, чтобы установить его и перезапустить xxx сейчас" OK
379+ - Пользователь нажимает ОК
380+ - Консоль (окно DOS в Windows) открывается автоматически, а приложение закрывается. Консоль сообщает: «Пожалуйста, подождите, обновляется ххх»
381+ - Через пару секунд консоль исчезает, и запускается новая версия приложения.
382+ - Как только отображается главное окно, отображается информационное окно «Что нового» с кнопкой «ОК»
383+ - Пользователь нажимает кнопку ОК и больше никогда не видит \[эту\] информацию \[вновь\]
384+
385+\
386+----
387+
388+Minesadorada
389+
390+---
391+*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