For silently updating the client I needed to
- Kill all the client GUIs (tray icons) of all users
- Stop the background service; Update the files and executables; Start the new background service
- Start the client GUI for all currently logged in users
The silent update is done by simply calling the normal NSIS installer with a parameter that makes it non-interactive. Information about how step one is handled is in the previous post. Step two was already in the Installer. Step three remained to be solved.
For that I created a NSIS plugin which checks if the current user is the SYSTEM user. If yes, it starts the executable for all currently logged in users. If not it returns zero. It is used like this:
StrCpy $0 "$INSTDIRUrBackupClient.exe" startplugin::start Pop $0 ${If} $0 == '0' Exec "$INSTDIRUrBackupClient.exe" ${EndIf}
Source code is here: http://download.urbackup.org/startplugin.zip
Binary is here (for NSIS Unicode): http://download.urbackup.org/startplugin_bin.zip