【问题标题】:Installing Multiple Instances by different msi having same Package Code通过具有相同包代码的不同 msi 安装多个实例
【发布时间】:2018-08-02 10:07:41
【问题描述】:

我想安装一个软件的多个实例。我有多个不同版本的 msi。但是,那些 msi 的 Package Code 是相同的。我想安装第二个实例时弹出错误“已安装此产品的另一个版本”。

我可以使用 msiexec 命令安装多个实例吗?我尝试使用 TRANSFORM 但失败了。我可以为实例手动分配包代码吗?如果可以,怎么做?

谢谢。

【问题讨论】:

  • 即使您可以强制它安装多个版本,在这种情况下,该软件包显然也没有经过设计测试。如果他们想要将同一文件的不同版本放在同一位置怎么办? (仅作为一个例子)。我会立即寻求使用其他机器(例如虚拟机)进行其他安装。

标签: windows-installer installation


【解决方案1】:

旧经典Virtualize, seriously


包代码:每个 MSI 文件的包代码必须是唯一的。

"我想安装一个软件的多个实例。我有多个 不同版本的微星。但是,那些 msi 的 Package Code 是一样的。"

这是一个错误。包代码是 MSI 文件的唯一标识符。 If two MSI files have the same package code they are by definition the same file as far as Windows Installer is concerned - 可能会导致非常奇怪的问题 - 如果文件确实不同(而不仅仅是同一个文件的副本)。

也许您指的是不同的产品代码。这确实是可能的,并且可以表示同一产品的不同版本(不同版本、不同语言、不同版本等)。在这种情况下,它们通常共享相同的升级代码 - 这是一个标识相关产品系列的代码。

总结

  • 包代码:标识特定的 MSI 文件。
  • 产品代码:标识产品版本。
  • 升级代码:标识一系列相关产品。

多个 MSI 安装实例:Windows Installer 无法处理多次安装同一产品。整个范式都假设一个安装实例——以组件规则为中心,它们的引用计数基于单个绝对安装路径as explained in this answer。有一些内置结构,例如“instance transforms”,但对我来说,它们似乎是“事后的想法”,是为了支持需要更多设计更改才能真正起作用的东西。必须经常更改整个应用程序,以便能够在不同版本中和平共存。

Legacy Setup.exe:有时人们会求助于legacy setup.exe installers 来轻松支持多用户安装。 NSIS,英诺, Installshield 遗留项目等...并不理想,但它确实提供了相对简单的多重安装。

优点和缺点:简单提醒一下MSI's best featurescommon problems 和一些design challenges(靠近底部)。

虚拟化:虚拟化可能是实现您所需的最简单方法?要么在不同的虚拟机中运行不同的应用程序版本,要么使用虚拟化包——例如Microsoft App-Vapplication streaming - JIT delivery - no local installation per-secan run incompatible software side-by-sideupdating through serverlicensing benefits?)。然后应用程序版本之间的冲突被“沙盒化”。我不得不说,这不是我最喜欢的概念,但它适用于很多人,并且在现实世界中使用很多地方。


MSIX:或许可以考虑使用a quick read about MSIX - 一种专为 Windows 10 应用程序设计的新通用包格式。 "Containers"


实例转换:为此的内置 MSI 概念是多实例转换。请调查 MSINEWINSTANCE property 并阅读 MSI SDK 主题:“Installing Multiple Instances of Products and Patches”。和here is perhaps a better example - 更实用。我完全避免了这个概念。我相信它可以工作 - 通过一些规划和应用程序更改。为什么我不使用实例转换? There are some issue - as described by Carolyn Napier here(不确定这个特定问题现在是否已解决)。总体而言,我发现这个概念并不吸引人 - 如果我需要并行 MSI,我将自己“手动”实现 - “肘部润滑方式”(见下文)。

现在,the two cents from a (natural-born) Virtualizer

Trolling From The Past:我之前写过关于多实例安装的主题: I want to install an MSI twice(来自 serverfault.com - 系统站点 管理员)。

按设计并行 MSI 设置:可以使您的 MSI 设置始终并行安装 - 无需使用实例转换.本质上,您自己进行所有并排的准备工作,使设置不会相互干扰。 This generally requires major design changes to the application and discipline from the product managers to a degree that is rarely seenCOM 服务器 通常必须基于清单而不涉及注册表。 文件关联不得共享。 共享文件必须完全兼容版本或作为并行程序集安装。 MSI 组件 GUID 必须自动生成 (WiX has features for this: auto component GUIDs) 并且每个版本的安装目录必须是唯一的 - 或许只需在安装路径中包含版本号即可。对于每个并行流或分支,您需要不同的升级代码。等等......名单还在继续。另一种选择是将共享组件放在单独的 MSI 中,该 MSI 作为先决条件安装并使用自己的发布周期进行维护。兼容性问题是可能的。明显地。并行程序集可能有效,但它们也并非没有漏洞(发布者策略文件可能被意外删除 - 破坏了整体重定向)。需要大量的远见和肘部润滑脂,但肯定会产生好处。例如,为产品成功并行安装 UAT 和 PROD 版本。


一些链接

【讨论】:

  • 我实际上是通过 msi 手动安装了第一个实例。然后我将 INSTANCE TRANSFORM 与以下命令一起使用,这正是您提供的示例页面中的命令。 msiexec /I [myinstaller.msi] TRANSFORMS=:instance.mst MSINEWINSTANCE=1 /qb 但是,它显示“应用转换时出错。验证指定的转换路径是否有效”。不知道出了什么问题。请指教。
  • 还有一个问题。我需要一个 mst 文件来执行实例转换吗?如果我没有,我该怎么办?
  • 你用的是什么工具?维克斯?安装屏蔽?高级安装程序?还有什么?
  • 我只是使用 CMD
  • 是的,您需要对每个实例进行转换。你想用实例实现什么? UAT 和 PROD 同时运行?几个不同的数据库实例?许多不同版本的软件的简单并排操作?有几种可能性。在我看来,实例转换并不容易。我宁愿走我认为的虚拟化路线。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
  • 1970-01-01
  • 2011-09-10
  • 2017-12-10
  • 2018-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多