Выбор стратегии обновления ClickOnce

ClickOnce может предоставлять автоматические обновления приложений. Приложение ClickOnce периодически считывает файл манифеста развертывания, чтобы узнать, доступны ли обновления приложения. Если обновление доступно, загружается и выполняется новая версия приложения. Для обеспечения эффективности работы загружаются только измененные файлы.

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

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

Примечание.

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

Примечание.

В платформа .NET Framework 2.0 и платформа .NET Framework 3.0 в любое время, когда приложение проверка обновлений, до запуска или после запуска или с помощью <API xref:System.Deployment.Application>, необходимо задать deploymentProvider в манифесте развертывания. Элемент deploymentProvider соответствует в Visual Studio поле "Расположение обновления" в диалоговом окне Обновления вкладки "Публикация". Это правило расслаблено в платформа .NET Framework 3.5. Дополнительные сведения см. в разделе "Развертывание приложений ClickOnce для тестирования и рабочих серверов без отставки".

Проверка обновлений после запуска приложения

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

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

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

Это то же самое, что и изменение в манифесте развертывания элемента Обновление следующим образом:

<!-- When to check for updates -->
<subscription>
   <update>
      <expiration maximumAge="6" unit="hours" />
   </update>
</subscription>

Проверка обновлений перед запуском приложения

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

Данная стратегия оптимальна для высокопроизводительных сетевых подключений; при использовании малопроизводительных подключений задержка в запуске приложения может быть неприемлемо большой.

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

Это то же самое, что и изменение в манифесте развертывания элемента Обновление следующим образом:

<!-- When to check for updates -->
<subscription>
   <update>
      <beforeApplicationStartup />
   </update>
</subscription>

Примечание.

Для .NET Core 3.1 и .NET 5 и более новых приложений проверка обновления до запуска приложения является единственным поддерживаемым вариантом обновления.

Создание необходимых обновлений

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

Примечание.

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

Для пометки обновления как обязательного щелкните Указать минимальную требуемую версию этого приложения в диалоговом окне Обновления приложения, а затем укажите версию публикации (Основная, Второстепенная, Сборка, Редакция), задающую минимальный номер версии приложения, которая может быть установлена.

Это то же самое, что и установка атрибута minimumRequiredVersion элемента Deployment в манифесте развертывания; например:

<deployment install="true" minimumRequiredVersion="1.0.0.0">

Указание интервалов обновления

Можно также указать, как часто приложение должно проверять наличие обновлений. Чтобы сделать это, укажите, что приложение проверяет наличие обновлений после запуска, как описано выше в разделе "Проверка наличия обновлений после запуска приложения" этой статьи.

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

Это то же самое, что установка атрибутов maximumAge и unit элемента Update в манифесте развертывания.

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

Примечание.

В ClickOnce для .NET Core и .NET 5 или более поздней версии эта функция не поддерживается. Дополнительные сведения см. в разделе ClickOnce для .NET.

Предоставление пользовательского интерфейса для обновлений

При использовании этой стратегии разработчик приложения предоставляет пользовательский интерфейс, который дает пользователю возможность выбирать время и частоту проверок приложением наличия обновлений. Например, может предоставляться команда "Check for Updates Now" (Проверить наличие обновлений сейчас) или диалоговое окно "Параметры обновления" с вариантами выбора разных интервалов обновления. API развертывания ClickOnce предоставляют платформу для программирования собственного пользовательского интерфейса обновления. Дополнительные сведения см. в описании пространства имен System.Deployment.Application.

Примечание.

Класс ApplicationDeployment и API в System.Deployment.Application пространстве имен не поддерживаются в .NET Core и .NET 5 и более поздних версиях. В .NET 7 поддерживается новый метод доступа к свойствам развертывания приложения. Дополнительные сведения см. в разделе "Свойства развертывания Access ClickOnce" в .NET. .NET 7 не поддерживает эквивалент методов ApplicationDeployment.

Если приложение использует функции API развертывания для управления собственным алгоритмом обновления, следует блокировать проверку обновлений, как описано в теме "Блокирование проверки обновлений" в следующих разделах.

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

Блокировка проверка обновления

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

Кроме того, следует заблокировать обновление проверка, если приложение использует API развертывания для выполнения собственных обновлений; см. статью "Предоставление пользовательского интерфейса для обновлений" ранее в этом разделе.

Чтобы блокировать проверку обновлений, снимите флажок Приложение должно проверять доступные обновления в диалоговом окне "Обновления приложения".

Проверку наличия обновлений можно также блокировать, удалив из манифеста развертывания тег <Subscription>.

Повышение уровня разрешений и обновления

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

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