Подтвердить что ты не робот

Автоматическое обновление приложений .NET

Мы находимся в процессе разработки действительно сложной системы, состоящей из нескольких служб WCF, приложений ASP.NET MVC, средств администрирования (приложений Windows Forms)... Некоторые из них будут иметь экземпляры, запущенные на нескольких серверах. Мы ищем хорошее решение для автоматического обновления для такой системы. Скорее всего, нам понадобится отдельное приложение (служба) автоматического обновления, которое будет выполнять задание, или какое-то централизованное приложение администратора, которое будет знать о версиях всех установленных экземпляров и удаленно выполнять обновление. Есть ли хороший продукт/библиотека, созданная для этой цели, о которой вы знаете или имели опыт?

4b9b3361

Ответ 1

Лично я использую очень простую методологию для любого автоматического обновления:

  • Установщик
  • Проверьте новую версию (простой WebClient и сравните номера с текущей версией AssemblyVersion).
  • Если версия выше, загрузите последнюю версию установщика (по соображениям безопасности должен быть SSL)
  • Запустите загруженный установщик и закройте приложение. (на этом этапе вам нужно иметь права администратора, если ваш установщик требует от вас администратора)

Установщик должен позаботиться об остальном. Таким образом, у вас всегда будет последняя версия и установщик с последней версией.

Ответ 2

Позвольте мне начать с того, что я являюсь основателем компании, у которой есть полное обновление, которое включает в себя:

wyUpdate обрабатывает все проблемы UAC Vista/Windows 7 и все проблемы с правами на доступ к файлам, которые неизбежно появляются при попытке обновления сложного программного обеспечения.

Мы также предлагаем бесплатные лицензии на wyBuild для проектов с открытым исходным кодом, но если вы просто хотите создать собственный обновитель, вы можете cannibalize наших исходный код свободно.

При этом, если вы хотите создать свой собственный updater, вот несколько советов:

Создание собственного обновления

Хорошим местом для начала является wyUpdate и AutomaticUpdater исходный код, упомянутый выше. Вы можете cannibalize его и использовать его для ваших собственных целей. Некоторые из содержащихся в нем алгоритмов:

  • Полная поддержка Windows Vista/Windows 7 UAC
  • Возможность ограниченным пользователям проверять и обновлять, если у них есть учетные данные.
  • Поддержка неустойчивого корпоративного inernet. (Если вы когда-либо работали с корпорацией, это настоящая проблема).
  • Быстрое извлечение, исправление и установка файлов.
  • Поддержка реестра.
  • Откат файлов и реестра при ошибке или аннулировании пользователем
  • Самообновление (без файлов осталось)

У нас также есть параметры файла здесь.

Автоматическое обновление

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

Мы используем именованные каналы для связи между автономным обновлением (wyUpdate) и синтаксисом автоматического обновления, который находится в вашей программе. wyUpdate сообщает о прогрессе в автоматическом обновлении, и Automatic Updater может сообщить wyUpdate об отмене прогресса, начать загрузку, начать извлечение и т.д.

Это предотвращает выделение обновлений от вашего приложения.

На самом деле, точные именованные каналы С#, которые мы используем, включены в статью, которую я написал немного назад: Многопроцессорное приложение на С# Google Chrome.

Ответ 3

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

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

Холодные обновления (требующие перезагрузки приложения) также поддерживаются и выполняются автоматически, если для задачи не задано "горячая замена".

Это объединит до одной DLL, размером менее 70 КБ.

Подробнее на http://www.code972.com/blog/2010/08/nappupdate-application-auto-update-framework-for-dotnet/

Код находится в http://github.com/synhershko/NAppUpdate (лицензия под лицензией Apache 2.0)

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

Автообновление служб WCF и веб-сайтов ASP.NET должно быть возможно также с ним, используя "горячую замену" файлов и задачу "iisreset", когда это необходимо.

Ответ 4

ClickOnce для ваших инструментов администрирования.

Ответ 5

Мы исследовали несколько вариантов и решили использовать библиотеку AppLife Update для нашего проекта enterpise.

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

Посмотрите полный список функций и несколько демонстрационных видеороликов на своем веб-сайте.

Ответ 6

Для простых приложений WPF, которые могут использоваться для установки Xcopy, вы можете использовать этот модуль AppUpdater. Это один исходный модуль, всего несколько строк кода, для добавления возможностей обновления в простое приложение WPF.

Это бесплатно.