Выбор стратегии обновления 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 для тестирования и рабочих серверов без повторной подписи.

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

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

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

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

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

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

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

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

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

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

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

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

Замечание

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

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

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

Замечание

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

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

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

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

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

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

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

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

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

Замечание

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

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

При использовании этой стратегии разработчик приложения предоставляет пользовательский интерфейс, позволяющий пользователю выбирать, когда или как часто приложение будет проверять наличие обновлений. Например, можно указать команду "Проверить наличие обновлений сейчас" или диалоговое окно "Параметры обновления", включающее различные интервалы обновления. 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 предложит пользователю снова установить приложение при следующем перезапуске. Если пользователь отказался предоставить более высокий уровень доверия на этом этапе, и обновление не помечается как обязательное, старая версия приложения будет запущена. Однако если обновление требуется, приложение не будет работать снова, пока пользователь не примет более высокий уровень доверия.

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