我将ClickOnce应用程序设置为不检查更新(项目属性 - >发布 - >更新... - >“应用程序应检查更新”未选中),因为我以编程方式搜索它们并离开用户可以随时安装它们。
现在在以下场景中:
如何避免这种情况?
有趣的是,如果用户跳过安装,下次启动应用程序时将不再提示用户,因此应该有一些东西(在清单中?)告诉ClickOnce停止提示。
答案 0 :(得分:2)
我之前见过这样的事情。我认为正在发生的事情是,当应用程序启动时,ClickOnce不会检查更新,这是您设置的。当您运行应用程序时,将以编程方式完成更新检查并找到更新,并且可能会设置标志。然后关闭应用程序而不进行更新,但仍然设置了标志。下次启动应用程序时ClickOnce仍然不检查更新但是因为有一个标志设置有可用的更新,它会提示用户查看是否要获取更新。我猜这是设计的。
关于跳过更新的第二点,在有另一次更新之前不会再次提示您。我相信这是设计,如果你想返回并进行更新,你需要转到应用程序的ClickOnce安装页面。
理想情况下,您希望能够执行的操作与使用Application Deployment API以编程方式跳过使用ClickOnce对话框时相同。我已经快速了解了可用的公共方法,但我看不到有关跳过的任何内容,但也许你可以找到一些东西。
修改
再看看API。您是否在没有布尔参数的情况下调用CheckForUpdate()或CheckForDetailedUpdate()?如果是这样,你得到提示的原因就像我说的那样存储了更新检查:
如果CheckForUpdate发现更新可用,则表示用户 选择不安装它,ClickOnce会提示用户 更新在下次运行应用程序时可用。没有 禁用此提示的方法。 (如果申请是必需的 更新,ClickOnce将在不提示的情况下安装它。)
相反,您希望使用布尔值false调用正在使用的方法,布尔标志确定是否应向用户显示对话框。
persistUpdateCheckResult类型:System.Boolean 如果为false,则将以静默方式应用更新,并且不会显示任何对话框。
答案 1 :(得分:1)
我看到ApplicationDeployment.CheckForUpdate()方法has an overload带有persistUpdateCheckResult
参数。
但是我正在使用没有任何此类重载的CheckForUpdateAsync
。当我遇到这个问题时,它似乎意味着结果的持久性。
我想解决方法是我编写自己的异步调用...