(Yes, I'm double posting, but it's my forums, so bite me. :P)
We're currently planning the following:
1) When you connect to a server, it tells the game to send it the crc of all the game data files. Any that don't match get removed, and replaced. This handles updating of game data files.
2) When you connect to a server, it will get a version from the application, If that version is older than the server, it will download the updated client files, and tell the game "Exit and update". The game then prompts the user, and then starts an updater program, and exits. The updater will extract the new client files, overwriting all the others (keeping settings, of course) and then restart the game. The game will know that it ust updated, and will double check that the updater program itself doesn't have an update; if it does, it updates that too.
Now, I guess that it would be possible to take that updater, and allow it to connect to the server as a 'updating client', instead of a 'game client'. This would mean that if there's an update to the client program, we can have ti ust prompt the user, and ask them if they want to exit the game, and start the updater. The do that, and then the updater will download the update, install it, and then tell the game to overwrite itself (the updater tool) if there's an update.
I think this would work pretty well.