Ваше приложение может проверить, доступна ли новая версия на удаленном сервере. Если это так, то он может загружать файлы обновлений в одну из пользовательских папок, например, временную папку пользователя. Вы можете получить адрес таких специальных папок, используя функцию SHGetSpecialFolder API.
После завершения загрузки вы можете открыть диалоговое окно, сообщающее пользователю, что вы готовы к обновлению. Если пользователь согласен с обновлением, вы можете запустить процесс обновления с повышенными привилегиями (как администратор), и процесс обновления может заменить существующие файлы в вашем пути установки на файлы, уже загруженные в папку пользователя Temp. Чтобы запустить программу обновления от имени администратора, вы можете использовать ShellExecute :
ShellExecute(0,'runas','notepad.exe',nil,nil,SW_SHOWNORMAL);
Когда обновление будет завершено, процесс обновления может перезапустить ваше приложение.