Wie kann man möglichst kleine EXE-Dateien erstellen?

OP #1711869
Lesenswert?

Bei einem kleinem digitalen Bilderrrahmen in Schlüsselanhängerform ist 
eine 122 kB große EXE-Datei mit dabei, um die Bilder draufladen zu 
können, siehe Screenshot. (Das Programm ist auch angehängt, läuft aber 
wahrscheinlich nur, wenn der digitale Bilderrahmen am USB gefunden 
wird).

Ich frage mich nun, wie man es schafft, dass so ein Tool nur 122 kB 
Codegröße hat. Wenn ich in Borland C++ Builder eine Form mit einem 
Button und Textfeld erstelle, dann hat die EXE-Datei über 400 kB. Selbst 
wenn ich dann noch mit UPX packe, sind es immer noch 185 kB.

Hat jemand einen Tipp, wie man die Codegröße reduzieren kann?
Angehängte Dateien:
#1711877
Lesenswert?

Erfordert diese Datei möglicherweise das NetFramework??

Dann ist das das Geheimnis dahinter,

ansonsten ist es meistens die Art wie die GUI programmiert wird,

native Anwendungen sind immer größer als Programme, die eine 
Runtime(Java/.Net) vorraussetzten

UPX würde ich nicht unbedingt machen, wenn es nicht extrem wichtig ist, 
dass du ein paar KB einsparst, macht nur prob mit Antivirensoftware...
#1711879
Lesenswert?

Du willst die Codegröße reduzieren? Nein - die Größe der exe - oder?

also eine Winforms App mit einem Button und einer Textbox ist für das 
2.0er Framework gerade mal 8kB groß.

Wahrscheinlich bindet dein Borland alle möglichen DLLs dran (statisch) 
und nicht dynamisch. Das hat vermutlich den Vorteil, dass du das Ding 
auf vielen unterschiedlichen OS Installationen laufen lassen kannst ohne 
dich drum zu kümmern, dass bestimmte Framework Anteile auf dem Rechner 
installiert sind!

Nachteil : große exe ;o)

Warum willst du so ein Tool so klein bekommen?
OP #1711888
Lesenswert?

Irgnedwo habe ich noch gelesen, dass die EXE deutlich kleiner wird, wenn 
man ohne VCL programmiert, also die Fenster und Komponenten "zur 
Laufzeit" aus dem Quellcode generiert.

Aber wie würde man sowas ohne VCL machen, das wäre vermutlich ein 
ziemlicher Aufwand, oder?
#1711889
Lesenswert?

chrisu das hat ihm bestimmt geholfen ;-)

ich hab das file, das du hochgeladen hast mal analysiert,

so wie es aussieht wurde es mit Visual C++ von MS geschrieben

und bedienst sich an gdi und mfc, alles dynamisch geladen, sodass es auf 
deinem windows system schon vorhanden sein muss, das spart einiges an KB 
wenn die dlls dynamisch kommen ;-)
OP #1711904
Lesenswert?

Christian R. schrieb:
> Was willst du denn überhaupt erreichen?
>
> Passt das fertige Tool nicht?

Doch, aber mich hat halt interessiert, wie so eine verhältnismäßig 
kleine exe realisiert werden kann. Diese exe ist übrigens im 
Bilderrahmen selbst gespeichert und wird per USB an den PC hochgeladen 
und ausgeführt. Eine kleine exe hat dann gleich 2 Vorteile: wenig 
Speicherplatz im begrenzten Flash des Bilderrahmens und kürzere 
Übertragungszeit über USB.


Marcus B. schrieb:
> so wie es aussieht wurde es mit Visual C++ von MS geschrieben
>
> und bedienst sich an gdi und mfc, alles dynamisch geladen, sodass es auf
> deinem windows system schon vorhanden sein muss, das spart einiges an KB
> wenn die dlls dynamisch kommen ;-)

