Difference between revisions of "LazAutoUpdater/ru"

From Lazarus wiki
Jump to navigationJump to search
(Created page with "==Lazarus Auto-Updater== ===Summary=== *LazAutoUpdate is a visual drop-in component for the Lazarus/FPC IDE to make updating your application from an online source easier and...")
 
(Added page template. Deleted categories located on page.)
 
(26 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 +
{{LazAutoUpdater}}
 +
 
==Lazarus Auto-Updater==
 
==Lazarus Auto-Updater==
===Summary===
+
 
*LazAutoUpdate is a visual drop-in component for the Lazarus/FPC IDE to make updating your application from an online source easier and smarter.
+
__TOC__
*When making an app for distribution, coding an update process for users can be a bother, yet users appreciate the facility (so long as it's not forced on them!) and support is easier if you know that the user always has the most up-to-date version of your app. LazAutoUpdate is designed to integrate well with your SourceForge or GitHub version control ensuring a trouble-free experience for you and your users.
+
 
*LazAutoUpdate downloads via a background thread so the user can continue using your app without interruption
+
===Резюме===
**This means for example, your app can 'check for updates' at startup without the app becoming unresponsive.
+
*LazAutoUpdate - это визуальный раскрывающийся компонент для IDE Lazarus / FPC, который делает обновление приложения из онлайн-источника более простым и интеллектуальным.
*It is aimed at Lazarus Windows and Linux developers who host their project in SourceForge or GitHub.
+
*При создании приложения для распространения, написание процесса обновления для пользователей может быть проблематичным, однако пользователи ценят это средство (если оно не навязано им!), и поддержка проще, если вы знаете, что пользователь всегда имеет самую актуальную версию вашего приложения. LazAutoUpdate предназначен для хорошей интеграции с системой контроля версий SourceForge или GitHub, обеспечивая беспроблемную работу для вас и ваших пользователей.
*Drop-in the component, set a couple of properties (your SourceForge project name, or some GitHub properties) and call one simple method:
+
*LazAutoUpdate загружает через фоновый поток, чтобы пользователь мог продолжать использовать ваше приложение без перерыва
 +
**Это означает, например, что ваше приложение может «проверять наличие обновлений» при запуске без "зависаний".
 +
*Компонент предназначен для разработчиков Lazarus для Windows и Linux, которые размещают свои проекты в SourceForge или GitHub.
 +
*Вставьте компонент, установите пару свойств (имя вашего проекта SourceForge или некоторые свойства GitHub) и вызовите один простой метод:
 
**'''LazAutoUpdate.AutoUpdate'''
 
**'''LazAutoUpdate.AutoUpdate'''
*You (the developer) have plenty of control over how the component behaves, yet it is simple to use.
+
*Вы (разработчик) имеете достаточный контроль над поведением компонента, и он достаточно прост в использовании.
*End-users see the updating process as simple and transparent
+
*Конечные пользователи видят процесс обновления простым и прозрачным
*Tested and developed in Windows 10 64/32-bit and Linux 64/32-bit
+
*Протестировано и разработано в Windows 10 64/32-битной и Linux 64/32-битной
 
<br>
 
<br>
[[File:lauobjinsp1.jpg]]
+
[[File:lauobjinsp1.jpg|botton]] [[File:lauobjinsp2.jpg|bottom]]
[[File:lauobjinsp2.jpg]]
 
 
<br>
 
<br>
 
----
 
----
===Download===
+
 
*LazAutoUpdate suite installer (Windows) or zip (Linux) can be downloaded from the [http://sourceforge.net/projects/lazautoupdate/ SourceForge project site]
+
===Загрузка===
*The Lazarus OnlinePackager also contains LazAutoUpdate
+
*Установщик пакета LazAutoUpdate (Windows) или zip (Linux) можно загрузить с [http://sourceforge.net/projects/lazautoupdate/ сайта проекта SourceForge]
 +
*OnlinePackageManager Lazarus также содержит LazAutoUpdate
 
<br>
 
<br>
 
----
 
----
===Installation===
+
 
* Download the Windows setup file or the linuxbinaries zip
+
===Установка===
* Windows: Install, Linux: Unzip in a spare folder
+
* Загрузите установочный файл Windows или zip-файл linuxbinaries
* Use the UpdatePack to make and distribute your update files
+
* Windows: установить, Linux: распаковать в запасную папку
* Use the LazAutoUpdate component to add update functionality to your Lazarus app
+
* Используйте UpdatePack для создания и распространения ваших файлов обновлений.
**'''You will need to distribute updatehm<os>(.exe) with your application for LazAutoUpdate to work correctly'''
+
* Используйте компонент LazAutoUpdate, чтобы добавить функциональность обновления в ваши Lazarus'овские приложения.
**'''Don't forget to set VersionInfo numbers in your Lazarus Project options'''
+
**'''Вам нужно будет распространять updatehm<os>(.exe) вместе с вашим приложением, чтобы LazAutoUpdate работал правильно'''
 +
**'''Не забудьте устанавливать номера VersionInfo в опциях вашего проекта Lazarus'''
 
<br>
 
<br>
 
----
 
----
===Example application===
+
 
*In the download package is the project 'TestApp'
+
===Пример приложения===
*Compile and run TestApp (remembering to compile+copy the appropriate console updater (updatehm_xxx) to the executable folder)
+
*В загруженном пакете находится проект «TestApp»
**It should update itself 'out-of-the-box'
+
*Скомпилируйте и запустите TestApp (не забудьте скомпилировать + скопировать соответствующее средство обновления консоли (updatehm_xxx) в исполняемую папку)
*Check out the source code of TestApp to get an idea of how to use LazAutoUpdate to its full potential
+
**Это должно обновить себя "из коробки"
 +
*Проверьте исходный код TestApp, чтобы получить представление о том, как использовать LazAutoUpdate в полной мере
 
<br>
 
<br>
 
----
 
----
===Internationalisation===
+
 
*i8n: LazAutoUpdate has a 'locale' folder with all the .po files needed for translation. The base language is English
+
===Интернационализация(локализация)===
 +
*i8n: LazAutoUpdate имеет папку 'locale' со всеми файлами .po, необходимыми для перевода. Базовый язык английский
 
<br>
 
<br>
 
----
 
----
===Use===
+
 
*Set a version number for your app in Project/Options/Versioninfo
+
===Использование===
*Drop the component onto the main form of your application
+
*Установите номер версии для вашего приложения в Project(Проект)/Options(Настройки)/Versioninfo(Информация о версии)
*Set the SFProjectName property to your SourceForge project name (the same text as appears in the URL for your project page)
+
*Перетащите компонент в основную форму вашего приложения
*or.. Set the GitHub properties:
+
*Задайте для свойства SFProjectName имя проекта на SourceForge (тот же текст, который отображается в URL-адресе страницы вашего проекта).
**GitHubProjectname: Username or Organisation
+
*или .. Установите свойства GitHub:
**GitHubRepositoryName: Your project/repository
+
**GitHubProjectname: Имя пользователя или Организация
**GitHubBranchOrTag: 'master' for the root or the GitHub Branch name '''or''' Tag name
+
**GitHubRepositoryName: Ваш project(проект)/repository(хранилище)
*In both cases set the UpdatesFolder to the location of your update files (you can leave it blank)
+
**GitHubBranchOrTag: 'master' для root или имя ветки GitHub '''или''' имя тэга
*Use the UpdatePack to upload your app to the internet (SourceForge, GitHub etc)  
+
*В обоих случаях укажите в UpdatesFolder расположение ваших файлов обновлений (вы можете оставить его пустым)
*'''Then let the component take care of the details. Just use (perhaps as a Help menu item 'Check for updates')'''
+
*Используйте UpdatePack для загрузки вашего приложения в Интернет (SourceForge, GitHub и т.д.)  
<syntaxhighlight>
+
*'''Затем позвольте компоненту позаботиться о деталях. Просто используйте его (возможно, как пункт меню справки «Проверка обновлений»)'''
 +
<syntaxhighlight lang=pascal>
 
LazAutoUpdate1.AutoUpdate;
 
LazAutoUpdate1.AutoUpdate;
 
</syntaxhighlight>
 
</syntaxhighlight>
*You don't want the user to close your application in the middle of an update!  Use this code in the Form.CloseQuery handler:
+
*Вы не хотите, чтобы пользователь закрывал ваше приложение в середине обновления? Используйте этот код в обработчике Form.CloseQuery:
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
If LazAutoUpdate1.DownloadInProgress Then
 
If LazAutoUpdate1.DownloadInProgress Then
 
   Begin
 
   Begin
 
   CanClose := False;
 
   CanClose := False;
   ShowMessage('Please wait. Download is still progress.');
+
   ShowMessage('Пожалуйста, подождите. Загрузка все еще продолжается.');
 
   End;
 
   End;
 
</syntaxhighlight>
 
</syntaxhighlight>
*After an update your app can show 'What's new' automatically. Put this line into your Form's OnShow event:
+
*После обновления ваше приложение может автоматически показывать «Что нового». Поместите эту строку в событие OnShow вашей формы:
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
LazAutoUpdate1.ShowWhatsNewIfAvailable;
 
LazAutoUpdate1.ShowWhatsNewIfAvailable;
 
</syntaxhighlight>
 
</syntaxhighlight>
*This gives you the 'bare bones' of the update code for your application. As you can see, it's all pretty automatic and simple.
+
*Это дает вам «каркасность»(бареюон-основу) кода обновления для вашего приложения. Как видите, все довольно просто и автоматизировано.
====More control====
+
====Больший контроль====
*Decide if you want your app to check for updates on startup.  If so, in your form.activate handler:
+
*Вы хотите, чтобы ваше приложение проверяло наличие обновлений при запуске? В этом случае, в вашем обработчике form.activate:
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
If LazAutoUpdate1.NewVersionAvailable Then
 
If LazAutoUpdate1.NewVersionAvailable Then
       MessageDlg(Application.Title, 'A new version of ' + Application.Title +
+
       MessageDlg(Application.Title, 'Новая версия ' + Application.Title +
         ' is available.' + LineEnding +
+
         ' - доступна.' + LineEnding +
         'Click ''Check for new version'' in Help menu to update', mtConfirmation,
+
         'Нажмите «Проверить наличие новой версии» в меню «Справка», чтобы обновиться.', mtConfirmation,
 
         [mbOK], 0);
 
         [mbOK], 0);
 
</syntaxhighlight>
 
</syntaxhighlight>
*If you dont use the AutoUpdate method, you have control over the update process in stages via the functions:
+
*Если вы не используете метод автоматического обновления, вы можете контролировать процесс обновления поэтапно с помощью функций:
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
If LazAutoUpdate1.NewVersionAvailable then ..... else ...
 
If LazAutoUpdate1.NewVersionAvailable then ..... else ...
 
</syntaxhighlight>
 
</syntaxhighlight>
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
If LazAutoUpdate1.DownloadNewVersion then ..... else ...
 
If LazAutoUpdate1.DownloadNewVersion then ..... else ...
 
</syntaxhighlight>
 
</syntaxhighlight>
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
If LazAutoUpdate1.UpdateToNewVersion then ..... else ...
 
If LazAutoUpdate1.UpdateToNewVersion then ..... else ...
 
</syntaxhighlight>
 
</syntaxhighlight>
====Debugging====
+
 
*If you set
+
====Отладка====
<syntaxhighlight>
+
*Если вы установите
 +
<syntaxhighlight lang=pascal>
 
LazAutoUpdate1.DebugMode:=TRUE;
 
LazAutoUpdate1.DebugMode:=TRUE;
 
</syntaxhighlight>
 
</syntaxhighlight>
then you can use the built-in OnDebugEvent method to log activity:
+
тогда вы можете использовать встроенный метод OnDebugEvent для отслеживания активности:
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
procedure TForm1.LazAutoUpdate1DebugEvent(Sender: TObject; lauMethodName,
+
procedure TForm1.LazAutoUpdate1DebugEvent(Sender: TObject; lauMethodName,lauMessage: string);
      lauMessage: string);
 
 
begin
 
begin
// Use TEventLog
+
// используется TEventLog
 
   Logger.Info('('+lauMethodName+') - ' + lauMessage);
 
   Logger.Info('('+lauMethodName+') - ' + lauMessage);
 
end;
 
end;
 
</syntaxhighlight>
 
</syntaxhighlight>
There are also events fired: OnDownloaded and OnNewVersionAvailable and the property LastError with info that you might use for debugging.
+
Также возникают события: OnDownloaded и OnNewVersionAvailable, а также свойство LastError с информацией, которую вы можете использовать для отладки.
 
<br>
 
<br>
 
----
 
----
===Support===
+
 
*LazAutoUpdate is supported via the Lazarus forum [http://forum.lazarus.freepascal.org/index.php/topic,25444.0.html here].
+
===Поддержка===
 +
*LazAutoUpdate поддерживается через форум Lazarus [http://forum.lazarus.freepascal.org/index.php/topic,25444.0.html здесь].
 
<br>
 
<br>
 
----
 
----
===License===
+
 
*LazaAutoUpdate: LGPLv2 (same as Lazarus components)
+
===Лицензия===
 +
*LazaAutoUpdate: LGPLv2 (так же, как компоненты Lazarus)
 
*Update Pack: GPLv2
 
*Update Pack: GPLv2
 
<br>
 
<br>
 
----
 
----
===Deploying your Application with LazAutoUpdate===
+
 
*Use UpdatePack to manage the process.
+
===Развертывание вашего приложения с помощью LazAutoUpdate===
**UpdatePack is a GUI application that makes the update files accurately and quickly, and even gives you the corresponding LazAutoUpdate code for your app.
+
*Используйте UpdatePack для управления процессом.
**It uses 'profiles' that enable you to deploy future updates by simply updating the version number and clicking 'Create Update Pack'.
+
**UpdatePack - это приложение с графическим интерфейсом, которое делает файлы обновления точными и быстрыми и даже предоставляет вам соответствующий код LazAutoUpdate для вашего приложения.
**Your app users will benefit from having the latest version of your software always available
+
**Оно использует 'profiles'(профили), которые позволяют вам развертывать будущие обновления, просто обновляя номер версии и нажимая «Создать пакет обновления».
*When testing, remember your testing app should be a lower version number than your 'update' app stored online :)
+
**Пользователям вашего приложения всегда будет полезна последняя версия программного обеспечения.
*If you want to make up (or add to) the update zip yourself, it should contain the App '''and''' the text file 'whatsnew.txt' as a minimum.
+
*При тестировании помните, что ваше тестовое приложение должно иметь меньший номер версии, чем ваше приложение 'для обновления', хранящееся в сети :)
 +
*Если вы хотите создать (или добавить) обновление zip самостоятельно, оно должно содержать, как минимум, приложение '''и''' текстовый файл «whatsnew.txt»(что нового?).
 
<br>
 
<br>
[[File:updatepack1.jpg]]
+
[[File:updatepack1.jpg|bottom]]   [[File:updatepack2.jpg|bottom]]
<br>
 
[[File:updatepack2.jpg]]
 
 
----
 
----
===Using auOtherSourceFilename and auOtherSourceURL===
+
 
*When ProjectType is set to auOther, LazAutoUpdate will use these properties for all the Methods. See example application in the SVN archive.
+
===Использование [свойств] auOtherSourceFilename и auOtherSourceURL===
 +
*Когда для ProjectType установлено значение auOther, LazAutoUpdate будет использовать эти свойства для всех методов. Смотрите пример приложения в архиве SVN.
 
<br>
 
<br>
 
----
 
----
===LazAutoUpdate Systray Application===
+
 
*This can be found in the /trayicon folder of the source.
+
===LazAutoUpdate [в виде приложения] в системном трее===
*When this is run, it sits in the system tray area and silently checks for updates via a schedule (developer and user configurable)
+
*Пример можно найти в папке /trayicon исходника.
**If it finds a new version it pops up a notification to the user to update:
+
*Когда он запускается, он находится в области панели задач и молча проверяет наличие обновлений по расписанию (настраивается разработчиком и пользователем)
***If the app not running, the update is done silently in the background
+
**Если он находит новую версию, появляется всплывающее уведомление для обновления:
***If the app is running it closes it and then does the update. The app will then restart
+
***Если приложение не запущено, обновление выполняется в фоновом режиме
*Systray updater has a right-click menu:
+
***Если приложение работает, оно закрывает его, а затем выполняет обновление. [Затем] приложение перезапускается.
**Configure:
+
*Updater в системном трее имеет контекстное меню:
***The user can edit the schedule - each app has a 'profile'
+
**''Configure'' (Настройка):
**Runs at startup (Windows):
+
***Пользователь может редактировать расписание - у каждого приложения есть 'profile'(профиль)
***The systray loads silently at each Windows boot
+
**''Runs at startup'' (Автозапуск после старта ОС (для Windows)):
*Systray (lautraynotify) picks up entries from apps that use LazAutoupdate automatically, so it never needs to be configured - simply installed once and forgotten.
+
***Приложение молча запускается в системный трей при каждой загрузке Windows
*The schedule is flexible, from once every day to once every month
+
*Приложение в системном трее (lautraynotify) автоматически выбирает точки входа из приложений, использующих LazAutoupdate, поэтому его не нужно настраивать - его просто устанавливают один раз и забывают.
**The UpdatePack takes care of producing the systray configuration file for your app. The default is to check every Monday at 9am.
+
*График [обновления] гибкий, от одного раза в день до одного раза в месяц
*The systray app works in both Windows and Linux - all you need to do is deploy it.
+
**UpdatePack заботится о создании файла конфигурации systray для вашего приложения. По умолчанию проверка [осуществляется] каждый понедельник в 9 утра.
 +
*Приложение systray работает как в Windows, так и в Linux - все, что вам нужно сделать, это привести его в действие.
 
<br>
 
<br>
 
----
 
----
===Making a generic online installer/updater===
+
 
*Once a LazAutoUpdate component has been dropped onto a form, it can be used for multiple updates, downloads etc. (see '/testinstaller' in package source)
+
===Создание универсального онлайн-установщика/программы обновления===
*For a generic installer/updater you need to set:
+
*После того, как компонент LazAutoUpdate был добавлен в форму, его можно использовать для нескольких обновлений, загрузок и т.д. (См. '/testinstaller' в исходном коде пакета)
 +
*Для универсального установщика/программы обновления вам необходимо установить:
 
**VersionsINIFilename
 
**VersionsINIFilename
 
**ZipFilename
 
**ZipFilename
 
**AppFileWithPath
 
**AppFileWithPath
 
**AppVersion
 
**AppVersion
*By setting these properties dynamically (perhaps via a menu) you can enable the user to update multiple applications hosted on a SourceForge/GitHub project site (or any site using auOther settings - see above)
+
*Динамически устанавливая эти свойства (возможно, через меню), вы можете разрешить пользователю обновлять несколько приложений, размещенных на сайте проекта SourceForge/GitHub (или на любом сайте, использующем параметры auOther - см. выше).
  
*Here's example code to use LazAutoUpdate to download then run an application.
+
*Вот пример кода для использования LazAutoUpdate для загрузки и запуска приложения.
*The zipped files for the application (including 'whatsnew.txt') and the file 'mywizzyapp.ini' are located in the /updates subdirectory of the SourceForge project 'mywizzy'
+
*Заархивированные файлы для приложения (включая 'whatsnew.txt') и файл 'mywizzyapp.ini' находятся в подкаталоге /updates проекта SourceForge 'mywizzy'.
*The executable 'updatehm(ostype)(.exe)' is in the same directory as your updater app
+
*Исполняемый файл 'updatehm(ostype)(.exe)' находится в том же каталоге, что и ваше приложение для обновления
 
** ostype=[win32|win64|linux32|linux64]
 
** ostype=[win32|win64|linux32|linux64]
 
** Windows ext=(.exe)
 
** Windows ext=(.exe)
*The user would download a small InnoSetup installer with just the online installer/updater, which in turn would download application(s) and supporting files.
+
*Пользователь загружает небольшой установщик InnoSetup только с онлайн-установщиком/программой обновления, который, в свою очередь, загружает приложения и вспомогательные файлы.
** Of course, the "installer" could '''be''' your main application, with sister applications installable via a menu or some such.
+
** Конечно, "installer"(установщик) может '''быть''' основным приложением, а родственные приложения можно установить через меню или что-то подобное.
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
procedure TForm1.Button1Click(Sender: TObject);
 
procedure TForm1.Button1Click(Sender: TObject);
// Uses SysUtils,LazFileUtils,ulazautoupdate etc..
+
// Uses SysUtils,LazFileUtils,ulazautoupdate и т.д.
 
Var sDirectoryToInstallTo: string;
 
Var sDirectoryToInstallTo: string;
 
begin
 
begin
Line 175: Line 188:
 
LazAutoUpdate1.ZipfileName:='mywizzyapp.zip';
 
LazAutoUpdate1.ZipfileName:='mywizzyapp.zip';
 
LazAutoUpdate1.AppFileWithPath := sDirectoryToInstallTo + DirectorySeparator + 'mywizzyapp.exe';
 
LazAutoUpdate1.AppFileWithPath := sDirectoryToInstallTo + DirectorySeparator + 'mywizzyapp.exe';
// Our responsibility to make the folder
+
// Наша обязанность создать папку
 
if not DirectoryExistsUTF8(sDirectoryToInstallTo) then ForceDirectoriesUTF8(sDirectoryToInstallTo);
 
if not DirectoryExistsUTF8(sDirectoryToInstallTo) then ForceDirectoriesUTF8(sDirectoryToInstallTo);
 
LazAutoUpdate1.Appversion:='0.0.0.0';
 
LazAutoUpdate1.Appversion:='0.0.0.0';
Line 185: Line 198:
 
       LazAutoUpdate1.ShortCut.Target := LazAutoUpdate1.AppFileWithPath;
 
       LazAutoUpdate1.ShortCut.Target := LazAutoUpdate1.AppFileWithPath;
 
       LazAutoUpdate1.ShortCut.ShortcutName := Application.Title;
 
       LazAutoUpdate1.ShortCut.ShortcutName := Application.Title;
       LazAutoUpdate1.MakeShortCut; // makes a desktop shortcut and a Start menu entry in Windows
+
       LazAutoUpdate1.MakeShortCut; //создает ярлык на рабочем столе и пункт меню Пуск в Windows
 
     end;
 
     end;
 
   end;
 
   end;
 
end;
 
end;
 
</syntaxhighlight>
 
</syntaxhighlight>
* You can then programatically run the installed app easily enough:
+
* Затем вы можете легко запустить установленное приложение программно:
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
// Uses asyncprocess
 
// Uses asyncprocess
 
procedure TForm1.RunInstalledApp;
 
procedure TForm1.RunInstalledApp;
Line 199: Line 212:
 
   if not FileExistsUTF8(LazAutoUpdate1.AppFileWithPath) then
 
   if not FileExistsUTF8(LazAutoUpdate1.AppFileWithPath) then
 
   begin
 
   begin
     ShowMessageFmt('%s does not exist! Install it first.',
+
     ShowMessageFmt('%s не существует! Сначала установите его.',
 
       [LazAutoUpdate1.AppFileWithPath]);
 
       [LazAutoUpdate1.AppFileWithPath]);
 
     Exit;
 
     Exit;
Line 214: Line 227:
 
<br>
 
<br>
 
----
 
----
===Public Methods List===
+
 
 +
===Список Public-методов===
 
*Function NewVersionAvailable: Boolean;
 
*Function NewVersionAvailable: Boolean;
 
*Function DownloadNewVersion: Boolean;
 
*Function DownloadNewVersion: Boolean;
Line 224: Line 238:
 
<br>
 
<br>
 
----
 
----
===Non-published Properties list===
+
 
 +
===Список неопубликованных свойств===
 
*GUIOnlineVersion: String
 
*GUIOnlineVersion: String
 
*ReturnCode: Integer
 
*ReturnCode: Integer
Line 240: Line 255:
 
<br>
 
<br>
 
----
 
----
===Deploying multiple updates in a single project===
+
 
* By default, the ZipFilename is the same as your application, but you can set it to a unique value, and deploy it to your Online Files/updates irectory
+
===Развертывание нескольких обновлений в одном проекте===
* Each application to be updated should have a unique name for the versions.ini file. Set the VersionsINIFilename property.
+
* По умолчанию ZipFilename совпадает с вашим приложением, но вы можете установить для него уникальное значение и развернуть его в своем каталоге Online Files/updates
 +
* Каждое обновляемое приложение должно иметь уникальное имя для файла versions.ini. Установите свойство VersionsINIFilename.
 
<br>
 
<br>
 
----
 
----
===In case the download takes to long===
+
===Если загрузка занимает много времени===
* VersionCountLimit property determines how long LazAutoUpdate will check for a new version before timing out.
+
* Свойство <tt>VersionCountLimit</tt> определяет, как долго LazAutoUpdate будет проверять наличие новой версии до истечения времени ожидания.
* DownloadCountLimit property determines how long LazAutoUpdate will try downloading the new version before timing out.
+
* Свойство <tt>DownloadCountLimit</tt> определяет, как долго LazAutoUpdate будет пытаться загрузить новую версию до истечения времени ожидания.
 
<br>
 
<br>
 
----
 
----
 +
 
===Versions.ini===
 
===Versions.ini===
The format is as follows:
+
Формат выглядит следующим образом:
  ;LazAutoUpdate versions file
+
  ;файл версии LazAutoUpdate  
 
  [versions]
 
  [versions]
 
  GUI=0.0.2
 
  GUI=0.0.2
*The file is small so that it is very quick to download
+
*Файл небольшой, поэтому его очень быстро скачать
 
<br>
 
<br>
 
----
 
----
=== Source Code and latest versions===
+
=== Исходный код и последние версии===
*[https://sourceforge.net/projects/lazautoupdate/ Project Page]
+
*[https://sourceforge.net/projects/lazautoupdate/ Страница проекта]
 
*[https://svn.code.sf.net/p/lazarus-ccr/svn/components/lazautoupdate/latest_stable SVN HTTP Checkout]
 
*[https://svn.code.sf.net/p/lazarus-ccr/svn/components/lazautoupdate/latest_stable SVN HTTP Checkout]
 
<br>
 
<br>
 
----
 
----
===Security===
+
===Безопасность===
 
====Windows 10====
 
====Windows 10====
*Windows 10 security will not allow a non-admin user to update applications from the internet (unless it's a Windows Store App). This is a sensible policy in my opinion, and LazAutoUpdate adheres to it.
+
*Безопасность Windows 10 не позволит пользователю без прав администратора обновлять приложения из Интернета (если только это не приложение Магазина Windows). На мой взгляд, это разумная политика, и LazAutoUpdate придерживается ее.
**If an 'ordinary user' tries to update an app using LazAutoUpdate, all will go smoothly until the final 'Update app' phase. At that point LazAutoUpdate will pop up a dialog informing the user that an administrator account is needed for the actual update.
+
**Если «обычный пользователь» попытается обновить приложение с помощью LazAutoUpdate, все пройдет гладко до финальной фазы «Обновление приложения». В этот момент у LazAutoUpdate появится диалоговое окно, информирующее пользователя о том, что для фактического обновления необходима учетная запись администратора.
**For an 'admin user', LazAutoUpdate will pop up a UAC dialog (the same as any installer) and proceed upon clicking 'yes' to do the update.
+
**Для пользователя с правами администратора LazAutoUpdate откроет диалоговое окно UAC (так же, как и любой установщик) и продолжит работу после нажатия «Да», чтобы выполнить обновление.
**If you wish to circumvent this (perhaps with a manifest) LazAutoUpdate has the public property 'WindowsAdminCheck' which you can set to FALSE and avoid the dialog.
+
**Если вы хотите обойти это (возможно, с помощью манифеста), LazAutoUpdate имеет public-свойство 'WindowsAdminCheck', которое вы можете установить в FALSE, чтобы избежать [появление] диалога.
 +
 
 
====Linux====
 
====Linux====
*Linux will do the update without even showing the update console, and the user gets a seamless experience.
+
*Linux будет выполнять обновление, даже не показывая консоль обновления, и пользователь получает беспроблемный опыт.
 
<br>
 
<br>
 
----
 
----
===Workflow===
+
===Рабочий процесс===
(Technical explanation)
+
(Техническое объяснение)
  
The Laz AutoUpdater workflow for updating a running application is as follows:
+
Рабочий процесс LazAutoUpdater для обновления запущенного приложения выглядит следующим образом:
  
*App downloads a small 'version.ini' file from sourceforge or github with version info (it can do this at start-up)
+
*Приложение загружает небольшой файл 'version.ini' из sourceforge или github с информацией о версии (это можно сделать при запуске)
*App compares with its own internal version
+
*Приложение сравнивается с собственной внутренней версией
*If new version available
+
*Если доступна новая версия
**App deletes any contents of local /updates folder
+
**Приложение удаляет любое содержимое локальной папки/папки обновлений
**App downloads then unzips it from the web into a local /updates folder
+
**Приложение загружает, а затем распаковывает его из Интернета в локальную папку/папку обновлений.
*App uses TAsyncProcess to start the console updater.exe, passing it the name of the file to be updated in the command line
+
*Updater.exe копирует загруженный файл «whatsnew.txt» в папку с приложением и на несколько секунд переходит в режим сна.
*updater.exe copies a downloaded 'whatsnew.txt' into the App folder and enters Sleep for a few seconds
+
*Между тем приложение производит цикл проверки того, был ли скопирован файл «whatsnew.txt» в его каталог
*Meanwhile App has entered loop checking whether a 'whatsnew.txt' file has been copied into it's directory
+
*Приложение обнаруживает «whatsnew.txt» и закрывает (другими словами, TProcess успешно запускается)
*App detects 'whatsnew.txt' and Closes. (in other words the TProcess has started successfully)
+
*Updater копирует/обновляет/ обновляет приложение в каталоге приложения.
*Updater copies /updates/UpdatedApp to App directory.
+
*Updater использует TProcess для запуска обновленного приложения
*Updater uses TProcess to start the updated app
+
*В Form.Show приложение отображает «whatsnew.txt», а затем удаляет его.
*On Form.Show, App displays 'whatsnew.txt' then deletes it
 
  
The User sees:
+
Пользователь видит:
*Dialog: 'There's a new version of xxx available. Would you like to download it?' Yes/No
+
*Диалоговое окно: "Доступна новая версия ххх. Хотите скачать?" Да/Нет
*If Yes clicked:
+
* Если Да, нажмите:
**Download happens in the background (via a background thread) Optional 'download counter' is shown to indicate progress.
+
**Загрузка происходит в фоновом режиме (через фоновый поток). Необязательный «счетчик загрузки» отображается для обозначения прогресса [загрузки].
**User is prevented from closing the app whilst the download is in progress (in Form.CloseQuery)
+
**Пользователю запрещено закрывать приложение во время загрузки (в Form.CloseQuery)
**Dialog: 'The update is downloaded. Click OK to install it and restart xxx now' OK
+
**Диалоговое окно: "Обновление загружено. Нажмите OK, чтобы установить его и перезапустить xxx сейчас" OK
**User clicks OK
+
**Пользователь нажимает ОК
**A console (DOS window in Windows) opens automatically and the Application closes. The console says 'Please wait updating xxx'
+
**Консоль (окно DOS в Windows) открывается автоматически, а приложение закрывается. Консоль сообщает: «Пожалуйста, подождите, обновляется ххх»
**After a couple of seconds the console disappears, and the new version of the App starts
+
**Через пару секунд консоль исчезает, и запускается новая версия приложения.
**As soon as the main window is shown, a 'What's New' info box is shown with an OK button
+
**Как только отображается главное окно, отображается информационное окно «Что нового» с кнопкой «ОК»
**User clicks OK button, and never sees the info again
+
**Пользователь нажимает кнопку ОК и больше никогда не видит [эту] информацию [вновь]
 
<br>
 
<br>
 
----
 
----
[[Category:Components]]
 
  
 
[[User:Minesadorada|Minesadorada]]
 
[[User:Minesadorada|Minesadorada]]

Latest revision as of 22:31, 7 January 2022

English (en) polski (pl) русский (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-битной


botton lauobjinsp2.jpg


Загрузка

  • Установщик пакета 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»(что нового?).


updatepack1.jpg updatepack2.jpg


Использование [свойств] auOtherSourceFilename и auOtherSourceURL

  • Когда для ProjectType установлено значение auOther, LazAutoUpdate будет использовать эти свойства для всех методов. Смотрите пример приложения в архиве SVN.



LazAutoUpdate [в виде приложения] в системном трее

  • Пример можно найти в папке /trayicon исходника.
  • Когда он запускается, он находится в области панели задач и молча проверяет наличие обновлений по расписанию (настраивается разработчиком и пользователем)
    • Если он находит новую версию, появляется всплывающее уведомление для обновления:
      • Если приложение не запущено, обновление выполняется в фоновом режиме
      • Если приложение работает, оно закрывает его, а затем выполняет обновление. [Затем] приложение перезапускается.
  • Updater в системном трее имеет контекстное меню:
    • Configure (Настройка):
      • Пользователь может редактировать расписание - у каждого приложения есть 'profile'(профиль)
    • Runs at startup (Автозапуск после старта ОС (для Windows)):
      • Приложение молча запускается в системный трей при каждой загрузке Windows
  • Приложение в системном трее (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