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

时间:2011-07-19 18:56:42

标签: c# clickonce

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

现在在以下场景中:

  1. 启动该应用程序
  2. 使用ClickOnce API
  3. 找到更新
  4. 应用程序未更新
  5. 然后关闭应用程序
  6. 下次启动应用程序时,ClickOnce窗口将提示用户安装或跳过更新。
  7. 如何避免这种情况?

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

2 个答案:

答案 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。当我遇到这个问题时,它似乎意味着结果的持久性。

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