Difference between revisions of "LazAutoUpdater"

From Free Pascal wiki
Jump to navigationJump to search
(Roadmap to development)
m (Formatting tidy-up)
Line 4: Line 4:
 
*[https://sourceforge.net/projects/lazautoupdate/ Project Page]
 
*[https://sourceforge.net/projects/lazautoupdate/ Project Page]
 
*[https://svn.code.sf.net/p/lazautoupdate/code/ SVN HTTP Checkout]
 
*[https://svn.code.sf.net/p/lazautoupdate/code/ SVN HTTP Checkout]
 
+
<br>
 +
----
 
===Workflow===
 
===Workflow===
 
The Laz AutoUpdater workflow for updating a running application is as follows:
 
The Laz AutoUpdater workflow for updating a running application is as follows:
Line 33: Line 34:
 
**User clicks OK button, and never sees the info again
 
**User clicks OK button, and never sees the info again
 
<br>
 
<br>
<br>
+
----
 
===Version.xml===
 
===Version.xml===
 
The format is as follows:
 
The format is as follows:
Line 70: Line 71:
 
   szOtherMouleVer:= XMLConfig1.GetValue('OtherModule', '0.0.0'); // Default is '0.0.0'
 
   szOtherMouleVer:= XMLConfig1.GetValue('OtherModule', '0.0.0'); // Default is '0.0.0'
 
   XMLConfig1.CloseKey;
 
   XMLConfig1.CloseKey;
 
+
<br>
==Location of files==
+
----
 +
===Location of files===
 
*In your SourceForge Files section, make a folder called 'updates'
 
*In your SourceForge Files section, make a folder called 'updates'
 
*Upload 'version.xml' into it
 
*Upload 'version.xml' into it
Line 78: Line 80:
 
*The application installer (Inno Setup?) goes into your Files section as normal
 
*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
 
**The Users should only have to download the installer once.  All the subsequent versions will go into the /updates folder as above
<br>
 
 
<br>
 
<br>
 
----
 
----
Line 88: Line 89:
 
*Make the LazAutoUpdate itself auto-updateable via SourceForge
 
*Make the LazAutoUpdate itself auto-updateable via SourceForge
 
<br>
 
<br>
<br>
+
----
 
...work-in-progress
 
...work-in-progress
  
 
[[User:Minesadorada|Minesadorada]]
 
[[User:Minesadorada|Minesadorada]]

Revision as of 18:29, 30 July 2014

Lazarus Auto-Updater

SourceForge Project



Workflow

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

  • App downloads a small 'version.xml' 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



Version.xml

The format is as follows:

<?xml version="1.0" encoding="utf-8"?>
<APPCONFIG>
  <ProgramInfo>
    <Version GUI="0.0.2" OtherModule="0.1.0"/>
  </ProgramInfo>
</APPCONFIG>

The code to create it:

uses XMLConf
Var XMLConfig1:TXMLConfig; 
begin
 XMLConfig1.Clear;
 XMLConfig1.RootName := 'APPCONFIG';
 XMLConfig1.Filename := 'version.xml';
 XMLConfig1.OpenKey('ProgramInfo/Version');
 XMLConfig1.SetValue('GUI', '0.0.2');
 XMLConfig1.SetValue('OtherModule', '0.1.0');
 XMLConfig1.CloseKey;
 XMLConfig1.Flush;
end;

The code to read it:

uses XMLConf
Var XMLConfig1 :TXMLConfig; 
    szAppVer :String;
    szOtherMouleVer :String;
begin
 XMLConfig1.Clear;
 XMLConfig1.RootName := 'APPCONFIG';
 XMLConfig1.Filename := 'version.xml';
 XMLConfig1.OpenKey('ProgramInfo/Version');
 szAppVer:= XMLConfig1.GetValue('GUI', '0.0.0'); // Default is '0.0.0'
 szOtherMouleVer:= XMLConfig1.GetValue('OtherModule', '0.0.0'); // Default is '0.0.0'
 XMLConfig1.CloseKey;



Location of files

  • In your SourceForge Files section, make a folder called 'updates'
  • Upload 'version.xml' 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



Roadmap

  • Wrap as much as possible into a single visual component that a developer can drop onto their form, and set properties
  • 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