2

I have built a Windows-only desktop application which is composed of two main executables and various configuration files. The two applications are developed in different languages (JS and C++, respectively) and should always be in sync with versions (ie. appA-v1.0.exe would probably be incompatible with appB-v2.0.exe).

I'm looking for an auto update method that helps me ensure this constraint is always true: this would mean distributing a single package containing both applications instead of using language-specific auto-updaters (I used Sparkle for C++ and Squirrel for electron in the past).

I have full access to the machines this software would be installed on (5/6, all managed by us), so the idea is to have a timed update check that in case of need downloads and unpacks the update. The update should not require user interaction.

I could write this on my own, using an FTP server to host the package, checking last modification date, downloading and unpacking if needed, but I was wondering if there are better solutions.. any idea?

Thanks!

GavinoGrifoni
  • 517
  • 4
  • 11
  • This is not a software development question, it is a system administrators question, it would be the same question if someone else handed you over a bunch of ready-make exe and dll files. And the canonical answer is: put all your files into an MSI package, and use [MSI deployment](http://www.advancedinstaller.com/user-guide/tutorial-gpo.html) for distribution (or, whatever standard mechanism is used in your company for distribution of other software). – Doc Brown Dec 15 '16 at 19:51
  • 1
    I'm voting to close this question as off-topic because this question belongs on ServerFault.SE – Doc Brown Jan 15 '17 at 08:15
  • https://chocolatey.org/ – Basilevs Jan 15 '17 at 08:19
  • This is a development question in a sense that no package is yet prepared and packaging is not really an administrative task. Still, more suited for SO. – Basilevs Jan 15 '17 at 08:21
  • ServerFault? This is a resource request. –  Jan 23 '17 at 21:41
  • @docbrown - disagree, while "use whatever your sysadmin uses to distribute applications" is a valid answer, there are other solutions not normally available to a sysadmin e.g. adding automatic updates to your applications. – Justin Jan 24 '17 at 12:36

3 Answers3

1

One way you could handle this is by using extensions to the WSUS (Windows services update server?) to deploy updates to your application.

This answer from Microsoft is a little old but I think it still applies:

Hi Ahmed Shariff, to Patch third party software like Adobe Reader, Flash player, Java and other you have the choice between : - Free Applications (open source) : - Local Update Publisher (http://localupdatepubl.sourceforge.net/fr/index.html) - Wsus Package Publisher (http://wsuspackagepublisher.codeplex.com/) - Commercial Applications : - Patch Manager from Solarwinds (http://www.solarwinds.com/solutions/microsoft-wsus-patch-management.aspx) - Corporate Software Inspector from Secunia (http://secunia.com/vulnerability_scanning/corporate/help/sfw.csiwsusconfiguration/)

Source: Microsoft Help Forum Post

Alternatively if your application is portable (no installer necessary) you could use a git server to host your binary and add a scheduled task which pulls from your repository. It isn't exactly what it was built for but you do you get versioning out of the box and easy rollback capabilities.

Adrian
  • 253
  • 1
  • 6
0

If you are on a domain, investigate using the SCCM mechanism. This system allows you to schedule and push out SW updates, etc and can distribute and install silently and remotely. It's a large domain to study but it does do what you ask for.

Monza
  • 129
  • 1
0

As this question is still generating activity, I'll add my solution so it will no longer appear as opened.

I simply ended up setting up a git repository containing all the compiled assets (for both applications).

I added a deployment key to that repo for each machine I had to update, and added a cronjob that simply executed a git pull every night at 1 AM. When an update is to be released, I simply push to the right branch of that repo and wait for it to be pulled.


While this may not seem an optimal solution to the problem, I went with this one for a number of reasons:

  • Simplicity in setup
    • this point is mostly thanks to the small number of machines to be updated
  • Unique package distribution (the 2 applications are always synced with versions)
  • No extra code to be added in any of the applications
  • Relying on an already paid "hosting service" (i.e. bitbucket)
  • Pull update logic (the machines have huge limitations when it comes to incoming connections, due to company firewall policy)

Of course this is not ideal for a bunch of reasons:

  • No way to control if the update has been applied
  • No way to force an update outside scheduled update times

Again, I don't know if this could be ever useful to anyone, it was a particularly specific case with a lot of constraints by the machine owners, so please don't throw at me too much hate for having used this solution.

GavinoGrifoni
  • 517
  • 4
  • 11