![]() |
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:
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...
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; Hat jemand eine andere Lösung? Gruss Shaman |
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 |
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?
|
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 |
Re: Ressourcen aus EXE entfernen
kann mir jemand mal einen beipsiel-code für deleteresource posten?
meiner geht einfach nicht:
Delphi-Quellcode:
als result bekomme ich dann immer false!
deleteresource(opendialog1.filename, 'BBABORT', 'RT_BITMAP');
gruss, iaby |
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. |
Re: Ressourcen aus EXE entfernen
Result ist jetzt true, die Ressource wurde gelöscht, die EXE ist jedoch noch nicht kleiner geworden.
Delphi-Quellcode:
(RT_BITMAP und nicht 'RT_BITMAP')
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; |
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 ..
|
Re: Ressourcen aus EXE entfernen
Zitat:
![]() |
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
![]() |
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