如何检查 Inno Setup 中是否安装了特定的 Python 版本?

How to check if specific Python version is installed in Inno Setup?

如何为 Inno Setup Compiler 编写安装脚本,只有在没有正确版本的情况下才会安装 Python?

如何检查特定的 Python 版本,例如Python 3.6.8,32 位,安装了吗?

方法

可以使用注册表函数在安装脚本的代码部分完成安装检查。 Python 安装程序根据安装类型在不同位置创建注册表项:

  • HKEY_CURRENT_USER\Software\Python\PythonCore
  • HKEY_LOCAL_MACHINE\Software\Python\PythonCore
  • HKEY_CURRENT_USER\Software\Wow6432Node\Python\PythonCore
  • HKEY_LOCAL_MACHINE\Software\Wow6432Node\Python\PythonCore

Python 注册表组织的完整结构可以在 PEP 514 中找到。

解决方案

使用以下函数检查是否安装了 Python 3.6.8、32 或 64 位版本。此功能不通用,因为 Python 注册表组织已更改 Python 个版本。请适应您的需求,如果您找到其他版本的解决方案,请告诉我们。

[Code]
{Check existence of key in registry and check version string.
return true if Python is installed and version is correct}
function checkKey(regpart: integer; key: string; version: string) : Boolean;
var
  installedVersion: string;
begin
   Result :=
     { Check if key exists }
     RegKeyExists(regpart, Key) and
     { try to get version string }
     RegQueryStringValue(regpart, key, 'Version', installedVersion) and
     { check version string }
     (version = installedVersion);
end;

{ Return true if python 3.6.8 bit is not installed }
function python_3_6_8_is_not_installed() : Boolean;
var
  Key : string;
  Version: string;
begin
   { check registry }
   Key := 'Software\Python\PythonCore.6-32';
   Version := '3.6.8';
   Result :=
     { Check all user 32-bit installation}
     (not checkKey(HKLM32, Key, Version)) and
     { Check current user 32-bit installation}
     (not checkKey(HKCU32, Key, Version)) and
     { Check all user 64-bit installation}
     (not checkKey(HKLM64, Key, Version)) and
     { Check current user 64-bit installation}
     (not checkKey(HKCU64, Key, Version));
end;