www.mikrocontroller.net

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


Autor: M. G. (looking)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Marcus B. (raketenfred)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Christian R. (mrrotzi)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Ch D. (chrisu) Benutzerseite
Datum:

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

Autor: M. G. (looking)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Marcus B. (raketenfred)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Christian R. (mrrotzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was willst du denn überhaupt erreichen?

Passt das fertige Tool nicht?

Autor: Ch D. (chrisu) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yo das Programm ist nicht gepackt.

Autor: M. G. (looking)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian R. (mrrotzi)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und 122k ist nicht wirklich klein.

Autor: M. G. (looking)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: M. G. (looking)
Datum:

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

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

Autor: Christian R. (mrrotzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
versuch dich mal hier:
http://www.apitalk.com/windows-Programming/Start-W...

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist dort der Optimizer eingeschaltet?
Wird die Runtime als DLL gelinkt oder statisch?

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

Autor: Andreas (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: adfix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dieses 3D Spiel hat 96kBytes !

http://www.theprodukkt.com/kkrieger

Autor: M. G. (looking)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter Petersen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: M. G. (looking)
Datum:

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

Autor: Christian R. (mrrotzi)
Datum:

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

Autor: M. G. (looking)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: oszi40 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: eklige Tunke (Gast)
Datum:

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

Autor: der mechatroniker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: MaWin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian R. (mrrotzi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oszi40 schrieb:

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

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

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: borwinius (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Klausi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: M. G. (looking)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.