AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Resource löschen klappt - EXE wird aber nicht kleiner

Resource löschen klappt - EXE wird aber nicht kleiner

Ein Thema von moelski · begonnen am 5. Jun 2009 · letzter Beitrag vom 5. Jun 2009
Antwort Antwort
Seite 1 von 2  1 2   
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#1

Resource löschen klappt - EXE wird aber nicht kleiner

  Alt 5. Jun 2009, 10:33
Moin !

Ich habe in meinem Installer ein ZIP als Resource eingebunden. Klappt auch wundelbar.
Nun möchte ich aber das ZIP aus dem Installer entfernen (weil ich ihn auch direkt als Unistaller nutzen möchte).

Nun verwende ich folgenden Code:
Delphi-Quellcode:
    if FileExists('Uninstall.exe') then
    begin
      hInst := BeginUpdateResource(Pchar('Uninstall.exe'), false);
      if hInst > 0 then
        try
          UpdateResource(hInst, RT_RCDATA, 'INSTALLZIP', LANG_NEUTRAL, NIL, 0);
        finally
          EndUpdateResource(hInst, false);
        end;
    end;
Der löscht mir auch die Resource raus (kann man im Res Editor sehen), aber die Dateigröße bleibt gleich.

Kann mir jemand sagen wie ich eine Resource lösche (oder eher besser den Inhalt auf 0 Byte setze) und wo sich dann aber auch die EXE Datei in der Größe anpasst?
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.288 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Resource löschen klappt nur teilweise

  Alt 5. Jun 2009, 10:43
Am besten häng die Dateien nur an, dann musst du nicht mit Ressourcen arbeiten. Dafür habe ich hier eine einfache Streamklasse veröffentlicht.
http://www.delphipraxis.net/internal....php?p=1043105
Da der Installer ohnehin Adminrechte hat, ist das auch problemlos damit möglich.

Beim Übernehmen der Anhangsdaten muss ggf. etwas angepasst werden, aber es ist ja Open Source.

Das mit den Ressourcen werde ich mir dennoch einmal anschauen, aber ich halte diese Lösung für einen Installer für weniger praktikabel.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Resource löschen klappt nur teilweise

  Alt 5. Jun 2009, 10:47
Moin !

Zitat:
, aber ich halte diese Lösung für einen Installer für weniger praktikabel
Nunja, ich sag mal so ... Es funktioniert.
So übel finde ich die Lösung mit Resourcen gar nicht und ich möchte jetzt auch nicht alles wieder umschreiben.

Ich glaube mein Problem liegt daran das die ImageSize neu berechnet und gesetzt werden muss für die EXE.
Aber habe noch keinen Schimmer wie man das anstellen kann.

Der Resource Tuner macht nämlich genau das und da passt am Ende dann auch die Größe wieder.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.288 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Resource löschen klappt - EXE wird aber nicht kleiner

  Alt 5. Jun 2009, 11:44
Wie wäre es, wenn du den Rückgabewert der Funktionen nicht ignorierst? Das sagt mir nämlich, dass da ein "falscher Parameter" bei UpdateResource wäre, was dann bei EndUpdateResource zu einem internen Fehler führt. Wobei ich das hier gerade mit Vista teste, XP müsste ich in einem virtuellen PC erst starten.
Delphi-Quellcode:
        if UpdateResource(hInst, RT_RCDATA, 'INSTALLZIP', LANG_NEUTRAL, NIL, 0) then
          ShowMessage('erfolgreich')
        else
          ShowMessage(SysErrorMessage(GetLastError()));
      finally
        if EndUpdateResource(hInst, false) then
          ShowMessage('erfolgreich')
        else
          ShowMessage(SysErrorMessage(GetLastError()));
      end;
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Resource löschen klappt - EXE wird aber nicht kleiner

  Alt 5. Jun 2009, 11:53
Meldet beides "erfolgreich".

Das hätte ich mir auch denken können denn wie geschrieben kann man ja danach im Resource Editor sehen das die Resource wirklich weg ist. Und die EXE lässt sich dann auch noch starten.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.288 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Resource löschen klappt - EXE wird aber nicht kleiner

  Alt 5. Jun 2009, 12:02
Hmm, dann weiß ich auch nicht, ob man da etwas dran ändern kann.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Resource löschen klappt - EXE wird aber nicht kleiner

  Alt 5. Jun 2009, 12:05
Evtl. hat ja noch jemand hier ne Idee.
Wie gesagt ich vermute man muss die "SizeOfImage" anpassen.
Aber ich kann dazu in der MSDN nix finden und auch eine Suche im Web/Forum hat mich noch nicht weitergebracht.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.288 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Resource löschen klappt - EXE wird aber nicht kleiner

  Alt 5. Jun 2009, 12:36
Nur weil man den Wert im PE-Header anpasst, ändert sich die Größe der Datei ja nicht. Die Frage ist was beim Löschen der Ressource dann eigentlich gemacht wird. Hast du einmal mit einem Hexeditor geschaut, ob die Ressource weiter enthalten ist?
Zudem: Was passiert, wenn du die Daten der Ressource mit Daten mit nur einem Byte Größe ersetzt? Und wenn das nicht klappt: Was, wenn die Daten größer sind, zumindest dann muss sich die Größe ja ändern.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Resource löschen klappt - EXE wird aber nicht kleiner

  Alt 5. Jun 2009, 12:43
Moin !

Zitat:
Die Frage ist was beim Löschen der Ressource dann eigentlich gemacht wird
Eher as noch gemacht werden muss ...

Zitat:
Hast du einmal mit einem Hexeditor geschaut, ob die Ressource weiter enthalten ist?
Nein, aber da sich die Dateigröße kein Byte ändert ist entweder der Platz noch reseviert, oder aber der Eintarg für die Resource ist noch weg aber die Daten noch da.

Zitat:
Was passiert, wenn du die Daten der Ressource mit Daten mit nur einem Byte Größe ersetzt
Die Größe bleibt.

Zitat:
Was, wenn die Daten größer sind, zumindest dann muss sich die Größe ja ändern.
Öhm das habe ich jetzt noch nicht getestet. Ist ja auch genau der Gegensatz zu dem was ich brauche.
Kann ich aber mal spasshalber testen.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Resource löschen klappt - EXE wird aber nicht kleiner

  Alt 5. Jun 2009, 12:52
Moin !

Wenn die hinzuzufügenden Daten größer sind als die jetzigen Daten, dann wird die EXE nach dem Update größer.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 07:42 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