首页 > 解决方案 > 如何在 Windows 10 中使用 msiexec 安装两个 python 2.7.18 实例?

问题描述

我在装有 Windows 10 的计算机中有一个 Python 2.7.18 实例(位于C:\Python27)。现在,我想将完全相同的 Python 的另一个实例安装到另一个位置(例如,C:\my_app\python27),但是我遇到了 msiexec 程序的问题。
我有来自 Python 网站的“python-2.7.18.amd64.msi”安装程序,当我启动它时,它会询问我是否要更改、修复或删除已安装的实例。

我读到了可以使用的不同标志和设置(例如TARGETDIR,、、、等),但没有任何帮助APPDIRINSTALLDIR我确信这可能是因为它只是将副本安装到另一个位置。

我该怎么做?

标签: pythoninstallationwindows-installer

解决方案


MSI“知道”通过安装程序中嵌入的许多 GUID 安装的内容。此设计是 MSI 的“固有”,因此“设计”并非旨在或完全适用于多个实例:

包代码:唯一标识 MSI 文件。两个 MSI 文件之间的此 GUID 永远不应相同,除非它是已复制的同一个文件(那么它当然是同一个文件 - 二进制相同)。如果两个 MSI 文件不同且具有相同的包 GUID,则它们被设计为同一个文件。这可能会导致您遇到过的一些最神秘的问题。始终自动生成此 GUID(它不应该在技术上公开?)。

产品代码:标识已安装产品的唯一产品实例。您不能使用相同的产品 G​​UID 一遍又一遍地安装相同的 MSI。您可以使用次要升级就地升级现有安装(然后 MSI 之间的产品代码相同)。这会产生一个更新的实例,而不是您喜欢的两个并排安装。这是使您第二次运行该 MSI 时以维护模式(修复、修改、卸载)显示的 GUID - 如“此产品已安装”。不过,这里涉及到包代码有一些复杂性 - 技术性(你不能轻易愚弄它 - 不要与 MSI 对抗,它会反击)。

升级代码:标识产品系列。以某种方式相关的产品。通常用于实现重大升级。换句话说,用新的和更高的版本替换已经安装的旧版本。通常应该在相关版本中保持稳定。还有其他方法。知道你在做什么。

有办法解决这个问题。以下是一些建议:

所以本质上是:1)虚拟化、2)并行安装、3)实例转换。还是4)只使用旧的非 MSI 安装程序?

对于没有注册表纠缠的简单产品,您可以简单地复制该文件夹,但对于真正的产品,这种情况很少见。有注册的 COM 服务器、GAC 参与、冲突的文件关联和许多其他问题,这些问题通常导致虚拟化成为“最不坏”的选择。

并行安装也需要进行一些技术调整——最重要的是将所有组件 GUID 更改为有效的 MSI——除非您使用实例转换概念(我不使用)。

WiX 引入了“自动引导”的概念。这些是自动生成的组件 GUID(对于大多数组件类型),因此它们可以根据您在磁盘上的安装位置进行更改。Bob Arnson 的博客:简化 WiX 组件创作

还有一些功能可以简化 WiX 源 xml


链接:


推荐阅读