Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does an application launcher update itself?

Launchers are most common in games. Think of League of Legends, Starcraft II, or almost any MMO out there. Before starting the actual game, you have a small launcher app that takes care of updates and patching.

I want to move this direction with a particular non-game application I am developing. The concept of the launcher makes perfect sense: it checks for updates, replaces the appropriate binaries/libraries, maybe runs an integrity check, and launches the application. However, how do launchers update themselves? This tends to be a rare event, but how is it done? Does the launcher literally just write over the very binary it is currently running from? Or is there some kind of swap step after the download? I need to be able to push out (rare) updates to the launcher (especially if I discover some bug in my launcher).

My particular project will be in C#, but I am interested in conceptually similar C++ and/or Java solutions as well for future reference.

like image 984
TheBuzzSaw Avatar asked Jan 20 '12 16:01

TheBuzzSaw


People also ask

How does the app launcher work?

While iPhones are locked up tight, the Android is easy to personalize, which can lead to a more functional and efficient smart phone. A launcher, also known as a home-screen replacement, is simply an app that modifies the software design and features of your phone's OS without making permanent changes.


2 Answers

I've never tried, but this is what I would guess (assuming you can't overwrite a file being executed. If you can, this is all simpler)

Updater A checks if its the newest version
If launcher isnt the newest version
    Download the differences (to save bandwidth) to file B
    Apply the delta to own code into file C
    Launch file C.
    Close
If file C exists (update happened recently)
    Try to delete C  (update was previous launch, delete temporary file)
    If delete fails  (We are C, means A is out of date)
        Copy C over A  (update launcher)
        Note that you can keep going, dont have to restart even though we are C.
If game isnt newest version
    Download the differences (to save bandwidth) to file B
    Apply the delta to game into file D
    delete game
    Rename D -> game
Run game

André Caron has shown me that the swap trick is done better with transactional file IO.

like image 52
Mooing Duck Avatar answered Oct 05 '22 22:10

Mooing Duck


Basically the launcher checks to see if there is a newer version of it self, and if so kicks off a task to get the new version and then executes it and then closes.

Given the updater app is small and loads up quick, you can have it detect, download, stick up a dialog to say there's a new version, and barely flicker as the old version closes and the new one runs up.

like image 24
Tony Hopkinson Avatar answered Oct 06 '22 00:10

Tony Hopkinson