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

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

所以非常粗糙的游戏计划是这样的:

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

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

如果有人有任何建议,或者已经经历了类似的过程,那么我将非常乐意听到有关它的信息。

应用是针对.NET 4的C#。

谢谢,
马特

最佳答案

创建具有以下功能的 msi版本:

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

  • 创建一个新的ClickOnce版本,该版本可检测msi安装的版本。
  • 如果未安装任何msi版本,请告知用户有关新安装程序的信息,并让他下载并运行新安装程序,或者稍后再执行。 我不会删除所有其他功能。对于用户而言,这可能是一个非常邪恶的惊喜。您应该使用户可以推迟升级并使用现有版本一段时间。请记住,用户很可能不需要管理员权限来更新ClickOnce安装的版本,但需要管理员权限才能安装msi。
  • 如果已安装,请启动msi安装的版本并立即关闭ClickOnce版本。 较不严格的版本是仅通知用户。但是,我希望强制用户在安装新版本后使用它。否则,您的工作目录/应用程序设置中可能会存在兼容性问题(当然,这取决于应用程序的确切结构)。
  • 10-05 20:17
    查看更多