通过具有相同包代码的不同msi安装多个实例

问题描述 投票:0回答:1

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

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

谢谢。

windows-installer installer
1个回答
2
投票

老经典:Virtualize, seriously


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

“我想安装多个软件实例。我有多个不同版本的msi。但是,这些msi的包代码是相同的。”

这是一个错误。包代码是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进行引用计数。有一些内置的构造,如“实例转换”,但对我来说,它们似乎是“事后”,为了支持需要更多设计更改才能真正起作用的东西。整个应用程序必须经常更改,以便能够以不同的版本和平共存。

旧版Setup.exe:有时候人们会使用legacy setup.exe installers来轻松支持多用户安装。 NSIS,Inno,Installshield遗留项目等......不太理想,但确实提供了相对简单的多安装。

优点与缺点:快速提醒一下MSI's best features,以及common 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

过去的琐事:我之前写过关于多实例安装的主题: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 seen。 COM服务器通常必须基于没有注册表参与的清单。不得共享文件关联。共享文件必须完全兼容版本或作为并行程序集安装。必须自动生成MSI组件GUID(WiX has features for this: auto component GUIDs),并且每个版本的安装目录必须是唯一的 - 可能只需在安装路径中包含版本号即可。每个并排流或分支都需要不同的升级代码。等等......列表还在继续。另一种方法是将共享组件放在一个单独的MSI中,该MSI作为先决条件安装并使用自己的发布周期进行维护。兼容性问题是可能的。明显。并排程序集可能有效,但它们也不是没有漏洞(可能会意外删除发布者策略文件 - 破坏重定向集成)。需要大量的远见和肘部润滑脂,但肯定会带来好处。例如,UAT的成功并排安装和产品的PROD版本。


一些链接:

© www.soinside.com 2019 - 2024. All rights reserved.