Finally, the last post in the auto-update series. Previous posts: part 1, 2, 3, 4, 5, 6 and 7

For 8 posts I've been writing about the technical details of building a good automatic update component from scratch, what I haven't wrote is that it's probably silly to write your own instead of using something that already works.

ClickOnce

ClickOnce is built into .net (version 2.0 and later) and is extremely easy to use, all you have to install your software using ClickOnce. You prepare the ClickOnce package – just a few files on a web server (all your program files and a manifest file that can be automatically generated by developer studio).

The user clicks a link to the manifest file and .net will magically download and install your program and all prerequisites (the .net framework itself, SQL server express etc.).

If your customer already have all prerequisites on his/hers computer ClickOnce installation is quick and painless, if some of the prerequisites (especially the .net framework) are missing the installation is long and not so painless.

An important feature of ClickOnce (at least from this post point of view) is that it includes an auto-update feature, you replace the files on the server with the latest version and clients will update automatically.

Highly recommended if you can expect your prerequisites are already installed on your customer's computer.

The update component from Microsoft patterns and practices "Enterprise Library"

To use the update application block you need to add 6 dlls, 3 configuration files and one manifest to your program, at that much "extra weight" it is unsuitable for my application – so I have no experience with it.

It is very customizable but I have no idea how it handles the basics (like updating without having the user log in as an administrator).

If you already use Enterprise Library give it a try, otherwise, why bother?

Off The Shelf Automatic Update Component

There are off-the-shelf components you can buy, it is very likely that a company that focuses on automatic update components can build a better one then you, they can spend all their time on auto-update while you have to build your application.

You should evaluate those off-the-shelf solutions before considering building your own.

>> ClickOnce looks interesting. but it sucks if we wanna update partially (eg: just two or three dlls.)..

ClickOnce downloads the latest dlls *ONLY*. (What you see on progressbar is wrong.) The existing dlls will be copied from the previous version folder to new version folder locally..

what problem I'm having here is that I don't know how to get the latest module list..

I'm using ClickOnce for deploying my smartclient (CAB) application. Suppose: There are two modules called (i.e: Module1, Module2 and Module2) in my system. I deployed this system on my web server by using clickonce technology. After one week, I got new version of "Module1" for my system. So, I deployed my system again with new version of "Module1". When the users of my system launch the application, I wanna show like "The new version of "Module1" is detected, Do you want to download the new version? Y/N".. (Like Firefox's plugin auto-updater, if there is some new versions of plugin available, it will show the list of plugin that have new versions.)

My question is: How can I get the list of latest modules of my system?

I was thinking to use CheckForDetailedUpdate method but it doesn't return the list of updated version.