2011-07-19 19 views
1

我将我的ClickOnce应用程序设置为不检查更新(项目属性 - >发布 - >更新... - >“应用程序应检查更新”因为我以编程方式搜索它们,并且让用户有可能随时安装它们。ClickOnce检查更新,即使它不应该(在特定情况下)

现在在以下情形:

  1. 更新使用的ClickOnce API
  2. 应用程序不更新
  3. 发现该应用程序启动的应用程序,然后关闭
  4. 下次启动应用程序时,ClickOnce窗口将提示用户安装或跳过更新。

这怎么可以避免?

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

+0

当你说你编程方式检查,您使用的是API CheckForDetailedUpdate? – Nikki9696

+0

我使用CheckForUpdateAsync –

回答

1

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

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

理想情况下,您希望能够执行的操作与使用Application Deployment API以编程方式跳过使用ClickOnce对话框时发生的相同。我已经快速浏览了可用的公共方法,但我看不到任何有关跳过的内容,但也许您可以找到某些内容。

编辑

只是再看看API。你是否调用CheckForUpdate()或CheckForDetailedUpdate()而不使用布尔参数?如果是这样,你所得到的提示的原因是因为我说的是更新检查被存储:

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

相反,你想打电话给你使用的是有假的布尔值的方法,布尔标志决定一个对话框,应显示给用户。

persistUpdateCheckResult类型:System.Boolean 如果为false,更新将被默默地应用并不会显示对话框。

+0

好的,谢谢你的信息。第二点对我来说不是问题,我只是想避免第一种情况下的任何提示 –

+0

@Ganswer在第一个示例中,当找到更新时,它会开始下载更新,但在更新完成之前关闭应用程序还是只是发现有更新可用?更新也是强制性的还是不强制? – Bronumski

+0

它只是使用CheckForUpdateAsync检查更新并找到它,但它不会下载它。更新不是必需的 –

0

我看到ApplicationDeployment.CheckForUpdate()方法has an overloadpersistUpdateCheckResult参数。

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

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

相关问题