Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi UpdateResource ändert FileVersion nicht (https://www.delphipraxis.net/116115-updateresource-aendert-fileversion-nicht.html)

Mazel 23. Jun 2008 21:06


UpdateResource ändert FileVersion nicht
 
Guten Abend,

ich versuche schon längere Zeit die Dateieigenschafen für die Version einer exe-Datei zu ändern, aber nicht während diese läuft. Das Auslesen mit GetFileVersionInfoSize, GetFileVersionInfo und VerQueryValue funktioniert super.

Nun wollte ich mit folgenden Code die Infos ändern, das einzigste was sich ändert ist die Größe der Datei. Folgender Code ist einer von vielen Versuchen.
Delphi-Quellcode:
procedure TForm1.SetFileVersion(const FileName: String);
var
 VersionInfoSize : LongWord;
 Dummy          : LongWord;
 hFile          : THandle;
 Value          : String;

begin
 Dummy := 0;
 VersionInfoSize := GetFileVersionInfoSize(PChar(FileName), Dummy);
 if VersionInfoSize > 0 then
  begin
   hFile := BeginUpdateResource(PChar(FileName), False);
   if hFile <> 0 then
    begin
     Value := '1.0.0.0';
     UpdateResource(hFile, MAKEINTRESOURCE(RT_VERSION), MAKEINTRESOURCE(1), MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN), PChar(Value), SizeOf(Value));
EndUpdateResource(hFile, False);
    end;
  end;
end;
Das Handle ist nicht leer also müsste doch eigentlich eine Änderung in den Eigenschaften zu sehen sein?

Wär nett, wenn jemand eine funktionierende Lösung hätte. ich weis nicht genau wie es nun richtig ist, weil ich schon so viele verschiedene Möglichkeiten gesehen habe und nach der msdn müsste es ja so sein wie ich es habe.

Mazel 24. Jun 2008 19:46

Re: UpdateResource ändert FileVersion nicht
 
:arrow: Push

Apollonius 24. Jun 2008 20:34

Re: UpdateResource ändert FileVersion nicht
 
Du musst alle Daten im rohen Format übergeben, und das ist nicht PChar. Hier ist beschrieben, wie es aussehen muss.

Mazel 26. Jun 2008 14:11

Re: UpdateResource ändert FileVersion nicht
 
Ich habe mir das mal durchgelesen und blicke um ehrlich zu sein, nicht ganz dahinter. Wenn ich das richtig verstanden habe, brauch ich die "StringFileInfo Structure", die eine "StringTable Structure" enthält und diese wiederum die eigentliche "String Structure", wo mein zu setzender Wert drinn steht.

Das kann ich aber nicht mit UpdateResource setzen, denn da muss ich ein Pointer übergeben.

Mazel 30. Jun 2008 07:58

Re: UpdateResource ändert FileVersion nicht
 
Ich versuch es einfach nochmal, ob sich jemand findet, der mir das kurz mit den Strukturen erklären kann.

toms 30. Jun 2008 08:32

Re: UpdateResource ändert FileVersion nicht
 
Hallo, auf codeproject.com gibt's einen Artikel.

Mazel 2. Jul 2008 07:47

Re: UpdateResource ändert FileVersion nicht
 
Danke toms, für den Artikel. Ich habe diesen Artikel auch schonmal gefunden, das Problem ist aber, dass ich Übersetzungsprobleme aus C/C++ in Delphi habe. Besonders diese zweil Zeilen:
Code:
ZeroMemory(pValueBuffer, _tcslen(pValueBuffer) * sizeof(TCHAR));
_tcscpy(pValueBuffer, _T("My Company, Inc."));
Was bedeutet _tcslen (welche Länge ist gemeint), tsccpy (sicherlich ein Kopiervorgang) und _T?

Und dann gibt es noch
Code:
(LPVOID *) &lpTranslate,
Das LPVOID mit Stern ist mir auch nicht ganz klar.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz