Delphi: Как вы автоматически обновляете свои приложения?

35

Я подумывал о сворачивании своего собственного кода, позволяющего моему приложению Delphi обновляться без проблем, поскольку я буду продолжать "выпуск часто, выпускать ранний" менталитет. Существуют различные решения Delphi (как бесплатные, так и платные), и я хотел бы спросить, используете ли вы какой-либо из них или просто продолжаете использовать свои собственные решения в этой области. Любые комментарии к теме автоматического обновления приветствуются.

Теги:
auto-update

10 ответов

13
Лучший ответ

Несколько лет назад я написал простой инструмент, который запускается вместо реальной программы, проверяет наличие обновлений, загружает и устанавливает их (если таковые имеются) и, наконец, запускает реальное приложение.

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

Вы должны решить, можно ли предполагать, что ваша целевая аудитория будет работать от учетных записей с полномочиями пользователя или администратора, или вам придется иметь дело с вышеупомянутыми проблемами. С Vista все стало намного сложнее.

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

17

Какую схему вы используете, может быть полезно знать, что вы действительно можете переименовать исполняемый файл .exe. Поэтому переименуйте файл, копия в новом файле работает хорошо. И в следующий раз, когда кто-то запустит программу, они запустит новую версию. Это, конечно же, очень удобно в среде, где многие пользователи запускают один и тот же файл .exe, например, в случаях сбоев citrix/terminal server/network.

  • 0
    Это все еще верно для Win7 и Win10? : D
7

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

В большинстве случаев загрузка - это программа установки, созданная InnoSetup, которая обновляет систему пользователей и базу данных до последней версии. Когда требуется новое "платное" обновление, я затем отправлю пользователя в форму "покупки обновления". Мои веб-ресурсы - это страницы ASP, поэтому я могу перенаправить на другой ресурс на основе номера версии для клиентов.

Для основного приложения (наше приложение имеет часть сервера и часть клиента) у меня есть загрузчик, который проверяет сервер, чтобы проверить, отличается ли версия клиентского файла на сервере версией на клиенте...если так, он запрашивает пользователя, хочет ли пользователь обновить/вернуть. Мы выбрали запрос пользователю, поскольку иногда случайная ошибка может попасть в систему, и пользователь должен отказаться или обновить только определенные машины, чтобы помочь устранить неполадки. Я поддерживаю запись базы данных с минимальной требуемой версией, которая обновляется через патч базы данных, поэтому, если версия должна быть удалена, запись соответственно обновляется.

6

Я создал собственное решение, основанное на Indy для загрузки, и http://sourceforge.net/projects/makeupdate/ для исправления файлов. До этого я использовал и пробовал несколько коммерческих инструментов, но никто не делал именно то, что мне нужно.

5

Я использую TmxWebUpdate. Он бесплатный, простой и дает вам хороший контроль над процессом. Я действительно владею пакетом компонентов TMS с TWebUpdate, но на самом деле не нашел подходящей причины для переключения.

Изменить: обновлена ​​ссылка

  • 0
    ссылка не работает
  • 0
    Вы можете получить его здесь: torry.net/authorsmore.php?id=3079
4

Мы используем наше собственное решение, которое следует следующим шагам:

  • Приложение подключается к http-ресурсу и загружает информационный файл (ini text file) в память, проверяет номер версии новейшей версии.
  • Если доступна более новая версия, приложение загружает сжатый двоичный пакет в место exe.
  • Когда загрузка завершена, пользователю предлагается перезапустить приложение.
  • При запуске приложение проверяет наличие пакета обновления
  • Приложение извлекает содержимое пакета (обычно это новое приложение exe, но возможны и дополнительные ресурсы, например, обновленные языковые файлы и т.д.) - для каждого файла он сначала переименовывает текущий/старый файл во временное имя, а затем извлекает новый файл, Если процесс завершается с ошибкой в ​​любой момент, временные файлы восстанавливаются.
  • По завершении приложение выполняет новый exe и закрывается.

Нет необходимости в дополнительном обновлении, приложение exe может обрабатывать все это самостоятельно.

