für Windows fragt man am besten die Version der Datei kernel32.dll ab
Das habe ich nun auch versucht, mit der
GetFileVersionInfo funktion.
Beim Zugriff auf kernel32.dll gibt mir die funktion False zurück, GetLastError deutet auf "Datei nicht gefunden" hin, ich übergebe den kompletten Pfad. Irgendwas mache ich dabei falsch.
So hier in etwa verarbeite ich es: (Code nicht von mir)
Delphi-Quellcode:
function GetVersionInfo(NameApp, VerOpt: String): String;
var
dump: DWORD;
size: integer;
buffer: PChar;
VersionPointer, TransBuffer: PChar;
Temp: integer;
CalcLangCharSet: string;
begin
size := GetFileVersionInfoSize(PChar(NameApp), dump);
buffer := StrAlloc(size+1);
try
GetFileVersionInfo(PChar(NameApp), 0, size, buffer);
VerQueryValue(buffer, 'VarFileInfo\Translation', pointer(TransBuffer), dump);
if dump >= 4 then
begin
temp:=0;
StrLCopy(@temp, TransBuffer, 2);
CalcLangCharSet := IntToHex(temp, 4);
StrLCopy(@temp, TransBuffer+2, 2);
CalcLangCharSet := CalcLangCharSet+IntToHex(temp, 4);
end;
VerQueryValue(buffer, pchar('StringFileInfo\' + CalcLangCharSet + '\' + VerOpt), pointer(VersionPointer), dump);
if (dump > 1) then begin
SetLength(Result, dump);
StrLCopy(Pchar(Result), VersionPointer, dump);
end else Result := '';
finally
StrDispose(Buffer);
end;
end;
In einem Demo Projekt mit gleichem Code nur auf eine Datei im selben Verzeichniss angewendet klappt alles,
wenn ich nun die .exe zur kernel32.dll hinkopiere bleibt der Fehler bestehen.