One of the regular software design discussions I find myself involved in is that of choosing between a rich (or sometimes, less politically correctly, “fat”) applications or a browser applications. Over the past 5 or so years we have seen a change of attitude, brought on my the ubiquity of the web and the pain that has been experienced in trying to deploy and manage traditional Win32 applications.
The good news is that with the advent of .NET, there is a new option – the Smart Client – that combines the ease of deployment of a web application, but with the power and richness of a windows application. Smart clients mean developers no longer have to try to “shoehorn” an app to work in a browser when it really isn’t appropriate. There are a number of articles around that you should check out if you want to learn more – try Smart Client Application Model and the .NET Framework 1.1 as a starting point.
In terms of deployment, the .NET Framework was designed with ‘xcopy’ deployment in mind, but with the caveat that in some cases you want to layer on top of this, to provide you with more power and control. An example of this is Jamie Cool’s Simple Application Updater – this shows how easy it is to automatically update client deployment of applications. Whilst this great for understanding how the technology makes .NET application deployment so easy, the Patterns & Practices team have created an application block that is more suitable for inclusion in real world programs – the Updater Application Block for .NET.
Looking ahead, the next version of Visual Studio, codename “Whidbey”, will include a new technology called “ClickOnce” that will simplify client deployment, and works out of the box. This part of Whidbey was announced at the PDC in October 2003, and there is a good technical document that describes this Introducing Client Application Deployment with “ClickOnce”
Check these out, and explore the benefits of building applications with the .NET Windows Forms class libraries without the deployment pains. Also, don’t forget Systems Management Server.