В Windows по крайней мере, работает приложение блокировки свой EXE-файл и все статически связанные DLL-файлы. Это препятствует тому, чтобы приложение само обновлялось напрямую, если оно хочет предотвратить повторную загрузку (если перезагрузка в порядке, приложение может передать флаг MOVEFILE_DELAY_UNTIL_REBOOT
в MoveFileEx и может «перезаписать» его собственный .exe, так как все равно откладывается). Вот почему обычно приложения не проверяют наличие обновлений самостоятельно .exe, но они запускают прокладку, которая проверяет наличие обновлений, а затем запускает «реальное» приложение. Фактически «прокладка» может быть выполнена самой ОС, в силу правильно настроенного файла манифеста. Созданное Visual Studio приложение получает это как инструмент для сборки готового набора, см. ClickOnce Deployment for Visual C++ Applications.
Типичное приложение для Linux не обновляет себя из-за множества многих опций ОС. Большинство приложений распространяются как источник, запускаются через некоторую версию auto-hell для самостоятельной настройки и сборки, а затем устанавливаются самостоятельно через make install
(все это может быть автоматизировано за пакетом). Даже приложения, которые распространяются как двоичные файлы для конкретного вкуса Linux, не копируют себя, а вместо этого устанавливают новую версию бок о бок, а затем они обновляют symbolic link
, чтобы «активировать» новую версию (опять же, управление пакетами программное обеспечение может скрыть это).
Приложения OS X попадают либо в ведро Linux, если они относятся к приложению Posix, либо в настоящее время попадают в ведро приложений Mac AppStore, которое обрабатывает обновления для вас.
Я бы на днях, что обновление вашего собственного обновления никогда не достигнет изощренности любой из этих технологий (ClickOnce, RPM, AppStore) и предложит пользователю ожидаемое поведение при обнаружении, обновлении и удалении. Я бы пошел с потоком и использовал эти технологии на своих соответствующих платформах.
Насколько я знаю, Windows не позволит вам перезаписать EXE во время работы программы. Это одна из самых неприятных вещей в Windows, imo. – unwind
Как я уже говорил вам по этому другому вопросу, вы не можете перезаписать исполняемый файл exe. Я даже дал пошаговые инструкции о том, как сделать весь этот процесс. –
@MooingDuck Я знаю! Я все еще ссылаюсь на ваш ответ как на высокий уровень дизайна. Я просто сужу рамки этого конкретного вопроса. Я уже доволен ответами. – TheBuzzSaw