python - 如何在 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
,、、、等),但没有任何帮助APPDIR
。INSTALLDIR
我确信这可能是因为它只是将副本安装到另一个位置。
我该怎么做?
解决方案
MSI“知道”通过安装程序中嵌入的许多 GUID 安装的内容。此设计是 MSI 的“固有”,因此“设计”并非旨在或完全适用于多个实例:
包代码:唯一标识 MSI 文件。两个 MSI 文件之间的此 GUID 永远不应相同,除非它是已复制的同一个文件(那么它当然是同一个文件 - 二进制相同)。如果两个 MSI 文件不同且具有相同的包 GUID,则它们被设计为同一个文件。这可能会导致您遇到过的一些最神秘的问题。始终自动生成此 GUID(它不应该在技术上公开?)。
产品代码:标识已安装产品的唯一产品实例。您不能使用相同的产品 GUID 一遍又一遍地安装相同的 MSI。您可以使用次要升级就地升级现有安装(然后 MSI 之间的产品代码相同)。这会产生一个更新的实例,而不是您喜欢的两个并排安装。这是使您第二次运行该 MSI 时以维护模式(修复、修改、卸载)显示的 GUID - 如“此产品已安装”。不过,这里涉及到包代码有一些复杂性 - 技术性(你不能轻易愚弄它 - 不要与 MSI 对抗,它会反击)。
升级代码:标识产品系列。以某种方式相关的产品。通常用于实现重大升级。换句话说,用新的和更高的版本替换已经安装的旧版本。通常应该在相关版本中保持稳定。还有其他方法。知道你在做什么。
有办法解决这个问题。以下是一些建议:
所以本质上是:1)
虚拟化、2)
并行安装、3)
实例转换。还是4)
只使用旧的非 MSI 安装程序?
对于没有注册表纠缠的简单产品,您可以简单地复制该文件夹,但对于真正的产品,这种情况很少见。有注册的 COM 服务器、GAC 参与、冲突的文件关联和许多其他问题,这些问题通常导致虚拟化成为“最不坏”的选择。
并行安装也需要进行一些技术调整——最重要的是将所有组件 GUID 更改为有效的 MSI——除非您使用实例转换概念(我不使用)。
WiX 引入了“自动引导”的概念。这些是自动生成的组件 GUID(对于大多数组件类型),因此它们可以根据您在磁盘上的安装位置进行更改。Bob Arnson 的博客:简化 WiX 组件创作。
链接:
推荐阅读
- javascript - 如何动态循环getJson数据结果
- javafx - 通过单击 javafx 中的其他按钮更改颜色按钮
- html - @media 规则为我的页面增加了额外的空间
- xml - XSD 解析为 XML
- python - 如果使用 threading.stack_size() 将堆栈大小设置为超出为 python 应用程序分配的堆栈大小会发生什么?
- android - 发布时出现“Google Play 服务正在更新”错误,而不是模拟器(Google Play 服务 12.6.73,华为设备)
- javascript - 使用 JavaScript DOM 更改特定元素的颜色?
- ios - 如何在 iOS 主屏幕上将应用程序名称设置为 2 行(或更多行)?
- c# - Json.NET - 序列化没有属性名称的泛型类型包装器
- database - 使用“减号”操作来查找是否满足条件