2010-05-06 2 views
3

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

ответ

7

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

[РЕДАКТИРОВАТЬ 6/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

Мы не используем Visual Studio для публикации, я создал автоматическую публикацию с использованием MSBuild. Задача GenerateDeploymentManifest указывает Install = "true", UpdateEnabled = "false" и не указывает UpdateMode, который в этом случае не имеет значения. Благодарю. –

+0

Хорошо, понял. Я продолжаю видеть, как это сообщалось (то же, что и в Visual Studio). Я посмотрю, смогу ли я воссоздать его и посмотреть, смогу ли я его воссоздать. Если смогу, я напишу об ошибке и поговорю с командой продукта ClickOnce. Я отправлю отчет ... – RobinDotNet

+0

Привет, Робин, вам удалось воспроизвести это? Это ошибка в ClickOnce?Если есть обходной путь, мы бы очень хотели его реализовать до начала работы. Благодарю. –

0

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

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