I have a smart client app that has been in production for a client of mine for a few years. It was written using VS.NET 2003. We have struggled with web deployment for a long time with this application because we had a lot of special needs. If you have followed my other blogs, you may have witnessed my frustration going on 3 years now, beginning with Zero Touch Deployment in late 2002 and leading to the Updater Application Block 1.0. I had a lot of very special needs (though they can't have been unique - and ClickOnce proves that I wasn't the only one with these demands) which required some major customization of the Updater Application Block. But it was never satisifying and eventually, much to my chagrin, just stopped working. I finally learned that an update to the underlying Windows XP BITS technology broke all apps using that app block and I would need to retool my solution to using the UAB version 2.0. (There was a suggested registry fix to this, but it never corrected the problem for us.)
After some long drawn out conversations about ClickOnce with people like Kate Gregory (who presented on it at TechEd South Africa so I got to bug her on our 40+ hour trip there :-)) I am confident (as I was with previous solutions...) that ClickOnce will finally give me what I need.
Among my special needs that I had customized (with help from Chris Kinsman who has done a lot of work with smart client deployment) were:
- Check for updates at application startup, not constantly while the app is running. This was easily available in the Updater Component written by Jaime Cool, but not with the Updater Block.
- Update only new assemblies. Efficiency (especially for those remote guys with dialup) was more important than versioning. But UAB, by default, enforced full versioning.
- Do not rely on reflection to determine assemblies to download. This is because my app uses dynamically loaded dlls that are identifed in the app by a text pattern. For example, if a user selects "CSI" then it looks for an assembly named "CSI_Tests.dll". The app has no knowledge of the dlls in advance.
Unfortunately, in order to get ClickOnce, I will need to port the entire application to VS2005. It is a complex, componentized solution, with a number of 3rd party controls (all of which are not yet available for VS2005) and also relies heavily on web services in the back end - and if you know me, then you know this means WSE 2.0 for web service security. Therefore, I will also need to bring all of the WSE 2.0 functionality up to WSE 3.0.
After a discussion with my client about this, esecially about the time and money implications, they have decided that the power of automatic updating, especially for their remote workforce, is invaluable and they are wholly willing to have me upgrade the entire application soley on the merits of this one feature.
This certainly says a lot about ClickOnce. And yes, I am willing to try again!