Автообновление аля рабочий процесс Google Chrome - PullRequest
8 голосов
/ 23 мая 2011

В компании меня попросили написать функцию автообновления а-ля хром. То есть Он должен периодически проверять, доступна ли новая версия, загружать новую версию и применять ее автоматически при следующем запуске приложения.

У меня уже есть кое-что и работает, но это больше похоже на грязный взлом, чем то, что я чувствую себя счастливым по этому поводу. Итак, я хотел бы знать, как спроектировать и реализовать такое решение. Мой ужасный хак работает так:

  1. Наличие механизма проверки наличия новой версии (запрос к базе данных или веб-служба)

  2. Загрузите полный почтовый индекс со всей новой версией.

  3. Проверить подпись файла. Если все прошло нормально, установите значение реестра: необходимо обновить до true.

  4. Когда приложение перезапускается, если значение must update имеет значение true, запускайте программу обновления и существуйте.

  5. Обновление удаляет содержимое папки приложения, распаковывает обновление и заменяет старое содержимое, запускает приложение и завершает работу.

Теперь я хотел бы изменить его, чтобы он работал чище. Я планирую отправить обновление в виде файла bsdiff . Это загружается. Но вопрос в том, что будет дальше?

Когда применить обновление? Кто отвечает за применение патча? это сама программа или третья программа, как я, которая отвечает за применение патча и перезапуск приложения?

Ответы [ 4 ]

3 голосов
/ 23 мая 2011

Если вы идете по маршруту C ++, вы можете перейти на chromium и загрузить исходный код Chrome и покопаться, чтобы посмотреть, как выполняется обновление, это может дать вам лучшее представление о том, как к нему подойти , Вот статья , которая может помочь.

Если вы знакомы с .NET, недавно выпущенным nuget, также есть функция автоматического обновления, на которую полезно взглянуть, вы можете получить исходный код по адресу здесь . У Дэвида Эббо есть блог о том, как это сделано здесь .

Я не в курсе делфи, но вы можете использовать любой из перечисленных выше вариантов.

2 голосов
/ 19 октября 2012

Вы можете буквально использовать рабочий процесс обновления Google Chrome с помощью средства обновления Google Chrome:

http://code.google.com/p/omaha/

Они открыли его в феврале 2009 года.

2 голосов
/ 30 мая 2011

Рабочий процесс, который вы предложили, более или менее похож на работу, но нет необходимости заново изобретать колесо - есть множество библиотек, которые сделают это за вас.Преимущество использования сторонней библиотеки состоит в том, что она обеспечивает чистоту кода и гарантирует, что грязный процесс автообновления содержится и работает без сбоев.

Поверьте мне, я знаю.Я являюсь автором NAppUpdate , платформы обновления приложений для .NET (которую вы, возможно, захотите попробовать или поучиться).

2 голосов
/ 23 мая 2011

Итак, после того, как я дал ему много, это то, с чем я пришел (для активного каталога я буду ссылаться на каталог, в котором находится основная программа, активная программа - это основная программа, а программа обновления - та, которая заменяет активная программа и ее файлы ресурсов):

  • Активная программа проверяет наличие новой версии каждый определенный промежуток времени. Если это так, загрузите его
  • Подготовьте новую версию в отдельной папке (это можно сделать, скопировав содержимое каталога с программой в подкаталог и применив двоичное исправление или просто разархивировав новую версию).
  • Установите флаг, который указывает, что новая версия готова.

Когда программа завершает работу (и здесь нужно контролировать различные прерывания):

  • Активная программа проверяет флаг готовности новой версии. Запустите программу обновления и выйдите.
  • Программа обновления проверяет, может ли она записывать в активный каталог. Если это так, заменяет содержимое подготовленной версией.
  • Программа обновления должна перепроверить ссылки и соответственно обновить их.

Так, ребята, если у вас есть лучший рабочий процесс, пожалуйста, скажите мне.

...