The simplest IMHO solution is:
Currently, MainProgram downloads Updater been requested, as well as updates after Updater launched.
The update closes MainProgram , updates and restarts MainProgram , or just quits.
Thus, you have a flexible way to update your program ( MainProgram ), but also Updater , when necessary.
Hope this helps.
source share