After looking high and low for an updater with ease of use and lack of complexity, I came across a few options. One component had a generator for xml files and started at $89 for the light version. It worked great for Win32 apps, but didn't recognize the VS generated setup.exe files. The next option was just under $300. Meh. All the others were $1000s. I came across this open source component Sharp AutoUpdater by Conversive.
With a little effort I managed to modify the code to allow rollbacks, and updates on the fly. All it takes is an autoloader, and autoloader config file, a xml file for the update information, and zip files of the application directories. You add the component to your project and handle updates with a timer, or whatever mode you desire, and even select wheter to suppress messages, or allow user interaction. I prefer to put the functionality in the about box, and update on demand.
The process is simple. The loader starts the executable in the specified subdirectory. An update is downloaded to the 'udpate' directory, and at restart the old directory is deleted and the new one is moved into place. Upon rollback, the process is the same, except the directory is 'rollback'. To deploy an update, simply modify the server's xml file, and click update in the client. The SharpZipLib is incorporated to handle the compression and decompression. It works asynchronously, so you can see if an update is available with no sluggish GUI side effects. The updates and rollback are asynchronous too!
So for 3 hours worth of time modifing it to exactly what I needed, I came close to the cost of the cheapest solution, with was not what I wanted, and not working! If you would like to see some of my modifications, just drop me a line.