written by Germán Schuager on 29 Apr 2009
In the last month I've been working in several desktop applications and faced the situation of having to remotely update my clients machines repeatedly. It is not fun. The process that I was using for accomplish this task was the following:
I can tell you that it takes a lot of time to do these simple steps (and it is boring as hell) so I've decided to do something about it... I automated it.
The first thing that I've done is to evaluate the existing tools for this job. Here are some of them:
I had spent almost 3 non-consecutive days trying to integrate Clickonce deployment into my nant build scripts and I had failed; besides this, along the way I’ve discovered some limitations of Clickonce that made me look in other direction:
It has lots of functionalities, extensibility points and configuration options but it seems too big for my needs. I was looking for something simpler that just works with almost no configuration.
Not looked at this enough. It is bundled as a component that must be dragged into a form of your application (didn’t liked that)
Anyway... those were some of the existing options, but I was looking for something a lot simpler, something that I hadn't found, so I decided to write it myself.
My two main requirements were:
The simplicity requirement have taken me to make a lot of assumptions and to apply some conventions (a good thing as long as they are documented) that may not apply in everyone's scenario, for this reason, I've created several interfaces first and then developed its implementations to fulfill my requirements; this would allow anyone to easily replace some of my implementations with its owns in order to adjust NLaunch behavior. Right now it is not easily extensible without requiring source code modification, but I plan to fix that in the future.
Now with NLaunch my deployment process is reduced to this:
I can't say that this is actually fun, but at least is it neither boring nor tiresome... because I don't have to DO anything! :)
Well, enough writing for now, you can check out the project's home page for a little more specific information and you can also download the source code (it is really simple) or a ready-to-work binary.