Автоматическое обновление рабочего процесса Google Chrome

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

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

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

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

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

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

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

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

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


person Sambatyon    schedule 23.05.2011    source источник
comment
На каком языке это написано?   -  person lancscoder    schedule 23.05.2011
comment
Delphi, но я также планировал сделать для него фреймворк на C++.   -  person Sambatyon    schedule 23.05.2011


Ответы (4)


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

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

person synhershko    schedule 30.05.2011
comment
Хотя это началось как проблема на работе, сейчас я просто интересуюсь этой темой и занимаюсь исследованиями самостоятельно. Я также думал о написании библиотеки для него. - person Sambatyon; 31.05.2011
comment
Взгляните на NAppUpdate и скажите, нужна ли вообще другая библиотека :) - person synhershko; 31.05.2011

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

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

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

person lancscoder    schedule 23.05.2011

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

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

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

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

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

person Sambatyon    schedule 23.05.2011

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

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

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

person Chris Moschini    schedule 18.10.2012