А нет. Только что попробовал еще один способ - работает. Итак: есть основная программа, и программа-обновлялка. Нет, я не предлагаю при запуске проверять, есть ли обновления, и если есть - то вытягивать. Все проще: проверяет твоя программа, которая загружена и работает.
А вот когда она обнаружила, что обновление есть, и его надо качать - она запускает обновлялку. Та сама, в автономном режиме, скачивает обновление, и как только скачала - дает сигнал основной программе, "неплохо бы завершиться" (реализация этого взаимодействия может быть любой. Я сделал так, что при запуске обновлялки ей параметром передается Handle главного окна приложения, на который потом и отсылается WM_CLOSE. Тут все зависит от твоей фантазии). Основная программа завершается (корректно, без спешки, чтоб не убивать потоки, а завершить как положено), возможно - перед закрытием основного потока дает сигнал обновлялке, возможно - просто обновлялка ждет какое-то время, убирает старый EXE-шник, подменяет его новым и запускает его. После чего ее функция закончена - она может самоликвидироваться. Я надеюсь, как сделать, чтоб EXE-файл после завершения работы самоудалился - знаешь? У Рихтера есть рецепт.
Да, да, я знаю, какой вопрос ты сейчас задашь... (Показать/Скрыть)

"Это как так, если обновлялка будет самоудаляться, как же она запустится для следующего обновления. А если не будет удаляться - на кой фиг мне лишний файл еще нужен?" Так?
"Усе под контролем, шеф!" (С) ... Я как раз обновлялку запихал в ресурсы и в нужный момент вытаскиваю ее оттуда и запускаю. Очень удобно. Правда, размер программы увеличится на несколько десятков килобайт.