views:

141

answers:

4

I develop c# desktop software for medium-sized companies, and I'm looking for a good strategy to deploy software upgrades to my customers.

  • How do you handle this?
  • Do you use windows installer?
  • Is it a better choise to develop my custom upgrade program? Have you already developed similar things? Do you have some best practice to share?
  • Do you use some other library or existing software?

Thanks

+3  A: 

I develop a number of open source applications, some of them are updated and some are just a proof of concept.

When it came to deciding the best method of upgrading software I chose to use the ClickOnce route that is present within Visual Studio, not only does it automatically install any necessary .Net Framework files missing but it can also download updates from a specified web server on application start-up as well as at a time of my own choosing.

I feel it's the simplest way of pushing out updates to my applications, there are probably more elaborate methods but bearing in mind my applications are open source and there are no corporate requirements or deadlines I feel ClickOnce is more than suitable for the purpose.

Note: I write my applications in C# and either .Net 3.5 or .Net 4.

Link: Choosing a ClickOnce update method

Jamie Keeling
I've evaluated ClickOnce, but I need something that can be more under my control , beacuse I've to take care of corporate policy, folder permission, etc. More over, it'll be a bonus to autmatically deploy database upgrades, in form of sql scripts. ClickOnce can handle these kinf of problems?
Andrea Parodi
@Andrea - no, it can't; but ClickOnce is superb at working in locked-down environments, in my experience. I.e. - users need a web browser, Windows OS, and that's it
Kieren Johnstone
Jamie Keeling
@Jamie, I've gave it a fast look, but from what I understand, it allow to specify permissions that my application need to run. But often I need more permission during upgrade or setup of my software, than during it's normal use (e.g. becase the user has no write access to program files folder)
Andrea Parodi
@Andrea I'm not sure what to suggest, I think that setting your application permissions to a level that will be suitable for all periods of use would serve no disadvantages but it would more depend on whether the client's are comfortable with it. I'm afraid I tend to leave my permissions as default or use the permissions calculator, it's a shame that your requirements are slightly specific during certain periods.
Jamie Keeling
+2  A: 

Windows installer with WIX has become exceedingly simple and competent regarding upgrades, however if you're doing anything complex in your installer you may really want to ponder building auto-update into your applications. As long as you can depend on your clients to be running .net it's pretty easy to make apps that do this stuff for you.

Jimmy Hoffa
I use WIX for the initial setup of applications, plus http://dotnetinstaller.codeplex.com/ to bootstrap the setup and download any 3rd party requirement. But for upgrades I'm thinking to develop a custom autoupdate procedure that download new version stored on my website. Have you already developed similare thing? Do you have some best practice to share?
Andrea Parodi
@Andrea Parodi: I haven't developed similar stuff, but mixing MSI installed components and parts that are updated outside of the MSI process is a creepy prospect, I would say go all MSI or do it all with custom applications, because otherwise the application will become out of sync with the MSI databases understanding of it.
Jimmy Hoffa
+1  A: 

If you are looking at automating the upgrade process, I'd assume that you want to do it over the internet or any other corporate network.

So in this case, the best bet would be to develop a client server based installer, where the new files (or any package which contains such files) and the installation script (which can be anything ranging from a batch file to a custom written installer with your own rules of the installation steps) would be hosted in the server and you will have a thin client running on the client machines which would just download the packages and the scripts and start executing them on the client.

Now, how much of 'customization' that you want to do in the installer engine depends on the flexibility that you need.

Santhosh
Based on my past experience, I just need to copy new files to customer machine (taking care of restricted folder permission), upgrades corporate databases (just the first time one user of the corporate upgrade the software). Some time register some COM ojects. Do you find that such procedures can be developed in house, or it's best choice to buy some commercial software/library?
Andrea Parodi
I am not aware of any COTS for doing this. Might be you want to start writing these procedures yourself. I feel copying new files and updating databases might not be too complex to do..
Santhosh
+2  A: 

Or you can use a third party component Updater Component

Here's the documentation.

Searock
Have you already used it?
Andrea Parodi
I have used it in a testprogram but I haven't tested it. I think you should give a try as it is free.
Searock
I'm reading documentation. It appear to be promising... very flexible and customizable.
Andrea Parodi