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 Ressourcen aus EXE entfernen (https://www.delphipraxis.net/11219-ressourcen-aus-exe-entfernen.html)

Shaman 2. Nov 2003 12:07


Ressourcen aus EXE entfernen
 
Hallo zusammen!

Ich habe jeweils den Resource Hacker verwendet, um bei fertigen Versionen die überflüssigen Ressourcen (Bitmaps, Cursors etc.) zu entfernen. Nun möchte ich dafür gerne ein Programm schreiben, um mir die Handarbeit zu ersparen. Mein Ansatz:
Delphi-Quellcode:
function DeleteResource(const FileName: string; const ResName, ResType: PChar): Boolean;
var
  hUpdate: Cardinal;
begin
  Result:= False;
  hUpdate:= BeginUpdateResource(PChar(FileName), False);
  if hUpdate = 0 then Exit;
  try
    Result:= UpdateResource(hUpdate, ResType, ResName, 0, nil, 0);
  finally
    EndUpdateResource(hUpdate, not Result);
  end;
end;
Scheinbar funktioniert die Sache, auf die Ressource kann auch nicht mehr zugegriffen werden. Nur nimmt die Grösse der EXE nicht ein einziges Byte ab. Nicht gerade das, was ich bezwecken möchte...

Hat jemand eine andere Lösung?

Gruss
Shaman

mschaefer 2. Nov 2003 12:41

Re: Ressourcen aus EXE entfernen
 
Moin,moin,

Vielleicht solltest Dui mal einen Exepacker verwenden um die Exe kleiner zu kriegen.
Dein Problem kannst Du nicht mit einer Procerude im Programm lösen. Geht vom Prinzip nicht.
Der Linker bindet beim Compilern/Linken die Ressourcen mit ins Programm ein. Da sind die nun. Jetzt kannst Du Die mit Deiner Routine dann freigeben (könnte sogar sein, das im Speciher dann einige Byte freigegeben werden) aber, da das ja erst zur Laufzeit passiert ist das für die Exegröß0e irrelevant.

Was geht: Möglixht wenige VCL-Elemente verwenden, Panels einsparen... Odr die Elemente über API-Aufrufe erstellen.

Grüße // Martin

Shaman 2. Nov 2003 14:28

Re: Ressourcen aus EXE entfernen
 
Das Programm soll ja nicht seine eigenen Ressourcen löschen, während es läuft. Das soll ein anderes übernehmen, wie eben der Ressource Hacker. Irgendwie muss das doch gehen?

iaby 11. Nov 2003 08:04

Re: Ressourcen aus EXE entfernen
 
ich hätte auch interesse an dem source, da das manuelle löschen per ResourceHacker ziemlich lange dauert!
hat jemand also noch einen vorschlag?

gruss,
iaby

iaby 17. Nov 2003 15:36

Re: Ressourcen aus EXE entfernen
 
kann mir jemand mal einen beipsiel-code für deleteresource posten?
meiner geht einfach nicht:
Delphi-Quellcode:
deleteresource(opendialog1.filename, 'BBABORT', 'RT_BITMAP');
als result bekomme ich dann immer false!

gruss,
iaby

Zacherl 22. Jan 2007 22:40

Re: Ressourcen aus EXE entfernen
 
Habe selbiges Problem. Ich möchte gerne ein paar Resourcen aus einer Zieldatei entfernen. Obigen Denkansatz hatte ich auch gefunden, musste allerdings merken, dass dieser nicht funktioniert.

Kennt jemand die Metohde von ResHacker und Co zum Löschen von Ressource.

bitsetter 23. Jan 2007 18:31

Re: Ressourcen aus EXE entfernen
 
Result ist jetzt true, die Ressource wurde gelöscht, die EXE ist jedoch noch nicht kleiner geworden.
Delphi-Quellcode:
function DeleteResource(const FileName: Ansistring; const ResName, ResType: PChar): Boolean;
var
  hUpdate: Cardinal;
begin
  Result:= False;
  hUpdate:= BeginUpdateResource(PChar(FileName), LongBool(FALSE));
  if hUpdate = 0 then Exit;
  try
    Result:= UpdateResource(hUpdate, ResType, ResName, LANG_NEUTRAL, nil, 0);
  finally
    if Result then
    EndUpdateResource(hUpdate, LongBool(FALSE))
    else
    EndUpdateResource(hUpdate, LongBool(TRUE));
  end;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin                                            //'RT_BITMAP' <- ALT
  if DeleteResource(opendialog1.filename, 'BBABORT', RT_BITMAP) then
  Caption:= 'OK';
end;
(RT_BITMAP und nicht 'RT_BITMAP')

Zacherl 23. Jan 2007 18:33

Re: Ressourcen aus EXE entfernen
 
Ja, soweit war meine Überlegung auch, allerdings wird die Location der Resource in der EXE lediglich mit Füllzeichen aufgefüllt, nicht aber die entsprechende Stelle gelöscht und ImageSize im PE Header aktualisiert ..

Olli 25. Jan 2007 18:03

Re: Ressourcen aus EXE entfernen
 
Zitat:

Zitat von Florian Bernd
Ja, soweit war meine Überlegung auch, allerdings wird die Location der Resource in der EXE lediglich mit Füllzeichen aufgefüllt, nicht aber die entsprechende Stelle gelöscht und ImageSize im PE Header aktualisiert ..

Aber dazu gibt's zum Glueck ja ein aktuelles Thema

Daniel Schuhmann 5. Feb 2007 12:58

Re: Ressourcen aus EXE entfernen
 
Der Ressource Hacker verfügt auch über die Möglichkeit, Ressourcen über die Kommandozeile zu löschen. Eine einfache Batch-Datei genügt (Siehe auch Ein paar Fragen zu Ressourcen - oder: wertvolle Bytes sparen).


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 Uhr.

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