【问题标题】:How can a perUser installation program deal with a perMachine older version of the program?perUser 安装程序如何处理 perMachine 旧版本的程序?
【发布时间】:2014-03-31 15:05:57
【问题描述】:

这类似于这里提出的问题:How do I fix the upgrade logic of a wix setup after changing InstallScope to "perMachine"

仅在我们的例子中,旧版本是“perMachine”,新版本是“perUser”。

我理解您为什么不希望 perUser 安装与可能在多个用户之间共享的程序混为一谈。但我们需要走这条路。

目前,我们通过在注册表中挖掘并拒绝安装来检测旧程序的版本,除非他们先卸载旧版本。这不是真正的用户友好。

有没有更好的技术?

【问题讨论】:

  • 即使您在每台机器上安装,用户也可以拥有自己的设置。它们是什么设置?此外,您无需在注册表中挖掘以确定安装的内容,而是使用升级表并实施重大升级。切勿触摸 MSI 注册表数据库 - 它既脆弱又复杂。

标签: wix windows-installer


【解决方案1】:

不能。主要升级无法切换上下文,即使您在安装之前编写了 setup.exe 引导程序进行清理,也必须为安装该产品的每个用户配置文件运行它。

【讨论】:

  • 检查上面的链接 - 我曾经用它来清理一个特殊情况,但至少可以说这是一个奇怪的解决方案。我也想知道这如何影响 MSI 数据库 - 它似乎在每台机器上重新注册产品并取消注册每个用户安装,但它是否对所有用户都这样做?我不记得了。我认为我们将此作为一次性修复主要用于只有一个用户的系统。
  • 如果用户 A 进行了按用户安装,而用户 B 尝试进行了按机器安装,则它不可能工作。
  • 我认为它可以 - 它会使组件的引用计数加倍,并为某些用户保留按用户注册的产品?让我失望的是升级方案的外观。在我的世界里,按用户安装是一个禁忌。只是麻烦。
  • 假设应用程序为每个用户注册了 COM 或其他注册表数据。这将在 HKCR 中优先于 HKLM\SOFTWARE\Classes 中每台机器安装的更新数据。有很多事情可能是丑陋的错误。
  • 一直认为按用户安装在概念上是丑陋的 - 是的,我认为用户 COM 数据会在 HKCR 中获胜。安装每台机器后,是否可以使用 Active Setup 为每个用户运行一次每用户卸载?也许如果您指定正确的包代码来杀死每个用户的变体?也许吧,但我猜它会触发一些自我修复。
【解决方案2】:

我永远不会更改为每用户设置,出于很多原因,我宁愿从每用户转到每台机器。为什么需要每个用户?

您可能会看一下我写的关于如何使用 Installshield 从每个用户迁移到每台机器的描述。走另一条路也应该是可能的 - 但我认为不推荐:https://stackoverflow.com/a/12291807/129130


更新: 由于这被否决了,这里还有一些链接来解释每用户设置的一些问题。它们是真实的,我只是想警告人们他们最有可能面临的问题(几乎肯定会面临):

【讨论】:

  • 要求针对每个用户,因此每个用户都有自己的设置。你还没有发布答案。您已发表评论。
  • 事实上我刚才已经回答了你的几个问题,而你还没有回答我的任何后续问题:-),该链接确实是你问题的答案 - 对于 Installshield ,同样的概念也适用于 Wix。你用的是什么工具?
  • 即使您按机器安装,用户也可以拥有自己的设置。在我看来,按用户安装是 MSI 最糟糕的概念之一 - 它只是更改了一些目录路径并隐藏了其他用户的产品。
  • 为什么需要按用户安装应用程序才能进行按用户配置设置? (答案:不会)
  • 一个用户的行为不应影响另一个用户的个人资料。尤其是在多个用户帐户运行同一应用程序实例的环境中。如果用户决定他们不需要该应用程序并将其卸载,则其他用户应该仍然可以访问它。随着每用户应用商店的激增,无论如何这将成为未来的常态。
猜你喜欢
  • 2017-03-06
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 2014-06-03
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 2017-02-28
相关资源
最近更新 更多