One of the claims made in the .Net SDK is the ability of applications developed with the .Net framework to have the same update and deployment model as a traditional browser based web application. I have been following your Wahoo.exe articles related to "Smart Clients" with regards to this.

While I appreciate the mechanism used in "Smart Clients" what about cases where I want to deploy from somewhere other than a http location, a network share for instance? I like the idea of an assembly checking its original source location for a newer version when it is loaded but is there a way around having to operate across http and through Internet Explorer, seems very clunky, is there an alternative or better mechanism that you know of in the pipeline?

Asked by Aaron Clauson. Answered by the Wonk on January 10, 2003


The whole deployment question came up very late in the original .NET timeframe and wasn’t solved completely. .NET today provides several alternatives to deployment of WinForms applications:



The traditional setup.exe/MSI file method is well-known and well-supported, both in VS.NET itself, via setup projects, and in 3rd party tools, e.g. InstallShield, Wise Installer, etc. The problem with this approach, of course, is the need for an installation step for each version of the application.


The “zero” deployment option, on the other hand, removes the need for an initial setup or subsequent setups, as each time the code is run, the “latest” version is downloaded (although “latest” has some special meaning here depending on whether HTTP or .NET versioning is being used). The downside here is getting the permissions to the client machine that are needed to run the application. See the references for articles about those issues.


The hybrid approach is my current favorite, as it requires an initial install but installs code with full permissions that can download updates as they become available. The hybrid approach also works in a disconnected manner and can update files that aren’t .NET assemblies, so there’s a lot of power in this model. As far as HTTP being “clunky,” I disagree. HTTP is a wonderful protocol because it works through firewalls and is supported absolutely everywhere. The References section provides two articles on using HTTP to provide auto-update and this technique really works.


In the future, I’d like to see the zero deployment model expand to provide a better way to deploy permissions and data files and to work in a disconnected manner, which will remove the need for even the initial setup process needed by the hybrid. I know that the WinForms team is very interested in making these things happen, so while Everett doesn’t contain any improvements in this area, perhaps future versions of .NET will.



I have feedback on this Ask The Wonk answer