从ClickOnce迁移到MSI部署的策略

时间:2013-10-26 17:59:28

标签: .net clickonce

我们在市场上有一个使用ClickOnce部署的消费者应用程序。随着时间的推移,我们遇到过各种各样的问题,其中大部分都已经解决,但总是很遗憾没有使用简单的MSI安装程序。特别是我们希望能够提供适当的离线安装(从盒装副本),以及更好的多语言安装选项。 在最终获得一些旧的32位dll依赖项后,我们刚刚将测试版更新为AnyCPU版本(在您提出之前 - 是的,我们的应用程序确实可以从内存地址空间的增加中受益,我们处理大量数据)。现在我们当然意识到从x86到AnyCPU并不适用于ClickOnce,因此它似乎是切换到另一种安装技术的理想时机。

这就是问题所在:我们希望从现有的ClickOnce安装中自动升级到新的安装程序。我们也非常希望保留用户设置(.config)文件。如果我们做不到的话,这不是一个彻底的交易破坏者,但如果我们不这样做,它会激怒很多用户。

所以非常粗略的游戏规划是这样的:

创建新版本的应用并通过ClickOnce进行部署。这个新版本基本上是MSI安装程序的前端。它以某种方式抓取现有的用户设置,启动新安装程序的下载并调用它。然后,它将现有设置复制到新的应用程序目录。然后它卸载自己(本身就是以前的ClickOnce安装应用程序)。

原则上我认为这可行,但我不确定如何去做。特别是将用户设置移动到新应用程序,并在最后自行卸载。

如果有人有任何提示,或者经历过类似的过程,我会非常渴望听到它。

应用程序是针对.NET 4的c#。

感谢, 马特

1 个答案:

答案 0 :(得分:1)

使用以下功能创建 msi版本

  • 从ClickOnce安装中获取应用程序设置等。如果它是当前用户的msi版本的第一个启动,请检查是否存在ClickOnce版本并从那里复制/迁移设置。我不会尝试以相反的方式将ClickOnce中的设置推送到msi,因为(1)可能有多个具有不同设置的ClickOnce安装,您可能希望复制所有这些并且(2)您必须放置迁移逻辑进入旧版本(可能需要更改与未来msi安装版本的兼容性)。 然而,理想的方法是继续按原样使用应用程序设置。如果它们位于用户配置文件中的某个位置(在ClickOnce安装之外),则应用程序的设置方式无关紧要安装。
  • 检测ClickOnce版本,让用户将其卸载。每个用户安装一次ClickOnce版本,同时可以为所有用户安装msi版本。如果您从ClickOnce版本中开始卸载,则只能卸载可能多次ClickOnce安装的一个。如果按照此处的说明执行此操作,将提醒每个用户在启动应用程序后卸载他的ClickOnce版本(在ClickOnce msi版本中)。

创建新ClickOnce版本,检测msi安装版本。

  • 如果没有安装msi版本,请告诉用户有关新安装程序的信息,并让他下载并运行新安装程序或稍后再执行我不会删除所有其他功能。对于用户来说,这可能是一个非常邪恶的惊喜。您应该让用户推迟升级并使用现有版本一段时间。请记住,用户很可能不需要管理员权限来更新ClickOnce安装版本,但需要管理员权限才能安装msi。
  • 如果已经安装,请启动msi安装版本并立即关闭ClickOnce版本。不太严格的版本只会通知用户。但是,我宁愿强制用户在安装后使用较新的版本。否则,您的工作目录/应用程序设置可能存在兼容性问题(当然,取决于应用程序的确切结构)。