du könntest das ganze einfach auf einen webserver schmeißen und den download per .htaccess schützen.
die Client-Exe von der Update.Exe aus zu beenden dürfte auch kein Problem sein. Ich hab das ganze mal so gelöst das ich von der update.exe (heißt bei mir türlich anders) eine message an das hauptprogramm sende (dabei schick ich gleich mein
handle mit). Die Hauptanwendung (client.exe) empfängt die windowmessage, speichert die daten, löst ein destroy aus und schickt dann eine Message zurück an die Update.exe. Somit weiß die update.exe das die hauptanwendung in ca. einer sekunden geschlossen ist (da speichervorgänge vor senden der message ausgeführt wurden). Und dann kann die update.exe die client.exe bequem mit derm download ersetzen. Nach Abschluss des Downloads einfach nur noch mit ShellExecute die Hauptanwendung wieder starten und danach die update.exe sich selbst schließen lassen.