ClickOnce应用程序配置为以编程方式执行更新,但有时仍会显示ClickOnce Update Available提示。

3
我们有一个使用ClickOnce部署的WPF应用程序,它在应用程序启动时通过编程检查并执行更新。这通常表现得非常好,除了用户选择“否”回答我们的“您是否要更新?”提示的情况。在这种情况下,下一次用户启动应用程序(始终如此),ClickOnce框架的“可用更新”对话框会启动,并提供更新或跳过选项。这不会造成技术问题,但会让用户感到困惑,因为他们可能会看到两个完全不同样式的对话框。(如果用户选择跳过ClickOnce对话框,那么应用程序将启动并呈现我们自己的“可用更新”对话框)。有什么想法可以解决这个问题吗?谢谢。
2个回答

7
在更新对话框中(在发布选项卡中),您有勾选“检查更新”的复选框吗?
[编辑于6/18/2010] 这里有一些我认为可以解决您问题的更多信息。 CheckForUpdate()CheckForDetailedUpdate() 方法将更新检查结果持久化到磁盘上。下次应用程序运行时,ClickOnce 机制会发现有新版本可用并提示用户不需要的窗口。
显然,更新是一个两步骤的过程:
- 步骤1 - 检查部署位置是否有更新,并将其发现的信息持久化到本地 ClickOnce 更新缓存中。 - 步骤2 - 检查本地 ClickOnce 更新缓存并显示更新窗口,如果发现有更新。
取消勾选“应用程序应检查更新”选项似乎只会导致 ClickOnce 跳过第1步。第2步仍会发生。 CheckForUpdate()CheckForDetailedUpdate() 方法具有与步骤1相同的效果-数据持久化到磁盘上,因此下次运行应用程序时,步骤2会看到更新并显示更新窗口。
诀窍在于阻止 CheckForUpdate()CheckForDetailedUpdate() 将此信息持久化到磁盘上。这可以通过使用有参数的重载方法(CheckForUpdate(bool persistUpdateCheckResult) 或 CheckForDetailedUpdate(bool persistUpdateCheckResult))并将参数设置为false来实现(即 CheckForUpdate(false)CheckForDetailedUpdate(false))。

嗨,我已向ClickOnce团队报告了此问题,他们应该会检查一下。上周五我收到了运行时团队的电子邮件,他们表示他们没有忘记这个问题,只是现在非常忙碌。您是否有一个可以复制此问题的小项目?您能否在Connect中提交错误并附加项目并发布链接?如果您能做到这一点,我将向他们施压。我的意思是,提醒他们一下。;-) http://connect.microsoft.com/VisualStudio - RobinDotNet
谢谢。我已经提交了一个带有测试项目的错误报告:https://connect.microsoft.com/VisualStudio/feedback/details/561515/clickonce-application-configured-to-perform-updates-programmatically-launches-clickonce-update-prompt-after-user-cancels-programmatic-update - Tom W Hall
好的,我会把链接发给他们。他们已经回复了,并询问你所针对/安装的 .NET Framework 版本作为前提条件。是 .NET 3.5 SP-1 吗?他们似乎认为这个问题在该版本的框架中已经修复了。 - RobinDotNet
嗨,罗宾,微软还没有更新我的Connect bug的状态。你能否跟进一下?非常感谢。 - Tom W Hall
非常感谢Robin,这确实解决了问题。但是这还是一个bug,不是吗?我的意思是,程序化更新的设置是否反映在清单中,如果是的话,ClickOnce不应该只显示自己的更新对话框吗?干杯。 - Tom W Hall
显示剩余6条评论

0

应使用参数 false 调用 CheckForUpdateCheckForDetailedUpdate 方法。

这些方法的 intellisense 文档令人困惑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接