В сжатом пакете мы используем собственный построитель обновлений. Пакет содержит индекс файлов с хешем файла, целевой папкой (относительный путь к основному exe) и сжатыми файлами. Во время обновления мы сравниваем сохраненный хэш с извлеченным файлом для обнаружения поврежденных файлов.

В Vista я вижу два решения, позволяющие стандартным учетным записям пользователей фактически обновлять файлы приложений:

  • Настройте свою настройку для изменения прав доступа к каталогу установки программ. Таким образом, файлы в "C:\Program Files (x86)\Your Company\You App" могут быть изменены на учетных записях с ограниченными правами.

    Пример кода для InnoSetup:

    [Dirs]
    Name: "{app}"; Permissions: users-modify
    
  • Установите файлы, которые вы планируете обновить, в папку ProgramData, а не в каталог, определенный пользователем, и используйте этот каталог в качестве переопределенной папки. Если файлы существуют в ProgramData, используйте их, а затем проверьте установку dir.

    Код InnoSetup:

    [Files]
    Source: "C:\Your Project\YourApp.exe"; DestDir: "{commonappdata}\Company Name\App Name\"; 
    
  • 0
    Просто для информации, в настройках Inno есть параметр командной строки / DIR = "<путь>", который можно использовать для переопределения DestDir - я использую это при запуске загруженной установки Inno и заменяю <путь> папкой, в которой находится приложение на самом деле установлен.
  • 1
    Предоставление пользователям прав на изменение файлов в каталоге «Program Files» (или его подпапках) - это ОЧЕНЬ БОЛЬШАЯ ПРОБЛЕМА БЕЗОПАСНОСТИ !!! Если пользователь заражается каким-либо вирусом, он может изменить код вашей программы!
Показать ещё 3 комментария
4

Мы тоже катались. Это действительно не слишком сложно.

Наш процесс выглядит примерно так:

  • Когда основное приложение запущено, оно проверяет (используя funcs из библиотеки synapse), если доступно обновление (при условии, что он настроен на проверку, конечно).

  • Если это так, он уведомляет пользователя и спрашивает, хотят ли они обновить.

  • Если они это сделают, он запускает updater.exe и закрывает основное приложение.

  • Программа updater exe загружает новые файлы на основе содержимого текстового файла, который он извлекает, сохраняя файлы в памяти.

  • Когда программа обновления будет загружать все правильно, она затем сохраняет загруженные файлы на диск, резервируя любые файлы, которые он заменяет. Таким образом, если загрузка перепутана, вы не получите половину установленных файлов.

  • Наконец, он снова запускает основное приложение и закрывается.

Уловка w/Vista заключается в том, что вам нужно иметь запись в манифесте программы обновления, чтобы заставить ее работать с правами администратора.

4

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

Я буду следить за этим вопросом, кстати...

  • 0
    Я тоже использую TWebUpdate. STG говорит все это - это работает, но документы могут быть намного лучше. Тем не менее, он-лайн поддержка через их группы новостей и электронную почту поддержки хороша. Это достаточно дешево, чтобы вы могли позволить себе попробовать его и посмотреть, достаточно ли он хорош, пока вы добавляете другие функции.
4

Обычно мы используем сторонний инструмент. Но в некоторых ситуациях он не использовался, поэтому я создал собственное решение, которое было довольно стандартным:

  • Получить xml (или любой другой формат) с информацией об обновлении.
  • Если новые файлы опубликованы, загрузите и установите их.
1

То же, что и "stg" и "GuyWithDogs", я использую TWebUpdate из TMS. Хотя документация не так велика, ее не так сложно узнать.

С TWebUpdate у вас есть несколько вариантов использования протокола, это может быть сделано через HTTP, FTP или сетевой доступ.

Для уровня связи TWebUpdate использует WinInet. На некоторых машинах кеш URL-адресов окон /IE может быть удручающим, поэтому я добавил процедуру очистки, чтобы сначала очистить адрес сервера автоматического обновления от кеша, чтобы информация, собранная с сервера, была актуальной.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню