Я у себя внедрил такую технология на одном из проектов. Оказалось очень удобно для разработки и развертывания на любом количестве компов.
Во-первых зачем это все нужно. Есть большие проекты, которые разрабатываются месяцами или даже годами, или проект непрерывно разрабатывается и по-мере добавления функционала новые версии доставляется пользователю. Иногда с интервалом 2-3 версии в неделю. И вот возникает проблема, нужно установить измененную версию на машину пользователя. А если этих пользователей десятки и сотни, в пределах одной организации и нескольких территорий разбросанных в разных концах города. О ручном обновлении не может быть и речи. Это просто невозможно сделать силами нескольких программистов.
Поэтому: Режим обновления программы закладывается уже на этапе проектирования приложения.
Для этого, разбиваем приложение на 2 части. Первая которая запускается двойным кликом по-иконке приложения является загрузчиком новых версий.
Ее задача залезть в сетевую папку сервера и найти там обновленную версию приложения. А затем она просто сравнивает две версии, та что в сетевой папке и установленную у пользователя. Если версия в сетевой папке > установленной, загрузчик удаляет старую версию, и копирует новую из сетевой папки сервера, а затем запускает ее. Т.е. обновление происходит совершенно незаметно для пользователя. Разумеется можно усложнить загрузчик, сделать режим копирования по-списку, регистрации ActiveX и т.д. В результате получаем невероятно удобный механизм самообновления. Чтобы обновится, пользователю не нужно ничего деинсталировать, скачивать, а потом заново устанавливать. Достаточно просто запустить программу, и она сама скачает все обновления и запустится.
В общем рекомендую такой подход, для любых проектов с количеством пользователей больше трех. Для меня сразу решилась куча проблем с развертыванием.