Приложение ClickOnce, настроенное для выполнения обновлений программным способом, по-прежнему иногда отображает приглашение ClickOnce Update Available - PullRequest
3 голосов
/ 06 мая 2010

У нас есть приложение WPF, развернутое с помощью ClickOnce, которое проверяет и выполняет обновления программно при запуске приложения. Это обычно ведет себя отлично, за исключением случая, когда пользователь выбирает «Нет» для нашего «Вы хотите обновить?» незамедлительный. В этом случае в следующий раз, когда пользователь запустит приложение (последовательно), откроется диалоговое окно ClickOnce Framework «Update Available» с возможностью обновления или пропуска. Это не вызывает технических проблем, но может сбить пользователя с толку, когда он увидит два совершенно разных стиля диалога. (Если пользователь выбирает «Перейти к диалоговому окну ClickOnce», приложение запускает и отображает наш собственный диалог «Доступно обновление»). Есть идеи, почему в этом случае отображается диалоговое окно ClickOnce? Спасибо.

Ответы [ 2 ]

7 голосов
/ 06 мая 2010

В диалоговом окне «Обновления» (которое находится на вкладке «Публикация») не установлены ли флажки для проверки наличия обновлений?

[РЕДАКТИРОВАНИЕ 18/18/2010] Вот еще некоторая информация, которую, я думаю, исправлюВаша проблема.

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

По-видимому, обновление представляет собой двухэтапный процесс:

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

Снятие отметкиОпция «Приложение должно проверять наличие обновлений», по-видимому, заставляет ClickOnce пропустить только шаг 1. Шаг 2 все еще выполняется.

Методы CheckForUpdate() и CheckForDetailedUpdate() имеют тот же эффект, что и Шаг 1 - данные сохраняются на диске, поэтому при следующем запуске приложения Шаг 2 увидит обновление и отобразит окно обновления.

Хитрость в том, чтобы CheckForUpdate() и CheckForDetailedUpdate() не сохранили эту информацию на диске.Это можно сделать с помощью параметрической перегрузки (CheckForUpdate(bool persistUpdateCheckResult) или CheckForDetailedUpdate(bool persistUpdateCheckResult)) с параметром, установленным на false (то есть CheckForUpdate(false) или CheckForDetailedUpdate(false)).

0 голосов
/ 26 сентября 2012
Методы

CheckForUpdate или CheckForDetailedUpdate должны вызываться с параметром false.

Документация intellisense для этих методов сбивает с толку.

...