Операционная система Windows не позволит вам перезаписать работающее приложение. Вам нужно другое приложение, чтобы сделать это. Один процесс, который у меня есть, заключается в том, что у меня загружаются файлы приложения-загрузчика, но если они используются, им присваивается расширение .update.
Мое приложение, когда оно запускается, ищет любые файлы с таким расширением в папке и подпапках. Если он найдет его, он запустит приложение-патчер и завершит свою работу. Патчер ждет, пока программные файлы освободятся, а затем переместил файлы .update поверх файлов приложения и перезапускает приложение.
Требуется доля секунды для запуска при наличии обновлений, но пользователь не замечает.
Дополнительно:
Преимущество отдельной программы обновления заключается в модульности и чистоте. Вы можете повторно использовать программное обеспечение для обновления, и его код, вероятно, не является основным для того, что делает ваше приложение. Плюс, если вы не сделаете его многопоточным, это повлияет на интерактивность вашего приложения во время его работы.
Я видел, как многие программисты используют монолитный подход к развертыванию (со статическими сборками), однако модульность по-прежнему имеет значительные преимущества, если вы спросите меня.