views:

59

answers:

3

I have a small .NET WinForms application, and couple of linux servers, DEV and CL1,CL2..CLN (DEV is development server and CL* are servers which belons to our clients, they are in private networks and it's a kind of production servers)

I want an update mechanism so that
(1) i develop a new version and publish it to a DEV
(2) users of DEV-server install latest version from DEV
(3) users of CL2 (employees of client2) install stable version from CL-2 directly
(4) application checks for updates using server it was installed from (so, if it was installed from CL-2, it should check CL-2 for updates)
(5) i should be able to propogate the update to a selected CL-server (using just file copy & maybe sed; not republishing), if i want that (and if i don't, that CL-server will have an old version until manually i update it)

I tried to use clickonce, but looks like it meets only first two requirements.

What should i do?

+4  A: 

ClickOnce should handle 1-4 to be honest. All that would be needed is that for each site you want to deploy/update from, you'll need it to have its own publish, which after looking at your specifications is not incorrect to do.

What you could then do in order to make 5. applicable, is create an automated process to re-publish the file. This could perform a publish and then upload to the correct server.

Remember that ClickOnce needs a new manifest per version, and a new version requires a publish, so I'm not sure that you'll get around 5. with a simple file replacement.

Kyle Rozendo
+2  A: 

Kyle is right. But for the 5th note, you just need to copy the deployment, and then use mage to modify the installation URL and point it to the new server, and then re-sign the manifests.

RobinDotNet
@Robin - Does one not need to re-publish to increase the version?
Kyle Rozendo
You can modify the version# with MageUI and re-sign the two manifests, copy the whole shebang to the webserver, and voila, you have a new version.
RobinDotNet
Nice one! Thanks for the info, very interesting.
Kyle Rozendo
A: 

I support an app that we deploy to a DEV, QA, PROD servers. The way I handled this is that I created created a cmd file that has command line calls to MSBUILD. It builds the app once for each server with the appropriate URLs and switches. I give my DEV and QA builds a different AssemblyName that way I can run all 3 environments side by side. This way my build process is automated and I don't have to publish at all.

Here's an article that describes the parameters you can use. http://msdn2.microsoft.com/en-us/library/ms165431(VS.80).aspx

@Kyle, For the above solution can the different versions run side by side or do you get errors indicating the app is already installed.

pSattele