Auto-Updating Rich-Client Applications

Introduction

Here are some possible things to check when looking for a tool that makes your application auto-update:

  1. A product doesn't consist in a single EXE, but a bunch of files, of different nature (EXEs, OCX and DLL, TXT, JPG, etc.). The tool must handle the notion of "project", or "package", instead of only updating a single EXE
  2. Non-binaries don't have version numbers, and version numbers aren't reliable anyway (VB uses 3-digit version numbers, Windows uses 3- or 4-digit numbers depending on the version of Windows; Some binaries are not incremented, or don't have version numbers altogether). So, must use a hashing system to identify a file uniquely, in addition to version numbers (you still need to keep from updating a shared resource if yours is older than the one currently installed)
  3. Have mercy on users still connected in dial-up, and download patches instead of the full file (or they'll hit Escape, and you're back to square one), especially since the update UI will show up when they launch the main application to get some work done (no one is going to wait 20mn for the whole thingie to get updated before being allowed to work)
  4. What about customers where one host has a modem to connect in dial-up, and is connected to the other hosts in a LAN with NetBeui only (because never had the need for TCP/IP since the other hosts aren't connected to the Net)? What about access rights when updating system files like OCX's provided by MS?
  5. Support for major languages for the standard UI, not just English (no, I don't want to spend time translating all this myself, thank you very much)
  6. Must run on all versions of Windows, ie. watch out for products based on IE or the MSI format (must update older Windows for MSI to run)
  7. Ideally, the tool should be able to parse source files or compiled binaries to extract what files constitute the program, instead of requiring you to list each and every file to generate the server-side list

Additional ideas:

eUpdator

"eUpdator is a system to add automatic version checking and updating to your applications. The system was mainly developed for client / server solutions, where eUpdator provided an easy and secure way to be sure that all clients are running the latest version.  [...] Currently there are two different clients available, a VCL component for Borland Delphi developers and a DLL with an API for C/C++."

Updater

"This updater makes it possible to update your application easily with data in XML format. This way, you don't have to write your own updater."

mxWebUpdate

"mxWebupdate adds automatic update support to your application.  It retrieves information from the web, if a newer version available, it can download a file via HTTP and run the update. Full source code available. Supports Delphi 5, 6, 7 and 2005"

Indigorose

http://www.indigorose.com

TrueUpdate

Visual Patch

Setup Factory

Wise Installer

http://www.wise.com

Products for System Administrators

Products for Software Developers

Wise Language Pack for Wise Package Studio and Wise for Windows Installer

Installer VISE

Microsoft

The availability of two auto-updating solutions, Jamie Cool's "AppUpdater" and the Updater Application Block released on MSDN, provided a better experience for the developer and the end user. With both solutions, applications were installed to the local machine, so they didn't have the performance or security issues of href-exes, and it was possible for an application to support offline use

.Net

ClickOnce

MSI

rtpatch

xdelta

Redbend

ZeroG InstallAnywhere

Catalyst ActivePatch

ClickTeam PatchMaker

Marimba

MDiff

CadiaPatch

Updater Plus

AutoUpdate+

Sunisoft IncUpdate

DTLink Software  AppUpdate

Asta Binary Patcher

FileStream InstallConstruct

FlashUpdate

Install Shield

iAnywhere Solutions' Manage Anywhere Studio

PEBundle

In PEBundle 3.20, it's now possible to just add a URL pointing from which a missing required module can be downloaded. This juste makes it easier to repair broken apps, but doesn't solve the issue of how to update an application should the main EXE or any dependency changes.

Desaware's VersionStamper

Lindersoftware SetupBuilder

Bennet-Tec UpdateLive

Agensoft PatchFactory

Practical Software Solutions' PPS Update Check Control

Resources

Code Samples

Articles