Стратегии замены исполняемого файла программы в Windows - PullRequest
4 голосов
/ 26 августа 2011

У меня есть программа для Windows, которая должна автоматически обновляться с сервера.

Он уже может передавать файлы с сервера и обновлять + проверять такие вещи, как файлы плагинов DLL, перед их загрузкой.

Однако, эта программа также нуждается в обновлении. Вероятно, есть несколько разных способов сделать это, и самый очевидный из тех, что я видел у разных клиентов онлайн-игр, - это создание «автоматического патчера», который загружает и запускает исполняемый файл клиента. Это порождает проблему необходимости обновлять автопатчер, поэтому, если есть более элегантное решение, я бы хотел услышать об этом.

Я должен представить, что есть способ загрузить новый исполняемый файл в качестве временного файла, скажем, «client.exe.tmp», а затем запустить отдельный процесс, ожидающий выхода оригинального client.exe. а затем переименовывает / копирует новый файл поверх него.

Кто-нибудь делал подобные вещи раньше успешно, и какой метод вы использовали, чтобы заставить его работать?

Ответы [ 3 ]

11 голосов
/ 26 августа 2011
  1. Запуск exe загружает новый, помещает его куда-то
  2. Запуск exe переименовывает себя во что угодно (например, .exe.tmp)
  3. Запуск exe помещает загруженный exe туда, где находится запущенный (названный так же, как оригинал)
  4. Запуск exe запускает загруженный exe
  5. Загруженный exe проверяет файл .exe.tmp, если найденный удаляет его и убивает старый запущенный процесс
  6. Выполнено
1 голос
/ 23 ноября 2015

Мне нравится подход к инструменту исправления / обслуживания / добавления / удаления инструментов. Даже если по какой-то причине вам нужно обновить что-то тривиальное, я не вижу здесь «парадокса курицы или яйца», это скорее «одна рука моет другую».

  1. Приложение проверяет сервер на наличие обновлений, если таковые имеются, проверяет, обновлен ли патчер, при необходимости патчер обновлений приложения
  2. Patcher выполняется как отдельный процесс, загружает обновление и уведомляет приложение о подсказках для его установки
  3. Вы согласны, приложение выходит из системы, уведомляя патчера, патчер распаковывает данные, заменяет exe, делает дополнительные вещи, которые могут понадобиться новой версией, запускает ее и завершает работу
0 голосов
/ 15 октября 2018

Рассмотрим Развертывание ClickOnce , которое поможет вам установить / заменить / обновить последнюю версию из общего расположения и выполнить.

...