I’m inventing a wheel today.
My current project needs to update itself over the Internet but I don’t want to have a Click Once install. The launcher will incorporate the licensing scheme I created for jsiPodFetch and most of the updating functionality from jsiPodFetch and logview4net.
The launcher might be installed via Click Once, but I think it will need a little to much privileges to run in the sandbox.
I run the launcher from the standard Program Files location where it ends up after installation. Then I create a folder under LocalApplicationData and copy the ‘real’ binaries to it. This way I can download updated files and update the application before I actually execute it. I can’t update the launcher though so I haven’t really decided how much functionality I should put in it.
Now that I think about it I could have a pluggable launcher pipeline. Just after the launcher has downloaded and extracted the package it could look for pipeline components in the assemblies it just downloaded. That way I can keep the launcher to a minimum and yet have it manage licensing and things like that.
Previously I have downloaded a new install package when I wanted to update my applications, but these users will probably not know what to do with an installer so I’d really like to keep it transparent to the user.