【问题标题】:Rollback to previous version of a ClickOnce application without Add/Remove programs回滚到没有添加/删除程序的 ClickOnce 应用程序的先前版本
【发布时间】:2012-04-30 13:24:19
【问题描述】:

基本上都在标题中,但我还是会进一步解释。

ClickOnce 应用程序的设计目的是无需管理员权限即可轻松安装。但是,要将 ClickOnce 应用程序回滚到其先前版本,您必须使用添加/删除程序功能,如 Microsoft 文档中所述。

问题是在我的企业中,有一个特定的策略阻止用户使用此功能。以管理员身份运行 appwiz.cpl 在这里没有帮助,因为 ClickOnce 应用程序是由用户安装的。

那么还有其他方法可以将 ClickOnce 应用程序回滚到之前的版本吗?

感谢您的回答。

【问题讨论】:

  • 您是否需要能够回滚到任意以前的版本,或者只是最后一个?

标签: .net deployment clickonce


【解决方案1】:

在我之前的一份工作中,我们没有让用户选择是否升级;每个版本都以其版本作为最低版本推出。但是,这确实会产生令人讨厌的副作用,即在新版本出现问题时不允许用户降级。

为了解决这个问题,每次我们发布一个版本时,我们都会将相同的版本第二次发布到不同的位置,但版本会增加两次(换句话说,版本会是 高于我们将发布的下一个版本)。如果我们不得不回滚,我们只需要将版本从次要位置复制到主要位置,然后用该特定版本中的文件覆盖主 .application 文件。

这确实要求您对版本控制有所约束,因为整个方法取决于备份版本高于下一个更高的 当前 版本,因此 ClickOnce 认为它实际上是更新的。你不想让版本太高,因为无论你发布什么版本来替换它,自然也必须有一个更高的版本。

例如,它可能是这样的:

Publish version 1.0.0 to primary location and 1.2.0 to backup location
Clients update
Publish version 1.1.0 to primary location and 1.3.0 to backup location
Clients update
Calamity ensues
Copy version 1.2.0 from backup to primary (which is, in reality, version 1.0.0)
Clients update
All is well
Publish version 1.3.0 to primary location and 1.5.0 to backup location
etc.

有几个限制:

  • 如上所述,您的版本控制必须严格
  • 回滚后发布的更新(以上版本 1.3.0)无法回滚

【讨论】:

  • 这似乎是一个可行的解决方案,但是我试图保持 ClickOnce 部署模型的完整性:右键单击、发布、完成,没有其他事情可做;版本自动递增,一切正常,因为回滚是一个集成功能,我希望我可以使用它。事实上,我希望有一个命令行开关可以在某处使用来重现回滚功能,但如果真的不可能,我会认真考虑您的解决方案。
  • @igelineau:明白了。我们选择不让用户选择,因为如果用户选择跳过更新,ClickOnce 将不会再次提示用户。
  • @igelineau:看看this,看起来不太可能。他们建议编辑清单,但我不完全确定这会奏效。
  • 这篇文章来自 2005 年,所以他们可能不认为它是一个有用的选项,或者他们会将其添加到 3.5 或 4 框架中......进一步谷歌搜索我发现this,但是它似乎仅适用于在线应用程序。无论如何,谢谢您对此的帮助,我会将您的解决方案带给我的老板:)
【解决方案2】:

您可以编写一个小程序来执行此操作。您可以使用找到here 的卸载代码。卸载将始终显示一个对话框,询问用户是否确定。代码在该对话框中搜索 OK 按钮并单击它。您可以随时修改它以查找恢复版本的按钮(我不记得文本),然后选择它,然后单击“确定”按钮。

【讨论】:

  • 终于有时间试用了,效果不错,谢谢。我将接受的答案更改为您的答案,因为这是最直接的答案。
  • @RobinDotNet 你能提供它的代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-11
  • 2010-09-16
相关资源
最近更新 更多