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.