ClickOnce检查更新,即使它不应该(在特定情况下)
本文关键字:不应该 在特定情况下 检查更新 ClickOnce | 更新日期: 2023-09-27 18:02:29
我设置我的ClickOnce应用程序不检查更新(项目属性->发布->更新…->"应用程序应该检查更新"是未选中的),因为我通过编程搜索它们,并且我让用户可以随时安装它们。
现在在以下场景中:
- 应用程序启动
- 使用ClickOnce API找到更新
- 应用程序未更新
- 应用程序被关闭
- 下一次启动应用程序时,点击一次窗口将提示用户安装或跳过更新。
如何避免这种情况?
有趣的是,如果用户跳过安装,下一次应用程序启动时用户将不再被提示,因此应该有一些东西(在清单中?)告诉ClickOnce停止提示。
我以前见过类似的事情。我认为正在发生的事情是,当应用程序启动ClickOnce不检查更新,这是你所设置的。当您运行应用程序时,将以编程方式进行更新检查,并找到更新,可能还会设置一个标志。然后关闭应用程序,不进行更新,但仍然设置该标志。下一次启动应用程序时,ClickOnce仍然不检查更新,但由于设置了可用更新的标志,它提示用户查看是否要获取更新。我猜这是故意的。
关于你跳过更新的第二点,你将不会再次提示,直到有另一个更新。我相信这是设计的,如果你想回去做更新,你需要去ClickOnce安装页面的应用程序。
理想情况下,您希望能够做的事情与使用应用程序部署API以编程方式跳过ClickOnce对话框时发生的事情相同。我已经快速浏览了可用的公共方法,但是我没有看到任何关于跳过的内容,但是也许你可以找到一些。
编辑再看一下API。你正在调用CheckForUpdate()或CheckForDetailedUpdate()没有布尔参数?如果是这样,您得到提示的原因是,正如我所说,更新检查正在被存储:
如果CheckForUpdate发现一个更新是可用的,并且用户选择不安装,ClickOnce将提示用户下次运行应用程序时可用更新。没有禁用此提示的方法。(如果申请是必需的更新,ClickOnce将安装它而不提示)
相反,你想用布尔值false来调用你正在使用的方法,布尔标志决定是否应该向用户显示对话框。
persistUpdateCheckResult Type: System。布尔如果为false,则静默应用更新,并且不显示任何对话框。
我看到ApplicationDeployment.CheckForUpdate()方法有一个超载的persistUpdateCheckResult
参数
然而,我使用的CheckForUpdateAsync
没有任何这样的过载。当我遇到这个问题时,它似乎暗示了结果的持久性。
我想解决方案是我写我自己的异步调用…