LazAutoUpdater/ru
Lazarus Auto-Updater
Резюме
- LazAutoUpdate - это визуальный раскрывающийся компонент для IDE Lazarus / FPC, который делает обновление приложения из онлайн-источника более простым и интеллектуальным.
- При создании приложения для распространения, написание процесса обновления для пользователей может быть проблематичным, однако пользователи ценят это средство (если оно не навязано им!), и поддержка проще, если вы знаете, что пользователь всегда имеет самую актуальную версию вашего приложения. LazAutoUpdate предназначен для хорошей интеграции с системой контроля версий SourceForge или GitHub, обеспечивая беспроблемную работу для вас и ваших пользователей.
- LazAutoUpdate загружает через фоновый поток, чтобы пользователь мог продолжать использовать ваше приложение без перерыва
- Это означает, например, что ваше приложение может «проверять наличие обновлений» при запуске без "зависаний".
- Компонент предназначен для разработчиков Lazarus для Windows и Linux, которые размещают свои проекты в SourceForge или GitHub.
- Вставьте компонент, установите пару свойств (имя вашего проекта SourceForge или некоторые свойства GitHub) и вызовите один простой метод:
- LazAutoUpdate.AutoUpdate
- Вы (разработчик) имеете достаточный контроль над поведением компонента, и он достаточно прост в использовании.
- Конечные пользователи видят процесс обновления простым и прозрачным
- Протестировано и разработано в Windows 10 64/32-битной и Linux 64/32-битной
\
Загрузка
- Установщик пакета LazAutoUpdate (Windows) или zip (Linux) можно загрузить с сайта проекта SourceForge
- OnlinePackageManager Lazarus также содержит LazAutoUpdate
Установка
- Загрузите установочный файл Windows или zip-файл linuxbinaries
- Windows: установить, Linux: распаковать в запасную папку
- Используйте UpdatePack для создания и распространения ваших файлов обновлений.
- Используйте компонент LazAutoUpdate, чтобы добавить функциональность обновления в ваши Lazarus'овские приложения.
- Вам нужно будет распространять updatehm<os>(.exe) вместе с вашим приложением, чтобы LazAutoUpdate работал правильно
- Не забудьте устанавливать номера VersionInfo в опциях вашего проекта Lazarus
Пример приложения
- В загруженном пакете находится проект «TestApp»
- Скомпилируйте и запустите TestApp (не забудьте скомпилировать + скопировать соответствующее средство обновления консоли (updatehm_xxx) в исполняемую папку)
- Это должно обновить себя "из коробки"
- Проверьте исходный код TestApp, чтобы получить представление о том, как использовать LazAutoUpdate в полной мере
Интернационализация(локализация)
- i8n: LazAutoUpdate имеет папку 'locale' со всеми файлами .po, необходимыми для перевода. Базовый язык английский
Использование
- Установите номер версии для вашего приложения в Project(Проект)/Options(Настройки)/Versioninfo(Информация о версии)
- Перетащите компонент в основную форму вашего приложения
- Задайте для свойства SFProjectName имя проекта на SourceForge (тот же текст, который отображается в URL-адресе страницы вашего проекта).
- или .. Установите свойства GitHub:
- GitHubProjectname: Имя пользователя или Организация
- GitHubRepositoryName: Ваш project(проект)/repository(хранилище)
- GitHubBranchOrTag: 'master' для root или имя ветки GitHub или имя тэга
- В обоих случаях укажите в UpdatesFolder расположение ваших файлов обновлений (вы можете оставить его пустым)
- Используйте UpdatePack для загрузки вашего приложения в Интернет (SourceForge, GitHub и т.д.)
- Затем позвольте компоненту позаботиться о деталях. Просто используйте его (возможно, как пункт меню справки «Проверка обновлений»)
LazAutoUpdate1.AutoUpdate;- Вы не хотите, чтобы пользователь закрывал ваше приложение в середине обновления? Используйте этот код в обработчике Form.CloseQuery:
If LazAutoUpdate1.DownloadInProgress Then
Begin
CanClose := False;
ShowMessage('Пожалуйста, подождите. Загрузка все еще продолжается.');
End;- После обновления ваше приложение может автоматически показывать «Что нового». Поместите эту строку в событие OnShow вашей формы:
LazAutoUpdate1.ShowWhatsNewIfAvailable;- Это дает вам «каркасность»(бареюон-основу) кода обновления для вашего приложения. Как видите, все довольно просто и автоматизировано.
Больший контроль
- Вы хотите, чтобы ваше приложение проверяло наличие обновлений при запуске? В этом случае, в вашем обработчике form.activate:
If LazAutoUpdate1.NewVersionAvailable Then
MessageDlg(Application.Title, 'Новая версия ' + Application.Title +
' - доступна.' + LineEnding +
'Нажмите «Проверить наличие новой версии» в меню «Справка», чтобы обновиться.', mtConfirmation,
[mbOK], 0);- Если вы не используете метод автоматического обновления, вы можете контролировать процесс обновления поэтапно с помощью функций:
If LazAutoUpdate1.NewVersionAvailable then ..... else ...If LazAutoUpdate1.DownloadNewVersion then ..... else ...If LazAutoUpdate1.UpdateToNewVersion then ..... else ...Отладка
- Если вы установите
LazAutoUpdate1.DebugMode:=TRUE;тогда вы можете использовать встроенный метод OnDebugEvent для отслеживания активности:
procedure TForm1.LazAutoUpdate1DebugEvent(Sender: TObject; lauMethodName,lauMessage: string);
begin
// используется TEventLog
Logger.Info('('+lauMethodName+') - ' + lauMessage);
end;Также возникают события: OnDownloaded и OnNewVersionAvailable, а также свойство LastError с информацией, которую вы можете использовать для отладки.\
Поддержка
- LazAutoUpdate поддерживается через форум Lazarus здесь.
Лицензия
- LazaAutoUpdate: LGPLv2 (так же, как компоненты Lazarus)
- Update Pack: GPLv2
Развертывание вашего приложения с помощью LazAutoUpdate
- Используйте UpdatePack для управления процессом.
- UpdatePack - это приложение с графическим интерфейсом, которое делает файлы обновления точными и быстрыми и даже предоставляет вам соответствующий код LazAutoUpdate для вашего приложения.
- Оно использует 'profiles'(профили), которые позволяют вам развертывать будущие обновления, просто обновляя номер версии и нажимая «Создать пакет обновления».
- Пользователям вашего приложения всегда будет полезна последняя версия программного обеспечения.
- При тестировании помните, что ваше тестовое приложение должно иметь меньший номер версии, чем ваше приложение 'для обновления', хранящееся в сети :)
- Если вы хотите создать (или добавить) обновление zip самостоятельно, оно должно содержать, как минимум, приложение и текстовый файл «whatsnew.txt»(что нового?).

