Registriert seit: 29. Mai 2006
24 Beiträge
|
Re: Versionsinformationen von EXE-Dateien synchronisieren
6. Mai 2009, 09:04
Hallo nochmal,
ich bin mittlerweile einen entscheidenden Schritt weiter:
Delphi-Quellcode:
function WriteVersionInfo(const FileName: string; Major, Minor, Release, Build: Word): Boolean;
type
VS_VERSIONINFO = packed record
wLength: Word;
wValueLength: Word;
wType: Word;
szKey: array[0..15] of WideChar;
Padding1: Word;
Value: VS_FIXEDFILEINFO;
Padding2: Word;
Children: Word;
end;
var
lHLib: Cardinal;
lHRes: Cardinal;
lHResLoad: Cardinal;
lPResLock: Pointer;
lSz: Cardinal;
lPVersionInfo: ^VS_VERSIONINFO;
lPt: Pointer;
lHResUpd: Cardinal;
begin
Result := False;
if FileExists(FileName) then
begin
lHLib := LoadLibrary(PChar(FileName));
if lHLib <> 0 then
begin
lPt := nil;
lSz := 0;
try
lHRes := FindResource(lHLib, MakeIntResource(1), RT_VERSION);
if lHRes <> 0 then
begin
lHResLoad := LoadResource(lHLib, lHRes);
lSz := SizeofResource(lHLib, lHRes);
if lHResLoad <> 0 then
begin
lPResLock := LockResource(lHResLoad);
GetMem(lPt, lSz);
Move(lPResLock^, lPt^, lSz);
end;
end;
finally
FreeLibrary(lHLib);
end;
if Assigned(lPt) then
try
lPVersionInfo := lPt;
lPVersionInfo^.Value.dwFileVersionMS := (Major shl 16) or Minor;
lPVersionInfo^.Value.dwFileVersionLS := (Release shl 16) or Build;
lPVersionInfo^.Value.dwProductVersionMS := lPVersionInfo^.Value.dwFileVersionMS;
lPVersionInfo^.Value.dwProductVersionLS := lPVersionInfo^.Value.dwFileVersionLS;
lHResUpd := BeginUpdateResource(PChar(FileName), False);
if lHResUpd <> 0 then
begin
try
Result := UpdateResource(lHResUpd, RT_VERSION, MakeIntResource(1), 0, lPt, lSz);
finally
EndUpdateResource(lHResUpd, not Result);
end;
end;
finally
FreeMem(lPt);
end;
end;
end;
end;
Das ganze funktioniert auch soweit für die FileVersion, allerdings scheint die ProductVersion damit nicht geupdated zu werden. Jemand eine Idee was da noch falsch laufen könnte?
Exceeder
|
|
Zitat
|