【问题标题】:ClickOnce check for updates even though it should not (under a particular circumstance)ClickOnce 检查更新,即使它不应该(在特定情况下)
【发布时间】:2011-07-19 18:56:41
【问题描述】:

我将 ClickOnce 应用程序设置为不检查更新(项目属性 -> 发布 -> 更新... -> “应用程序应检查更新”未选中),因为我以编程方式搜索它们并留给用户可以随时安装。

现在在以下场景中:

  1. 应用程序已启动
  2. 使用 ClickOnce API 找到更新
  3. 应用程序未更新
  4. 然后关闭应用程序
  5. 下次启动应用程序时,ClickOnce 窗口将提示用户安装或跳过更新。

如何避免这种情况?

有趣的是,如果用户跳过安装,下次启动应用程序时将不再提示用户,因此应该有一些东西(在清单中?)告诉 ClickOnce 停止提示。

【问题讨论】:

  • 当您说您以编程方式检查时,您是否使用 API CheckForDetailedUpdate?
  • 我正在使用 CheckForUpdateAsync

标签: c# clickonce


【解决方案1】:

我以前见过这样的事情。我认为正在发生的事情是,当应用程序启动时,ClickOnce 不会检查更新,这是您设置的。当您运行应用程序时,会以编程方式完成更新检查并找到更新,并且可能会设置一个标志。然后应用程序在没有更新的情况下关闭,但标志仍然设置。下次启动应用程序时,ClickOnce 仍然不检查更新,但是因为设置了一个标志,表明有可用的更新,它会提示用户查看他们是否要获取更新。我猜这是设计使然。

关于您跳过更新的第二点,在有另一个更新之前不会再次提示您。我相信这是设计使然,如果您想返回并进行更新,您需要转到应用程序的 ClickOnce 安装页面。

理想情况下,您希望能够做的事情与您使用应用程序部署 API 以编程方式跳过使用 ClickOnce 对话框时发生的事情相同。我快速浏览了可用的公共方法,但我看不到任何关于跳过的信息,但也许你能找到一些东西。

编辑

刚刚又看了一下 API。您是在没有布尔参数的情况下调用 CheckForUpdate() 或 CheckForDetailedUpdate() 吗?如果是这样,您收到提示的原因是正如我所说的正在存储更新检查:

如果 CheckForUpdate 发现有更新可用,并且用户 选择不安装,ClickOnce 会提示用户 下次运行应用程序时更新可用。没有 禁用此提示的方法。 (如果申请是必需的 更新,ClickOnce 将安装它而不提示。)

您希望使用布尔值 false 调用您正在使用的方法,布尔标志确定是否应向用户显示对话框。

persistUpdateCheckResult 类型:System.Boolean 如果为 false,则将静默应用更新,并且不会显示任何对话框。

【讨论】:

  • 好的,谢谢您的信息。第二点对我来说不是问题,我只是想避免在第一个场景中出现任何提示
  • @Ganswer 在您的第一个示例中,当找到更新时,它是开始下载更新但应用程序在更新完成之前关闭,还是只是发现有可用更新?更新是强制性的吗?
  • 它只是使用 CheckForUpdateAsync 检查更新并找到它,但它不会下载它。更新不是强制性的
  • @Ganswer 我已经根据我的想法更新了我的答案。我认为您需要了解如何以编程方式“跳过”。
  • @Ganswer,我认为我已经找到了解决您问题的方法
【解决方案2】:

我看到ApplicationDeployment.CheckForUpdate() 方法has an overload 带有persistUpdateCheckResult 参数。

但是我使用的是CheckForUpdateAsync,它没有任何此类过载。当我遇到这个问题时,这似乎意味着结果的持久性。

我想解决方案是我自己编写异步调用...

【讨论】:

    猜你喜欢
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 2015-04-07
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    相关资源
    最近更新 更多