Sind diese DLLs dann bei Standard-Windows-Installationen schon drauf? Es 
wird ja nicht jeder Kunde des Bilderrahmens Visual C++ installiert 
haben?

Wenn ich beim Borland ohne Laufzeitpackages linke, dann wird zwar die 
exe schön klein, es läuft aber nur auf Rechnern mit installiertem 
Borland.
OP #1711953
Lesenswert?

Karl heinz Buchegger schrieb:
> ist dort der Optimizer eingeschaltet?
> Wird die Runtime als DLL gelinkt oder statisch?
>
> All das sind Fragestellungen, die die EXE-Größe betreffen.

Im Borland habe ich "Mit Laufzeitpackages aktualisieren" und "Dynamische 
RTL verwenden" jeweils deaktiviert. Das bläht die exe auf, ist aber 
notwendig, damit sie auch auf Standard-Windowsinstallationen läuft.

Wie sieht das bei Microsoft Visual C++ aus, werden da DLLs verwendet, 
die auch auf Standard-Windowsinstallationen schon vorhanden sind?
Gast #1711968
Lesenswert?

450 KB ist doch heutzutage eine absolut zu vernachlässigende Größe.
Es wäre in meinen Augen jedenfalls völliger Wahnsinn, auf den Komfort 
der Borland VCL zu verzichten, nur um eine lächerlich kleine Menge 
Speicher einzusparen.

Einzig und allein für Schadsoftware-Autoren ist die Größe wirklich 
interessant, weil es da darauf ankommt, dass die Software sich schnell 
verbreiten und schnell weiterverteilen kann, z.B. über E-Mails.
Kleine Tools (ohne GUI) kann mit mit MS Visual C++ auch locker unter 20 
KB hinbekommen.
Gast #1712485
Lesenswert?

Recht kompakt (und dabei ohne Abhängigkeiten) werden auch immer statisch 
gelinkte MFC-Anwendungen, wenn man außer den elementaren GUI-Klassen 
(CFrameWnd usw.) und allgemeinem Kram wie CString wenig von der MFC 
nutzt. 100k sind da für kleinere Progrämmchen durchaus typisch.
Gast #1712490
Lesenswert?

> Wenn es wirklich klein werden soll heißt ein Zauberwort wohl Assembler.

Ach was.

Programmieren sollte man halt können, und wissen, was zusätzlich aus 
Bilbliotheken reingeladen wird.

> Wird für diese Software tatsächlich ein installiertes .NET Framework
> vorausgesetzt?

Kaum. Ist schliesslich eine riesengrosse EXE-Datei. Sie muss wohl JPEG 
und GIF Decoder-Routinen enthalten, und sonst fast nichts.

> Im Verhältnis zu den 450 kB von Borland schon

Wenn man erst mal sagt "Ich will sämlichen Komfort (egal ob ich ihn 
brauche oder nicht) mit reingelinkt bekommen, dann ist die halt so 
gross.

>  man ohne VCL programmiert

Z.B. diesen "Komfort" (eher: kranken Scheiss).


So wie ein Blick ins Programm erahnen lässt, läuft der Bilderrahmen wohl 
unter WindowsCE (Mobile Windows), und das Programm verwendet GDI32 und 
OLE.
OP #1716939
Lesenswert?

der mechatroniker schrieb:
> Recht kompakt (und dabei ohne Abhängigkeiten) werden auch immer statisch
> gelinkte MFC-Anwendungen, wenn man außer den elementaren GUI-Klassen
> (CFrameWnd usw.) und allgemeinem Kram wie CString wenig von der MFC
> nutzt. 100k sind da für kleinere Progrämmchen durchaus typisch.

Hab ich versucht, komme allerdings auf 304 kB.
In den automatisch erstellten Dialog habe ich ein EditControl und einen 
Button hinzugefügt.

Wie könnte man auf ca. 100 kB kommen?
Gibt es spezielle Projekteinstellungen?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren