Click here to Skip to main content
15,879,535 members
Articles / Programming Languages / Visual Basic
Article

Adding automatic updates to your program - Part 1

Rate me:
Please Sign up or sign in to vote.
4.86/5 (64 votes)
31 Dec 2007CPOL6 min read 1.1M   11.7K   430   330
This article describes the steps to add automatic update capabilities to your application quickly and easily using the DDay.Update library.

Introduction

In today's world, applications are quickly moving towards a simple, all-encompassing distribution model. Web applications are gaining popularity because of their scalability and ease of deployment, and desktop applications are becoming less common. This holds both positive and negative consequences - mainly with functionality and user experience.

Most applications need to ensure the best user experience possible for any given situation. In many cases, a web site meets the needs of both the developer and the consumer. However, some applications are better suited as a client-side, distributed application.

For these applications, the need arises for an easy and reliable method of deployment that allows the application the flexibility for any scenario. It should gracefully handle updates to the application, and be easily managed remotely. For this reason, DDay.Update came into existence - to provide an easy interface for adding automatic update functionality to your application, avoiding most of the headache involved in the update process, while allowing the most flexibility possible.

Background

The technology that will be presented uses Microsoft's ClickOnce publishing mechanism that is built into Visual Studio 2005. It does not use ClickOnce itself. This is for many reasons:

  1. It's difficult to use your own deployment methods (use Windows Installer, for example) and still use ClickOnce for automatic updates.
  2. You cannot easily update individual files with ClickOnce, it's an all-or-nothing update, by default. This becomes problematic when your application is anything but very small in size, or you have very few users.
  3. To use a different GUI with ClickOnce requires a complete, built-by-hand interface. DDay.Update's GUI is pluggable. There is currently a pre-built interface for Windows Forms 2.0, and one will soon be available for .NET 3.0 (WPF).
  4. DDay.Update does not interfere with your application's security permissions.
  5. Open source applications lend to a better understanding of the underlying technology. Since DDay.Update and all its controls are open source, you are free to study and extend the code.

That said, if you haven't already, I encourage you to give ClickOnce a try. You may find that it suits your needs. When you find some of its features lacking, then give DDay.Update a try.

Note: DDay.Update is not a wrapper for ClickOnce. It simply consumes ClickOnce manifest files.

OK, what now?

In this article, I will present a bare-bones application, and give it automatic update functionality.

Preparation

First, download the most recent binary version of DDay.Update from SourceForge.net. It is also included in this article for convenience.

Once downloaded, you're ready to begin.

We will now go through the following steps:

  • Step 1 - Create an application to be automatically updated
  • Step 2 - Publish the application
  • Step 3 - Create a Bootstrap application
  • Step 4 - Test it out

Step 1 - Create an application to be automatically updated

Create a new Console project in Visual Studio. Click File->New->Project, and select "Console Application" from the list. I named mine "AutoUpdatingApplication". You can choose whatever name you'd like (though it may be easier to follow examples if you use the same name).

Add a basic line of code to this application, such as:

C#
Console.WriteLine("This is my application.");

Step 2 - Publish the application

We will use Visual Studio's ClickOnce mechanism to publish this simple application. This process is very simple. If you already know how to publish a ClickOnce application, skip to Step 3.

First, right-click on your console application project, and select "Properties".

Screenshot - ProjectProperties.png

Then, click on the "Publish" tab on the left, and click the "Publish Wizard" button:

Screenshot - PublishTab.png

Then, follow the steps of the wizard. Here's what I did:

Screenshot - PublishWizardStep1.png

Screenshot - PublishWizardStep2.png

PublishWizardStep3-1.png

Click "Finish", and your application should now be published to the location you indicated in the first step of the wizard. In my case, it's "C:\Deployment\DDay.Update.Test".

That's it, your application should now be published through ClickOnce!

Step 3 - Create a Bootstrap application

DDay.Update uses a bootstrap application to "mimic" the look and feel of your "real" application. In order to create this Bootstrap application, you need to use the Configuration Tool included in the binary distribution of DDay.Update.

First, open the Configuration Tool that you downloaded in the Preparation step of this example. Then, select File -> Open Deployment Manifest.

ConfigToolOpenDMFromFile2.png

You will then see the following screen:

ConfigToolOpenDMFromUrl_ChooseUrl.png

Enter the location where you published your application. This will include the name of your project, with a .application extension. In my case, it's:

C:\Deployment\DDay.Update.Test\AutoUpdatingApplication.application

Then, click Open. You will then see the main configuration screen, with some information automatically determined. The Update URI should already be provided - if it isn't, it should match the location where you published your application. In my case, it's C:\Deployment\DDay.Update.Test. When an Update URI is provided, you can click the "Verify URI" button to ensure that the URI is valid:

ConfigToolUpdateURI_Validate2.png

Then, choose an update notifier. This is the "pluggable" GUI that DDay.Update uses to display update information to the user.

Afterwards, choose a destination folder for the Bootstrap application to be created. I added a new folder on my desktop:

Screenshot - ConfigToolDestFolder.png

When you've completed these steps, you're ready to build the Bootstrap application. Click the "Create Bootstrap" button, and you should see a message as follows:

Screenshot - ConfigToolBootstrapSuccess.png

Then, the destination folder will automatically open, and you'll see your brand-new Bootstrap! If you run the executable in that folder, you'll see your application download the most-recent version and run it, and your folder will look like this:

Screenshot - ConfigToolDestFolderOpened.png

Notice the folder named "1.0.0.0". That's where your "real" application is stored.

Congratulations, you've setup your application to automatically update!

Step 4 - Test it out

To see the update in action, open Visual Studio again, and publish a new version of your application. Then, go back to the "destination folder" where you created your Bootstrap, and run the application. You should see a message as follows:

Screenshot - Bootstrap_UpdateAvailable.png

Select "Upgrade Now", and the new version will download and run. You'll also notice that the directory structure of your application looks like this:

Screenshot - ConfigToolDestFolderOpenedUpgraded.png

Notice the new "1.0.0.1" folder. The new version of the application has been placed here.

Note: If you chose "Upgrade Later", version 1.0.0.0 will be run, and no updating will occur.

That's it!

Your application is now automatic-update-enabled.

Important information

When you distribute your application to your users, simply give them the Bootstrap application instead of the "real thing", and they will always receive automatic updates. You can even deploy your applications to your users through this method - no need to have them download your large application all at once. They can download the bootstrap application, and it will download the rest.

Points of interest

DDay.Update is in mid Beta testing. If you see anything strange or unexplained, please let me know by submitting a bug report here.

History

  • 12/31/2007 - Article updated (Version 0.63)
  • 11/13/2007 - Article updated (Version 0.61.1)
  • 11/12/2007 - Article updated (Version 0.61)
  • 07/23/2007 - Article updated
  • 07/16/2007 - Initial revision (Version 0.52)

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
United States United States
Doug has been a Software Engineer for 7 of the previous 9 years, and has 12 years of programming experience.

For the past 3 years, he has been developing custom applications in C# and Visual Basic.NET, with an emphasis on custom cross-Internet applications for IT management, real-time collaboration, and process management and reporting.

Comments and Discussions

 
GeneralRe: Not Working for vb.net application Pin
Douglas Day20-May-09 3:30
Douglas Day20-May-09 3:30 
GeneralRe: Not Working for vb.net application Pin
hossamgamal23-May-09 22:21
hossamgamal23-May-09 22:21 
GeneralFor update i am getting Pin
Member 29555525-Feb-09 0:21
Member 29555525-Feb-09 0:21 
Generalconfigfile again / usersettings Pin
rber4-Feb-09 3:46
rber4-Feb-09 3:46 
AnswerRe: configfile again / usersettings Pin
Douglas Day4-Feb-09 5:30
Douglas Day4-Feb-09 5:30 
GeneralYour favorit customer with another question ;) Pin
mjmim27-Jan-09 13:33
mjmim27-Jan-09 13:33 
GeneralRe: Your favorit customer with another question ;) Pin
Douglas Day28-Jan-09 5:16
Douglas Day28-Jan-09 5:16 
QuestionWhy? Pin
Phil.Benson17-Jan-09 23:02
professionalPhil.Benson17-Jan-09 23:02 
Please to not take this as critic for your code, but more as the methodology it represents.
I see this kind of functionality in more and more applications, which to be very frank is totally unacceptable in an enterprise environment.

Client management in an enterprise environment (and the control and state of the clients) is crucial. Allowing applications to 'automatically' update, compromises this management, and creates 'unmanageable' clients. The reason being, the client management systems have no control of which files / registry keys are updated by the application, which can in a worse case scenario compromise the OS stability. (Blue screens, security issues, application conflicts etc.).

For privately used applications, this is obviously of great benefit, but if this 'automagically' updating is implemented in an application, there should be options / settings that can 'hide' and or disable it if required.

Just my tuppence

Thanks,
Phil

Who the f*** is General Failure, and why is he reading my harddisk?

AnswerRe: Why? Pin
Xcalllibur18-Jan-09 2:45
Xcalllibur18-Jan-09 2:45 
AnswerRe: Why? Pin
Douglas Day19-Jan-09 5:44
Douglas Day19-Jan-09 5:44 
GeneralRe: Why? Pin
Phil.Benson20-Jan-09 6:56
professionalPhil.Benson20-Jan-09 6:56 
GeneralRe: Why? Pin
Douglas Day20-Jan-09 7:07
Douglas Day20-Jan-09 7:07 
GeneralRe: Why? Pin
Phil.Benson20-Jan-09 10:35
professionalPhil.Benson20-Jan-09 10:35 
GeneralRe: Why? Pin
Douglas Day20-Jan-09 10:42
Douglas Day20-Jan-09 10:42 
GeneralRe: Why? Pin
Phil.Benson20-Jan-09 10:55
professionalPhil.Benson20-Jan-09 10:55 
GeneralRe: Why? Pin
Douglas Day20-Jan-09 10:58
Douglas Day20-Jan-09 10:58 
GeneralRe: Why? Pin
Douglas Day20-Jan-09 10:55
Douglas Day20-Jan-09 10:55 
GeneralRe: Why? Pin
Phil.Benson20-Jan-09 10:58
professionalPhil.Benson20-Jan-09 10:58 
GeneralProxy Pin
mjmim13-Jan-09 1:13
mjmim13-Jan-09 1:13 
GeneralRe: Proxy Pin
Douglas Day13-Jan-09 4:29
Douglas Day13-Jan-09 4:29 
GeneralRe: Proxy Pin
mjmim13-Jan-09 4:47
mjmim13-Jan-09 4:47 
GeneralRe: Proxy Pin
Douglas Day13-Jan-09 5:13
Douglas Day13-Jan-09 5:13 
AnswerRe: Proxy Pin
nubes10-Jun-09 3:16
nubes10-Jun-09 3:16 
GeneralRe: Proxy Pin
Douglas Day10-Jun-09 6:05
Douglas Day10-Jun-09 6:05 
GeneralRe: Proxy Pin
nubes10-Jun-09 8:42
nubes10-Jun-09 8:42 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.