如何在WiX中检测Python的安装并确定其版本?

3
我已经找到了这个页面,但它只适用于特定版本的Python,因为它使用了编译时变量$(var.python_version)$(var.python_guid)
我需要确定是否存在任何Python安装程序,并潜在地确定它们的版本(以防我有最低版本要求,但我也不确定如何检测)。
有没有直接或者其他的方法可以做到这一点?

在WiX中没有什么是直截了当的,但你可以使用某种形式的DirectorySearch来完成这个任务。如果一切都失败了,你可以(虽然有些困难)通过自定义操作来检索它。 - Cameron
嗨,我写了这篇文章,对于我的情况,我需要一个特定的版本来确保应用程序能够完全按照预测的方式工作。但是,由于Python(其他产品ID)有不同的包和位置,找到任何版本可能会很困难,所以你可能会错过其中一个。你能否详细说明一下为什么需要列出它们呢? 如果我是你,我会采取安全措施,选择一个特定的版本,并在缺失时进行安装,处理这样的事情并不是我认为的正确方法。在Windows中,没有类似apt的机制来跟踪版本。 - Nicklas Börjesson
@NicklasBörjesson 我们有一个Python包,我们正在从安装程序部署它,并希望在相关的site-packages中注册它。事实证明,作为一个不是Python爱好者的人,我不知道2.x和3.x之间存在重大差异,这使得我们的软件包与两者都不兼容。因此,我们现在正在同时发布2.x和3.x版本。我们还决定使用PYTHON_PATH环境变量,而不是直接部署到site-packages。虽然检测Python的安装情况会很好。 - Veggie
@Veggie:如果我是你,我会尝试使软件包兼容2.x和3.x版本。这并不难,而且可以简化开发流程。这里有一篇文章:http://python-future.org/compatible_idioms.html但是,当涉及到Windows部署时,我越来越倾向于检查我使用的Python版本是否已安装,如果没有则进行安装。 此外,我使用pip自定义操作来安装依赖项。我不会手动将东西放入site-packages中。 我的目标是使用GIT来部署所有商业代码,无论如何都不会将其放入site-packages中。 - Nicklas Börjesson
@Veggie 然后我说的是我想要安装的确切软件包。通常,这是官方软件包,所以问题不应该那么常见。而且,正如之前所说,我知道系统在哪个解释器中运行。真的不想冒任何风险。 - Nicklas Börjesson
1个回答

0

你需要使用 RegistrySearch

这里有一个示例代码,可以找到 Matlab 的安装位置

<util:RegistrySearch Id="MatlabPath" Variable="MatlabPathExists" Root="HKLM" Key="SOFTWARE\MathWorks\MATLAB\4.17" Result="exists" Win64="yes" />

对于 .Net,您可以提供最低要求。

<ExePackage Id="Netfx45Xxx" Cache="no" Name="Files\dotnetfx45_full_x86_x64.exe" Compressed="no" PerMachine="yes" Permanent="yes" Vital="no" InstallCommand="/q" SourceFile="..\SetupProject\dotnetfx45_full_x86_x64.exe" DetectCondition="(Netfx4FullVersion=&quot;4.5.50709&quot;) AND (NOT VersionNT64 OR (Netfx4x64FullVersion=&quot;4.5.50709&quot;))" InstallCondition="(VersionNT &gt;= v6.0 OR VersionNT64 &gt;= v6.0) AND (NOT (Netfx4FullVersion=&quot;4.5.50709&quot; OR Netfx4x64FullVersion=&quot;4.5.50709&quot;))" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接