![]() |
Resource löschen klappt - EXE wird aber nicht kleiner
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:
Der löscht mir auch die Resource raus (kann man im Res Editor sehen), aber die Dateigröße bleibt gleich.
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; 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? |
Re: Resource löschen klappt nur teilweise
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. ;-)
![]() 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. |
Re: Resource löschen klappt nur teilweise
Moin !
Zitat:
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. :gruebel: Der Resource Tuner macht nämlich genau das und da passt am Ende dann auch die Größe wieder. |
Re: Resource löschen klappt - EXE wird aber nicht kleiner
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; |
Re: Resource löschen klappt - EXE wird aber nicht kleiner
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. |
Re: Resource löschen klappt - EXE wird aber nicht kleiner
Hmm, dann weiß ich auch nicht, ob man da etwas dran ändern kann. :stupid:
|
Re: Resource löschen klappt - EXE wird aber nicht kleiner
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. |
Re: Resource löschen klappt - EXE wird aber nicht kleiner
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. |
Re: Resource löschen klappt - EXE wird aber nicht kleiner
Moin !
Zitat:
Zitat:
Zitat:
Zitat:
Kann ich aber mal spasshalber testen. |
Re: Resource löschen klappt - EXE wird aber nicht kleiner
Moin !
Wenn die hinzuzufügenden Daten größer sind als die jetzigen Daten, dann wird die EXE nach dem Update größer. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 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