Исполняемый файл не может заменить свой собственный файл, но он может загрузить новый Exe в известное место или имя файла в том же каталоге, а затем, при выходе, запустить процесс, который переключает файл, чтобы вы получили обновление следующий раз, когда он работает.
Если подумать, то в любом случае это лучший подход, так как вы не могли быть уверены, что загрузка файла завершится. Даже если бы вы могли, действительно ли вы хотите, чтобы пользователь дождался завершения загрузки? Нет ... лучше, чтобы загрузка работала в фоновом режиме.