I'm a developer with a WPF application. I have zero way to distribute my application at the moment. I go to NuGet and install the Squirrel client library.
Now, I want to publish a release. To do so, I pop into the PowerShell Console and type New-Release
. What does this do? It:
- Creates a NuGet package of my app (i.e. via shelling out to NuGet.exe or w/e)
- It puts the package in a special "Releases" directory of my solution (along with a delta package for updates)
- It also creates a Setup.exe that I can distribute to people
- Can also transform
changelog.md
tochangelog.html
using the bundled Markdown library that ships with Squirrel
I've created a new release. Now, I want to share it with the world! I upload the contents of my Releases directory verbatim to the web via S3 / FTP / whatever.
In my app, I call bool UpdateManager.CheckForUpdates("http://mycoolsite.com/releases/")
- similar to ClickOnce API but not awful. The library helps me check for updates, get the ChangeLog HTML to render, and if I'm really lazy, I can just call UpdateManager.ShowUpdateNotification()
and get a stock WPF dialog walking the user through the upgrade. For production applications, I get the information I need to create my own update experience (yet I don't have to do any of the actual heavy lifting).
When I call UpdateManager.Upgrade()
, the application does the update in the background, without disturbing the user at all - the next time the app restarts, it's the new version.
I click on a link, and within seconds my application starts. No install experience, no dialogs, no UAC.