Использование [свойств] auOtherSourceFilename и auOtherSourceURL
- Когда для ProjectType установлено значение auOther, LazAutoUpdate будет использовать эти свойства для всех методов. Смотрите пример приложения в архиве SVN.
LazAutoUpdate [в виде приложения] в системном трее
- Пример можно найти в папке /trayicon исходника.
- Когда он запускается, он находится в области панели задач и молча проверяет наличие обновлений по расписанию (настраивается разработчиком и пользователем)
- Если он находит новую версию, появляется всплывающее уведомление для обновления:
- Если приложение не запущено, обновление выполняется в фоновом режиме
- Если приложение работает, оно закрывает его, а затем выполняет обновление. [Затем] приложение перезапускается.
- Если он находит новую версию, появляется всплывающее уведомление для обновления:
- Updater в системном трее имеет контекстное меню:
- Configure (Настройка):
- Пользователь может редактировать расписание - у каждого приложения есть 'profile'(профиль)
- Runs at startup (Автозапуск после старта ОС (для Windows)):
- Приложение молча запускается в системный трей при каждой загрузке Windows
- Configure (Настройка):
- Приложение в системном трее (lautraynotify) автоматически выбирает точки входа из приложений, использующих LazAutoupdate, поэтому его не нужно настраивать - его просто устанавливают один раз и забывают.
- График [обновления] гибкий, от одного раза в день до одного раза в месяц
- UpdatePack заботится о создании файла конфигурации systray для вашего приложения. По умолчанию проверка [осуществляется] каждый понедельник в 9 утра.
- Приложение systray работает как в Windows, так и в Linux - все, что вам нужно сделать, это привести его в действие.
Создание универсального онлайн-установщика/программы обновления
- После того, как компонент LazAutoUpdate был добавлен в форму, его можно использовать для нескольких обновлений, загрузок и т.д. (См. '/testinstaller' в исходном коде пакета)
- Для универсального установщика/программы обновления вам необходимо установить:
- VersionsINIFilename
- ZipFilename
- AppFileWithPath
- AppVersion
- Динамически устанавливая эти свойства (возможно, через меню), вы можете разрешить пользователю обновлять несколько приложений, размещенных на сайте проекта SourceForge/GitHub (или на любом сайте, использующем параметры auOther - см. выше).
- Вот пример кода для использования LazAutoUpdate для загрузки и запуска приложения.
- Заархивированные файлы для приложения (включая 'whatsnew.txt') и файл 'mywizzyapp.ini' находятся в подкаталоге /updates проекта SourceForge 'mywizzy'.
- Исполняемый файл 'updatehm(ostype)(.exe)' находится в том же каталоге, что и ваше приложение для обновления
- ostype=[win32|win64|linux32|linux64]
- Windows ext=(.exe)
- Пользователь загружает небольшой установщик InnoSetup только с онлайн-установщиком/программой обновления, который, в свою очередь, загружает приложения и вспомогательные файлы.
- Конечно, "installer"(установщик) может быть основным приложением, а родственные приложения можно установить через меню или что-то подобное.
procedure TForm1.Button1Click(Sender: TObject);
// Uses SysUtils,LazFileUtils,ulazautoupdate и т.д.
Var sDirectoryToInstallTo: string;
begin
sDirectoryToInstallTo := ProgramDirectory + 'installed';
Application.Title:='My whizzy app'
LazAutoUpdate1.WorkingMode := lauInstall;
LazAutoUpdate1.ProjectType := auSourceForge;
LazAutoUpdate1.SFProjectname:='mywizzy';
LazAutoUpdate1.VersionsININame:='mywizzyapp.ini';
LazAutoUpdate1.ZipfileName:='mywizzyapp.zip';
LazAutoUpdate1.AppFileWithPath := sDirectoryToInstallTo + DirectorySeparator + 'mywizzyapp.exe';
// Наша обязанность создать папку
if not DirectoryExistsUTF8(sDirectoryToInstallTo) then ForceDirectoriesUTF8(sDirectoryToInstallTo);
LazAutoUpdate1.Appversion:='0.0.0.0';
If LazAutoUpdate1.DownloadNewVersion then
begin
If LazAutoUpdate1.UpdateToNewVersion then
begin
LazAutoUpdate1.ShortCut.Category := scUtility;
LazAutoUpdate1.ShortCut.Target := LazAutoUpdate1.AppFileWithPath;
LazAutoUpdate1.ShortCut.ShortcutName := Application.Title;
LazAutoUpdate1.MakeShortCut; //создает ярлык на рабочем столе и пункт меню Пуск в Windows
end;
end;
end;- Затем вы можете легко запустить установленное приложение программно:
// Uses asyncprocess
procedure TForm1.RunInstalledApp;
var
AProcess: TAsyncProcess;
begin
if not FileExistsUTF8(LazAutoUpdate1.AppFileWithPath) then
begin
ShowMessageFmt('%s не существует! Сначала установите его.',
[LazAutoUpdate1.AppFileWithPath]);
Exit;
end;
AProcess := TAsyncProcess.Create(nil);
try
AProcess.Executable := LazAutoUpdate1.AppFileWithPath;
AProcess.Execute;
finally
Aprocess.Free;
end;
end;Список Public-методов
- Function NewVersionAvailable: Boolean;
- Function DownloadNewVersion: Boolean;
- Function UpdateToNewVersion: Boolean;
- Procedure ShowWhatsNewIfAvailable;
- Procedure AutoUpdate;
- function AppIsActive
- procedure ResetAppVersion;
Список неопубликованных свойств
- GUIOnlineVersion: String
- ReturnCode: Integer
- DownloadInprogress: Boolean
- AppFileWithPath: String
- AppVersion: String
- LastError: String;
- DebugMode: boolean
- LCLVersion: string
- WidgetSet: string
- FPCVersion: string
- LastCompiled: string
- TargetOS: string
- WindowsAdminCheck: boolean
Развертывание нескольких обновлений в одном проекте
- По умолчанию ZipFilename совпадает с вашим приложением, но вы можете установить для него уникальное значение и развернуть его в своем каталоге Online Files/updates
- Каждое обновляемое приложение должно иметь уникальное имя для файла versions.ini. Установите свойство VersionsINIFilename.
Если загрузка занимает много времени
- Свойство
VersionCountLimitопределяет, как долго LazAutoUpdate будет проверять наличие новой версии до истечения времени ожидания. - Свойство
DownloadCountLimitопределяет, как долго LazAutoUpdate будет пытаться загрузить новую версию до истечения времени ожидания.
Versions.ini
Формат выглядит следующим образом:
;файл версии LazAutoUpdate
[versions]
GUI=0.0.2
- Файл небольшой, поэтому его очень быстро скачать
Исходный код и последние версии
Безопасность
Windows 10
- Безопасность Windows 10 не позволит пользователю без прав администратора обновлять приложения из Интернета (если только это не приложение Магазина Windows). На мой взгляд, это разумная политика, и LazAutoUpdate придерживается ее.
- Если «обычный пользователь» попытается обновить приложение с помощью LazAutoUpdate, все пройдет гладко до финальной фазы «Обновление приложения». В этот момент у LazAutoUpdate появится диалоговое окно, информирующее пользователя о том, что для фактического обновления необходима учетная запись администратора.
- Для пользователя с правами администратора LazAutoUpdate откроет диалоговое окно UAC (так же, как и любой установщик) и продолжит работу после нажатия «Да», чтобы выполнить обновление.
- Если вы хотите обойти это (возможно, с помощью манифеста), LazAutoUpdate имеет public-свойство 'WindowsAdminCheck', которое вы можете установить в FALSE, чтобы избежать [появление] диалога.
Linux
- Linux будет выполнять обновление, даже не показывая консоль обновления, и пользователь получает беспроблемный опыт.
Рабочий процесс
(Техническое объяснение)
Рабочий процесс LazAutoUpdater для обновления запущенного приложения выглядит следующим образом:
- Приложение загружает небольшой файл 'version.ini' из sourceforge или github с информацией о версии (это можно сделать при запуске)
- Приложение сравнивается с собственной внутренней версией
- Если доступна новая версия
- Приложение удаляет любое содержимое локальной папки/папки обновлений
- Приложение загружает, а затем распаковывает его из Интернета в локальную папку/папку обновлений.
- Updater.exe копирует загруженный файл «whatsnew.txt» в папку с приложением и на несколько секунд переходит в режим сна.
- Между тем приложение производит цикл проверки того, был ли скопирован файл «whatsnew.txt» в его каталог
- Приложение обнаруживает «whatsnew.txt» и закрывает (другими словами, TProcess успешно запускается)
- Updater копирует/обновляет/ обновляет приложение в каталоге приложения.
- Updater использует TProcess для запуска обновленного приложения
- В Form.Show приложение отображает «whatsnew.txt», а затем удаляет его.
Пользователь видит:
- Диалоговое окно: "Доступна новая версия ххх. Хотите скачать?" Да/Нет
- Если Да, нажмите:
- Загрузка происходит в фоновом режиме (через фоновый поток). Необязательный «счетчик загрузки» отображается для обозначения прогресса [загрузки].
- Пользователю запрещено закрывать приложение во время загрузки (в Form.CloseQuery)
- Диалоговое окно: "Обновление загружено. Нажмите OK, чтобы установить его и перезапустить xxx сейчас" OK
- Пользователь нажимает ОК
- Консоль (окно DOS в Windows) открывается автоматически, а приложение закрывается. Консоль сообщает: «Пожалуйста, подождите, обновляется ххх»
- Через пару секунд консоль исчезает, и запускается новая версия приложения.
- Как только отображается главное окно, отображается информационное окно «Что нового» с кнопкой «ОК»
- Пользователь нажимает кнопку ОК и больше никогда не видит [эту] информацию [вновь]
Minesadorada
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.
Talk about this page
Nobody has opened a bench for this page yet. Sign in to open one.
