6

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

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

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

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

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

如果有人有任何提示,或者经历过类似的过程,我很想听听。

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

谢谢,马特

4

1 回答 1

1

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

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

创建一个检测 msi 安装版本的新 ClickOnce 版本。

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