ClickOnce проверяет наличие обновлений, даже если это не требуется (при определенных обстоятельствах) - PullRequest
3 голосов
/ 19 июля 2011

Я установил в своем приложении ClickOnce не проверять наличие обновлений (Свойства проекта -> Публикация -> Обновления ... -> «Приложение должно проверять наличие обновлений» не проверено), поскольку я выполняю их программный поиск и оставляю пользователювозможность их установки в любое время.

Теперь по следующему сценарию:

  1. Приложение запускается
  2. Обновление найдено с использованием API ClickOnce
  3. Приложение не обновляется
  4. Приложение закрывается
  5. При следующем запуске приложения окно ClickOnce предложит пользователю установить или пропустить обновление.

Как этого избежать?

Интересно, что если затем пользователь пропустит установку, то при следующем запуске приложения пользователю больше не будет предложено, следовательно, должно быть что-то (в манифесте?), который сообщает ClickOnce, чтобы остановить запрос.

Ответы [ 2 ]

2 голосов
/ 20 июля 2011

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

Что касается второго пункта, где вы пропускаете обновление, вам не будет предложено снова, пока не появится другое обновление. Я считаю, что это сделано специально, если вы хотите вернуться и выполнить обновление, вам нужно перейти на страницу установки ClickOnce для приложения.

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

EDIT

Просто еще раз взглянул на API. Вы вызываете CheckForUpdate () или CheckForDetailedUpdate () без логического параметра? Если да, то причина, по которой вы получаете приглашение, заключается в том, что, как я уже сказал, проверка обновлений сохраняется:

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

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

persistUpdateCheckResult Тип: System.Boolean Если false, обновление будет применено без вывода сообщений, и диалоговое окно не будет отображаться.

1 голос
/ 12 августа 2011

Я вижу, что ApplicationDeployment.CheckForUpdate () метод имеет перегрузку с параметром persistUpdateCheckResult.

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

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

...