ClickOnce检查更新,即使它不应该(在特定情况下)

本文关键字:不应该 在特定情况下 检查更新 ClickOnce | 更新日期: 2023-09-27 18:02:29

我设置我的ClickOnce应用程序不检查更新(项目属性->发布->更新…->"应用程序应该检查更新"是未选中的),因为我通过编程搜索它们,并且我让用户可以随时安装它们。

现在在以下场景中:

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

如何避免这种情况?

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

ClickOnce检查更新,即使它不应该(在特定情况下)

我以前见过类似的事情。我认为正在发生的事情是,当应用程序启动ClickOnce不检查更新,这是你所设置的。当您运行应用程序时,将以编程方式进行更新检查,并找到更新,可能还会设置一个标志。然后关闭应用程序,不进行更新,但仍然设置该标志。下一次启动应用程序时,ClickOnce仍然不检查更新,但由于设置了可用更新的标志,它提示用户查看是否要获取更新。我猜这是故意的。

关于你跳过更新的第二点,你将不会再次提示,直到有另一个更新。我相信这是设计的,如果你想回去做更新,你需要去ClickOnce安装页面的应用程序。

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

编辑

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

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

相反,你想用布尔值false来调用你正在使用的方法,布尔标志决定是否应该向用户显示对话框。

persistUpdateCheckResult Type: System。布尔如果为false,则静默应用更新,并且不显示任何对话框。

我看到ApplicationDeployment.CheckForUpdate()方法有一个超载的persistUpdateCheckResult参数

然而,我使用的CheckForUpdateAsync没有任何这样的过载。当我遇到这个问题时,它似乎暗示了结果的持久性。

我想解决方案是我写我自己的异步调用…