WIX安装程序升级存在问题。以前我们为每台机器安装了2个安装程序版本1,为每个用户安装了另一个版本。
目前我们已开发出双模MSI。
当选择自行安装选项时,双模式MSI升级先前安装程序的PerUser版本(在PC 1上)但是当选择安装(在PC 2上)时,它会安装新产品
我们正在做或者必须设置一些属性是否有些错误。我们正在使用WIX。
请帮忙
答案 0 :(得分:2)
每用户安装允许为不同用户多次安装同一产品 - 也可以在不同版本中安装。这使得升级和补丁难以处理,我完全不喜欢这个每用户概念。 我更喜欢将每台计算机的安装程序设置为标准。我觉得功能上没有太多损失,但在管理能力方面获得了很多。虽然这不是您的问题的答案,但值得指出的是,每用户安装是一个有缺陷的概念 - 充其量。
我不知道是否可以选择设置每台计算机的安装程序,但我找到了一种方法,通过使用Installshield及其自动将安装从每个用户迁移到每台计算机自定义 ISSetAllUsers 自定义操作。该过程在此处描述: windows Installer - uninstalling previous version when the versions differ in installation policy (per-user, per-machine)
据我所知, Wix 没有这样的自定义操作,但您可以使用 Win32 API 调用::MsiEnumRelatedProducts()
编写自己的自定义操作Rob Mensching在此描述:how to change from per user to all user installation?
以下是类似的帖子供参考:How can a perUser installation program deal with a perMachine older version of the program?
以下是一篇描述(进一步)每用户安装问题的博客:Understanding “Per-User” or “Per-Machine” context for application Setup packages。
让我补充几点意见:
答案 1 :(得分:1)
我相信这是因为在您的安装程序中,默认模式是每用户,因此它不会检测每台计算机。 如果赋值类型为“1”,您可以使用MSIGetProductInfo查找已安装的产品,然后您可以将以下属性设置为每机器产品的产品代码 WIX_UPGRADE_DETECTED OLDERVERSIONBEINGUPGRADED
在按钮单击上使用自定义操作或在FindRelatedProducts之后安排它。 这告诉安装程序现有版本,安装就像升级一样处理。
答案 2 :(得分:1)
Windows Installer不会在每个用户和每台计算机之间进行升级,反之亦然。如果您希望这种情况发生,您需要以某种方式进入安装前,并找出已安装的类型。在为另一个用户(即不是当前的安装用户)安装产品时尝试这样做是很棘手的。可以调用MsiEnumRelatedProuctsEx几次,查找每台机器和每个用户的安装情况,以查看正在进行的操作。但是,您可能会遇到问题,用户A,尝试卸载用户B为每个用户安装的产品。如果您是同一个用户,则更容易。可以调用MsiEnumRelatedProductsEx几次以查看产品是按用户还是机器(可能在启动器中),并且可以在安装新升级之前卸载产品,或者至少告诉用户进行卸载。无论如何,它可能是一团糟,坚持每台机器安装的建议是值得的。
我还应该指出,允许每个用户和每台机器安装在同一台机器上是一个功能,而不是一个错误。
答案 3 :(得分:1)
如果之前有两个设置,可能是您有两个升级代码,并且需要同时处理两个升级才能在所有情况下都能正常运行?
我处理每个用户的内容已经很长时间了,但一般情况下,您必须作者 Upgrade table以包含两个升级代码您的设置,以检测以前安装的所有风格。升级表允许您在安装新产品之前检测应安排卸载的任意数量的先前安装。
FindRelatedProducts MSI操作将搜索目标计算机上的所有程序包,以便查找升级代码属性与升级表中指定的值匹配的任何位置。
按建议制作详细日志文件:
msiexec.exe /I "File.msi" /QN /L*V "C:\Temp\msilog.log"
/I = run installation sequence /L*V "C:\Temp\msilog.log"= verbose logging /QN = run completely silently