Forum: PC-Programmierung Wie kann man möglichst kleine EXE-Dateien erstellen?


von M. G. (looking)


Angehängte Dateien:

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?

von Marcus B. (raketenfred)


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...

von Christian R. (mrrotzi)


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?

von Ch D. (chrisu) Benutzerseite


Lesenswert?

Es gibt Packer wie zB UPX. Die EXE Datei entpackt sich dann immer 
alleine beim starten...

von M. G. (looking)


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?

von Marcus B. (raketenfred)


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 ;-)

von Christian R. (mrrotzi)


Lesenswert?

Was willst du denn überhaupt erreichen?

Passt das fertige Tool nicht?

von Ch D. (chrisu) Benutzerseite


Lesenswert?

Yo das Programm ist nicht gepackt.

von M. G. (looking)


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.

von Christian R. (mrrotzi)


Lesenswert?

Also Textboxen, Buttons usw. kann man auch mit Std. Windows-API's 
erzeugen und eine App draus machen. Das ist zwar mühsam aber es geht.
Dann wird auch die exe klein und es funktioniert überall.

von Karl H. (kbuchegg)


Lesenswert?

und 122k ist nicht wirklich klein.

von M. G. (looking)


Lesenswert?

Christian R. schrieb:
> Also Textboxen, Buttons usw. kann man auch mit Std. Windows-API's
> erzeugen und eine App draus machen. Das ist zwar mühsam aber es geht.
> Dann wird auch die exe klein und es funktioniert überall.

Hast Du einen Link zu einem gut kommentierten Beispiel?
Danke.

von M. G. (looking)


Lesenswert?

Karl heinz Buchegger schrieb:
> und 122k ist nicht wirklich klein.

Im Verhältnis zu den 450 kB von Borland schon... :-)

von Christian R. (mrrotzi)


Lesenswert?

versuch dich mal hier:
http://www.apitalk.com/windows-Programming/Start-Windows-Programming-Win32-Api-Basics.html

man muss schon mal wissen, wie so eine Windows App überhaupt 
funktioniert. aber dieses Bsp. ist schon recht gut!

von Karl H. (kbuchegg)


Lesenswert?

ist dort der Optimizer eingeschaltet?
Wird die Runtime als DLL gelinkt oder statisch?

All das sind Fragestellungen, die die EXE-Größe betreffen.

von Andreas (Gast)


Lesenswert?

Für VC++ gibt es mehrere Tutorials zu diesem Thema, z.B. 
http://www.catch22.net/tuts/minexe

von Karl H. (kbuchegg)


Lesenswert?

Aber eigentlich will man sich eine Windos-App die auf dem C-API aufsetzt 
nicht wirklich freiwillig antun :-)

von adfix (Gast)


Lesenswert?

Dieses 3D Spiel hat 96kBytes !

http://www.theprodukkt.com/kkrieger

von M. G. (looking)


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?

von Peter Petersen (Gast)


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.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Andreas schrieb:
> Für VC++ gibt es mehrere Tutorials zu diesem Thema, z.B.
> http://www.catch22.net/tuts/minexe

Die Catch22 Seite gefällt mir sehr gut, Danke für den Hinweis!

von M. G. (looking)


Lesenswert?

Welche Einstellungen sind in MS Visual C++ notwendig, damit eine über 
"CLR Windows Forms Anwendung" erzeugte exe auch auf 
Standard-Windowsinstallationen läuft?

von Christian R. (mrrotzi)


Lesenswert?

Das gibts nicht!
Eine Winforms App benötigt ein .NET Framework!
genauso wie du für eine Java App eine Java-Runtime brauchst!!

von M. G. (looking)


Lesenswert?

Mit welchen Projekteinstellungen in MS Visual C++ könnte denn die 
DPFMate.exe (Bilderrahmensoftware) erstellt worden sein?
Wird für diese Software tatsächlich ein installiertes .NET Framework 
vorausgesetzt?

von oszi40 (Gast)


Lesenswert?

Vor langer Zeit habe 3 Zeilen Quelltext kompiliert und hatte hinterher 
12k zusätzlichen Müll in der .exe!

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

von eklige Tunke (Gast)


Lesenswert?

adfix schrieb:
> Dieses 3D Spiel hat 96kBytes !
>
> http://www.theprodukkt.com/kkrieger
Plus DirectX 9.0b hat es dann wie viel?

von der mechatroniker (Gast)


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.

von MaWin (Gast)


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.

von Christian R. (mrrotzi)


Lesenswert?

oszi40 schrieb:

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

Eine Windows Applikation in Assembler? Respekt!! Oder ... viel Spaß!

von Vlad T. (vlad_tepesch)


Lesenswert?

Christian R. schrieb:
>> Wenn es wirklich klein werden soll heißt ein Zauberwort wohl Assembler.
>
> Eine Windows Applikation in Assembler? Respekt!! Oder ... viel Spaß!

Die Windowsgeschichten sind nicht viel anders als in C.
Sind ja fast alles nur API calls.

Antun würde ichs mir trotzdem nur in Ausnahmefällen.

von borwinius (Gast)


Lesenswert?


von Klausi (Gast)


Lesenswert?

eklige Tunke schrieb:
> Plus DirectX 9.0b hat es dann wie viel?

Wenn du so anfängst zu rechnen, dann kannst du die Größe des 
Betriebssystems auch gleich dazurechenen. Denn ohne das gehts ja auch 
nicht...

von M. G. (looking)


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?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.