AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ressourcen aus EXE entfernen

Offene Frage von "Zacherl"
Ein Thema von Shaman · begonnen am 2. Nov 2003 · letzter Beitrag vom 5. Feb 2007
Antwort Antwort
Benutzerbild von Shaman
Shaman

Registriert seit: 2. Nov 2003
Ort: Schweiz
407 Beiträge
 
Turbo Delphi für Win32
 
#1

Ressourcen aus EXE entfernen

  Alt 2. Nov 2003, 12:07
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
Daniel Pauli
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#2

Re: Ressourcen aus EXE entfernen

  Alt 2. Nov 2003, 12:41
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
Martin Schaefer
  Mit Zitat antworten Zitat
Benutzerbild von Shaman
Shaman

Registriert seit: 2. Nov 2003
Ort: Schweiz
407 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Ressourcen aus EXE entfernen

  Alt 2. Nov 2003, 14:28
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?
Daniel Pauli
  Mit Zitat antworten Zitat
iaby

Registriert seit: 30. Nov 2002
Ort: BW
258 Beiträge
 
#4

Re: Ressourcen aus EXE entfernen

  Alt 11. Nov 2003, 08:04
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
  Mit Zitat antworten Zitat
iaby

Registriert seit: 30. Nov 2002
Ort: BW
258 Beiträge
 
#5

Re: Ressourcen aus EXE entfernen

  Alt 17. Nov 2003, 15:36
kann mir jemand mal einen beipsiel-code für deleteresource posten?
meiner geht einfach nicht:deleteresource(opendialog1.filename, 'BBABORT', 'RT_BITMAP'); als result bekomme ich dann immer false!

gruss,
iaby
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

Re: Ressourcen aus EXE entfernen

  Alt 22. Jan 2007, 22:40
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.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Ressourcen aus EXE entfernen

  Alt 23. Jan 2007, 18:31
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')
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

Re: Ressourcen aus EXE entfernen

  Alt 23. Jan 2007, 18:33
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 ..
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#9

Re: Ressourcen aus EXE entfernen

  Alt 25. Jan 2007, 18:03
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
  Mit Zitat antworten Zitat
Benutzerbild von Daniel Schuhmann
Daniel Schuhmann

Registriert seit: 16. Jul 2005
Ort: München
391 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Ressourcen aus EXE entfernen

  Alt 5. Feb 2007, 12:58
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).
Daniel Schuhmann
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:41 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