Einzelnen Beitrag anzeigen

Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
975 Beiträge
 
Delphi 2007 Professional
 
#12

AW: Delphi-Versionsnummer per IOTA-Service abfragen?

  Alt 19. Mär 2021, 09:22
GExperts führt dazu eine Liste der Versionsinfos diverser Executables und BPLs. Die wird benutzt, um diverse Bugs / Features einzelner Updates zu umschiffen. Unit GX_GetIdeVersion im Unterverzeichnis source\framework.

Sieht dann z.B. so aus:

Delphi-Quellcode:
{
  Delphi 10.4 Sydney
  File                File Version    Size      Modified Time
  delphicoreide270.bpl 27.0.37889.9797
  coreide270.bpl      27.0.37889.9797
  bds.exe              27.0.37889.9797
  dcldb270.bpl        27.0.37889.9797

  Patch1 and Patch2 apparently did not change any of these versions and even those files
  the patches replaced still have the same version as the original files. WTF?

  Delphi 10.4.1 Sydney Update 1
  File                File Version    Size      Modified Time
  delphicoreide270.bpl 27.0.38860.1461
  coreide270.bpl      27.0.38860.1461
  bds.exe              27.0.38860.1461
  dcldb270.bpl        27.0.38860.1461

  Delphi 10.4.2 Sydney Update 2
  File                File Version    Size      Modified Time
  delphicoreide270.bpl 27.0.40680.4203
  coreide270.bpl      27.0.40680.4203
  bds.exe              27.0.40680.4203
  dcldb270.bpl        27.0.40680.4203
}


function GetRS104Version: TBorlandIdeVersion;
const
  RegKey = 'Software\Embarcadero\BDS\21.0\CatalogRepository\Elements\10.4Patch2pro-10';
  CoreIde2700: TVersionNumber = (Minor: 27; Major: 0; Build: 9797; Release: 37829);
  CoreIde2700UPd1: TVersionNumber = (Minor: 27; Major: 0; Build: 1461; Release: 38860);
  CoreIde2700UPd2: TVersionNumber = (Minor: 27; Major: 0; Build: 4203; Release: 40680);
var
  RegValue: Integer;
  CoreIdeFileVersion: TVersionNumber;
begin
  CoreIdeFileVersion := GetFileVersionNumber(GetIdeRootDirectory + 'Bin\coreide270.bpl');

  if CompareVersionNumber(CoreIdeFileVersion, CoreIde2700UPd2) >= 0 then begin
    Result := ideRS104U2;
  end else if CompareVersionNumber(CoreIdeFileVersion, CoreIde2700UPd1) >= 0 then begin
    Result := ideRS104U1;
  end else begin
    // There was patch 2 for 10.4.0 which broke StringGrids in a new way
    // so we have to detect it.
    RegValue := TRegistry_ReadInteger(RegKey, 'Installed', 0, HKEY_CURRENT_USER);
    if RegValue <> 0 then
      Result := ideRS104P2
    else
      Result := ideRS104;
  end;
end;
In der Regel reicht es, wenn man CoreIde prüft, aber bei einigen älteren Versionen wurden durch ein Update / Patch nur einzele wichtige Dateien geändert, so dass man gezielt diese prüfen muss.
Thomas Mueller

Geändert von dummzeuch (19. Mär 2021 um 09:26 Uhr)
  Mit Zitat antworten Zitat