Difference between revisions of "LazAutoUpdater"

From Lazarus wiki
Jump to navigationJump to search
(Updated info - work-in-progress-)
(Added summary section)
Line 1: Line 1:
 
==Lazarus Auto-Updater==
 
==Lazarus Auto-Updater==
 +
===Summary===
 +
*LazAutoUpdater is a visual drop-in component for the Lazarus/FPC IDE to make updating your application easier and simpler.
 +
*It is aimed at Lazarus Windows developers who host their project in SourceForge.
 +
*Drop-in the component, set one property (your sourceforge project name) and call these simple methods:
 +
**If LazAutoUpdate.NewVersionAvailable then...
 +
**LazAutoUpdate.DownloadNewVersion
 +
**LazAutoUpdate.UpdateToNewVersion
 +
..and in your form.activate code:
 +
**LazAutoUpdate.ShowWhatsNewIfAvailable
 +
*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
  
 
=== SourceForge Project===
 
=== SourceForge Project===
Line 7: Line 18:
 
----
 
----
 
===Workflow===
 
===Workflow===
 +
(Technical explanation)
 +
 
The Laz AutoUpdater workflow for updating a running application is as follows:
 
The Laz AutoUpdater workflow for updating a running application is as follows:
  

Revision as of 22:37, 9 August 2014

Lazarus Auto-Updater

Summary

  • LazAutoUpdater is a visual drop-in component for the Lazarus/FPC IDE to make updating your application easier and simpler.
  • It is aimed at Lazarus Windows developers who host their project in SourceForge.
  • Drop-in the component, set one property (your sourceforge project name) and call these simple methods:
    • If LazAutoUpdate.NewVersionAvailable then...
    • LazAutoUpdate.DownloadNewVersion
    • LazAutoUpdate.UpdateToNewVersion

..and in your form.activate code:

    • LazAutoUpdate.ShowWhatsNewIfAvailable
  • 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

SourceForge Project



Workflow

(Technical explanation)

The Laz AutoUpdater workflow for updating a running application is as follows:

  • App downloads a small 'version.ini' file from sourceforge with version info (it can do this at start-up)
  • 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 Sourceforge 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 copies a downloaded 'whatsnew.txt' into the App folder and enters Sleep for a few seconds
  • Meanwhile App has entered loop checking whether a 'whatsnew.txt' file has been copied into it's directory
  • App detects 'whatsnew.txt' and Closes. (in other words the TProcess has started successfully)
  • Updater copies /updates/UpdatedApp to App directory.
  • Updater uses TProcess to start the updated app
  • 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)
    • Dialog: 'The update is downloaded. Click OK to install it and restart xxx now' OK
    • User clicks OK
    • A console (DOS window in Windows) opens automatically and the Application closes. The console says 'Please wait updating xxx'
    • 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



Versions.ini

The format is as follows:

LazAutoUpdate versions file
[versions]
GUI=0.0.2
Module=1.0.0.0



Deploying an update

  • In the SourceForge project Files section, make a folder called 'updates'
  • Upload 'versions.ini' into it
  • Upload the zip file containing your updated EXE and the file 'whatsnew.txt'
  • The application installer (Inno Setup?) goes into your Files section as normal
    • The Users should only have to download the installer once. All the subsequent versions will go into the /updates folder as above



In-Application Code

  • Here's what a typical 'Check for Updates' handler would look like:
 if LazAutoUpdater.NewVersionAvailable then
 begin
   if MessageDlg(Application.Title, 'A new version of ' + Application.Title +
     ' is available.' + LineEnding + 'Would you like to download it?',
     mtConfirmation, [mbYes, mbNo], 0) = mrYes then
     if LazAutoUpdater.DownloadNewVersion then
       LazAutoUpdater.UpdateToNewVersion
     else
       MessageDlg(Application.Title,
         'Update cancelled', mtInformation, [mbOK], 0);
 end
 else
 begin
   MessageDlg(Application.Title,
     'Your current version is fully up-to-date',
     mtInformation,
     [mbOK], 0);
 end;



Roadmap

  • Wrap as much as possible into a single visual component that a developer can drop onto their form, and set properties ...Done
  • Enable (Console) update.exe to deal with multiple files to update
  • Enable (Console) update.exe to deal with updates to subdirectories of the application
  • Write full documentation so that the process is as painless as possible for developers
  • Make the LazAutoUpdate itself auto-updateable via SourceForge

...work-in-progress

Minesadorada