配置为以编程方式执行更新的ClickOnce应用程序有时仍会显示ClickOnce Update Available提示

Tom*_*all 3 wpf clickonce dialog

我们使用ClickOnce部署了一个WPF应用程序,它在应用程序启动时以编程方式检查并执行更新.除了用户选择"否"以"我们想要更新吗?"的情况外,这通常表现得很好.提示.在这种情况下,下次用户启动应用程序时(一致地),ClickOnce框架的"可用更新"对话框将启动,并提供更新或跳过选项.这不会引起技术问题,但会让用户感到困惑,因为它可能会看到两个完全不同风格的对话框.(如果用户选择Skip到ClickOnce对话框,则应用程序将启动并呈现我们自己的"可用更新"对话框).在这种情况下,为什么ClickOnce框架对话框会显示?谢谢.

Rob*_*Net 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))来完成.falseCheckForUpdate(false)CheckForDetailedUpdate(false)