Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Automatic Online Update Toolkit

0.00/5 (No votes)
26 Oct 2004 1  
Update toolset with update client, creator and server-script

Introduction

This is a set of tools with which you can easily distribute automatic software updates to your clients.

Concept
picture #1

As you see in picture1 the ideal workflow to your clients is a direct line.
To get such an theoretical way working in an acceptbale way (in this solution), you will need to take the detour to the webserver. That means:

  • You publish your updates to your webserver
  • Your Application running at the customers site will fetch and install them automatically

How does it work?

Concept
picture #2

As you see in picture2 the update-toolset consists of 3 different parts:

  • the Updatecreator at the producers site - With the tool, your update is packed and distributed out to the world.
  • the Updateclient at the customers site - This class is inserted in your app. You're responsible to call for it. (for example each time the application starts up or periodically)
  • the Client Updater at the customers site - This is a standalone-program that is called and configured by the Updateclient-class; it closes down the main application, does the unpacking and copying and restart the application finally.
  • the Webserver anywhere accessible by both - The Webserver stores the update-information and the update-files; currently with mysql/php and for uploading ftp
This program uses

Explanation of the basic functions

Producer-site:

(see picture3)
  1. Project is compiled
  2. packed
  3. uploaded to the webserver
  4. online-database is updated with the new version

Concept
picture #3

Customer-site:

(see picture4)
  1. UpdateClient is called to check for updates
  2. it request the actual version from the webserver
  3. it recaives the actual version number and compares it to its own hardcoded number
  4. when the online-version is newer, the update is fetched, otherwise the updatecheck is finished at this step.
  5. receive the update-file and saves it to a temporary folder
  6. unpacks to that temporary folder
  7. atm: only copies all content over the old one, without checking something

Concept
picture #4

Using the code

Set up the mysql table at the webserver:
#
# Table structure for table `version`
#

CREATE TABLE version (
  projectid int(11) NOT NULL default '0',
  projectname text NOT NULL,
  actualversion int(11) NOT NULL default '0',
  PRIMARY KEY  (projectid)
) TYPE=MyISAM;

Create a update.php script with following content:

<?php
mysql_connect("mydbserver.com","dbuser","dbpassword") or die(mysql_error());
mysql_select_db("mydb") or die(mysql_error());
switch($_GET["action"]){
 case "check": 
  $res=mysql_query(
"SELECT * FROM version WHERE projectname='".$_GET["project"]."'");
  $arr=mysql_fetch_array($res);
  echo $arr["actualversion"];
  die();
 break;
 case "setnew": 
  $res=mysql_query(
"UPDATE version SET actualversion=".$_GET["version"]." 
WHERE projectname='".$_GET["project"]."'");
  die();
 break;
 default:
  header("location:/");
  die();
  break;
} // switch

?>

Upload the update.php to the location specified in your updateclients. Don't forget to create the directory for the updates! integrate it into your application:

Public Class Form1
...
    Dim WithEvents updater As updateclient.clsClient
    Private Sub Form1_Load(ByVal sender As System.Object,
 ByVal e As System.EventArgs) Handles MyBase.Load
        updater = New updateclient.clsClient
        updater.CheckForNewVersion(ProjectName, VersionNumber, 
ProjectName, Application.ExecutablePath)
    End Sub
...
    Private Sub updater_endall() Handles updater.endall
        end
    End Sub
...
End Class
    
Module Module1
    Public Const ProjectName As String = "yourappname"
    Public Const VersionNumber As Integer = 25
    Public VersionDate As Date = New Date(2004, 10, 25) 'not used yet!

End Module

Points of Interest

Updates become more and more important in this fast-moving buisness. This toolset is just a fast-hacked starting point using the concept mentioned. You'll note that there exists no error handling, and many many more usefull features that are not included yet. Can your improve the concept or the toolset in any way?

History

  • 10/27/2004 first release

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here