python_find_installed.iss.inc 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. { Copyright 2019-2020 Espressif Systems (Shanghai) CO LTD
  2. SPDX-License-Identifier: Apache-2.0 }
  3. { ------------------------------ Find installed Python interpreters in Windows Registry (see PEP 514) ------------------------------ }
  4. var
  5. InstalledPythonVersions: TStringList;
  6. InstalledPythonDisplayNames: TStringList;
  7. InstalledPythonExecutables: TStringList;
  8. procedure PythonVersionAdd(Version, DisplayName, Executable: String);
  9. begin
  10. Log('Adding Python version=' + Version + ' name='+DisplayName+' executable='+Executable);
  11. InstalledPythonVersions.Append(Version);
  12. InstalledPythonDisplayNames.Append(DisplayName);
  13. InstalledPythonExecutables.Append(Executable);
  14. end;
  15. function GetPythonVersionInfoFromKey(RootKey: Integer; SubKeyName, CompanyName, TagName: String;
  16. var Version: String;
  17. var DisplayName: String;
  18. var ExecutablePath: String;
  19. var BaseDir: String): Boolean;
  20. var
  21. TagKey, InstallPathKey, DefaultPath: String;
  22. begin
  23. TagKey := SubKeyName + '\' + CompanyName + '\' + TagName;
  24. InstallPathKey := TagKey + '\InstallPath';
  25. if not RegQueryStringValue(RootKey, InstallPathKey, '', DefaultPath) then
  26. begin
  27. Log('No (Default) key, skipping');
  28. Result := False;
  29. exit;
  30. end;
  31. if not RegQueryStringValue(RootKey, InstallPathKey, 'ExecutablePath', ExecutablePath) then
  32. begin
  33. Log('No ExecutablePath, using the default');
  34. ExecutablePath := DefaultPath + '\python.exe';
  35. end;
  36. BaseDir := DefaultPath;
  37. if not RegQueryStringValue(RootKey, TagKey, 'SysVersion', Version) then
  38. begin
  39. if CompanyName = 'PythonCore' then
  40. begin
  41. Version := TagName;
  42. Delete(Version, 4, Length(Version));
  43. end else begin
  44. Log('Can not determine SysVersion');
  45. Result := False;
  46. exit;
  47. end;
  48. end;
  49. if not RegQueryStringValue(RootKey, TagKey, 'DisplayName', DisplayName) then
  50. begin
  51. DisplayName := 'Python ' + Version;
  52. end;
  53. Result := True;
  54. end;