Entwickler-Ecke
Windows API - Splash Screen EXE so klein wie möglich!
Bernhard138 - Mo 14.09.09 07:04
Titel: Splash Screen EXE so klein wie möglich!
Hallo zusammen,
ich habe ein Programm geschrieben (medizinischer Bereich), das ich meinen Mitarbeitern über ein Netzlaufwerk zur Verfügung stelle. Der Vorteil hierbei ist, das Änderungen/Updates nur an einer Stelle und nicht, wie bei herkömmlicher lokaler Installation, auf allen Rechnern erfolgen müssen. Ein Nachteil ist, das der Programmstart durchaus etwas träge ist und seine Zeit dauert (Hauptprogramm 1100 KB + Nachladen diverser Datenbankfiles zur Laufzeit). Um diese Zeit zu überbrücken würde ich jetzt gerne einen Splash Screen einbauen - in Form eines deutlich kleineren Programms, das ebenfalls auf dem Netzlaufwerk liegt, aber eben deutlich schneller geladen wird. Es soll nichts weiter tun als ein kleines JPG anzeigen und das Hauptprogramm starten. Mit der VCL ist das offenbar nicht zu bewerkstelligen, da hierbei Programme > 300 KB herauskommen.
Das Progrämmchen sollte natürlich so klein wie möglich sein, am besten < 50 KB...
Weiß da jeman Rat?
Vielen Dank
Bernhard
jaenicke - Mo 14.09.09 07:17
Die Exe selbst ist doch wohl schnell da bei der Größe von etwa einem MiB, das heißt du kannst den SplashScreen doch ganz normal in deinem Programm selbst anzeigen, dann alles laden und dann den SplashScreen wieder ausblenden.
Das Fenster müsstest du für eine kleine Exe per API anzeigen (nonVCL), dann ist die Exe relativ klein. Aber wie gesagt: bei der Größe deines Programms brauchst du eigentlich gar keine zusätzliche Exe. Oder wie langsam ist das Netzwerk? 1 MiB für die Exe selbst sollte doch blitzschnell geladen sein.
Garf - Mo 14.09.09 11:14
Ein Starter muss sich irgendwann wieder schließen und deshalb prüfen, wann die Anwendung vollständig geladen ist.
Ist der Splashscreen bei Dir so langsam?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| Program ...;
...
begin frmSplash := TfrmSplash.Create(Application); try frmSplash.Show; frmSplash.Update; Application.Initialize; Application.Title := '...'; Application.CreateForm(TfrmMain, frmMain); finally frmSplash.Free; end; Application.Run; end. |
Stoney - Mo 14.09.09 12:38
Du könntest auch probieren deine EXE mit
UPX [
http://upx.sourceforge.net/] zu komprimieren.
Meine Anwendungen (nonVCL) sind meistens ca. 180 kB (ca. 100 kB ohne XML-Loader) groß und mit UPX komprimiert etwa 90 - 100 kB (ca. 40 - 50 kB ohne XML-Loader).
Timosch - Mo 14.09.09 14:04
Stoney hat folgendes geschrieben : |
Du könntest auch probieren deine EXE mit UPX [http://upx.sourceforge.net/] zu komprimieren.
Meine Anwendungen (nonVCL) sind meistens ca. 180 kB (ca. 100 kB ohne XML-Loader) groß und mit UPX komprimiert etwa 90 - 100 kB (ca. 40 - 50 kB ohne XML-Loader). |
Davon ist abzuraten. Irritierenderweise schlagen bei Exe-Packern häufig Antivirenprogramme Alarm. Sowas lässt sich dem Nutzer schwer vermitteln.
Narses - Mo 14.09.09 15:07
Moin!
Timosch hat folgendes geschrieben : |
Stoney hat folgendes geschrieben : | Du könntest auch probieren deine EXE mit UPX [http://upx.sourceforge.net/] zu komprimieren.
Meine Anwendungen (nonVCL) sind meistens ca. 180 kB (ca. 100 kB ohne XML-Loader) groß und mit UPX komprimiert etwa 90 - 100 kB (ca. 40 - 50 kB ohne XML-Loader). |
Davon ist abzuraten. |
Das kann ich pauschal so nicht stehen lassen. Genau das mache ich hier in meinem Netz auch, aus den gleichen Gründen. (Einschränkung: Stand-Alone-EXE, keine DLLs etc.pp)
Timosch hat folgendes geschrieben : |
Irritierenderweise schlagen bei Exe-Packern häufig Antivirenprogramme Alarm. |
Die Heuristik schlägt idR erst dann zu, wenn Netzwerk-Funktionen in UPX-gepackten Executables enthalten sind. Und auch hier kann man problemlos den AV-Herstellen den FP melden. :nixweiss:
Garf hat folgendes geschrieben : |
Ein Starter muss sich irgendwann wieder schließen und deshalb prüfen, wann die Anwendung vollständig geladen ist. |
Das ist allerdings eher ein Problem. :?
cu
Narses
Stoney - Mo 14.09.09 15:08
Timosch hat folgendes geschrieben : |
Davon ist abzuraten. Irritierenderweise schlagen bei Exe-Packern häufig Antivirenprogramme Alarm. Sowas lässt sich dem Nutzer schwer vermitteln. |
Ich hatte mit Antiviren-Programmen bisher kaum Probleme.
Nur wenn ich zusätzlich zu UPX noch die von FreePascal mitgelieferte strip.exe bei nonVCL/nonLCL-Anwendungen anwende, erkennt Antivir fälschlicherweise das Programm als Trojaner.
Bernhard138 - Di 15.09.09 06:01
jaenicke hat folgendes geschrieben : |
Die Exe selbst ist doch wohl schnell da bei der Größe von etwa einem MiB, das heißt du kannst den SplashScreen doch ganz normal in deinem Programm selbst anzeigen, dann alles laden und dann den SplashScreen wieder ausblenden.
Das Fenster müsstest du für eine kleine Exe per API anzeigen (nonVCL), dann ist die Exe relativ klein. Aber wie gesagt: bei der Größe deines Programms brauchst du eigentlich gar keine zusätzliche Exe. Oder wie langsam ist das Netzwerk? 1 MiB für die Exe selbst sollte doch blitzschnell geladen sein. |
Eigentlich sollten 1 MB relativ zügig geladen werden, richtig. Das Netzwerk dürfte auch relativ schnell sein (Uni). Ohne mich mit Netzwerken detailliert auszukennen, würde ich meinen, das vor allem die Zahl der separat zur Laufzeit nachzuladenden Dateien (insgesamt 11, meist wenige KB, einige etwas größer, insgesamt ca. 3 MB) eine Rolle spielt. Scheinbar dauert die Vorbereitung/Initiierung jedes Datentransfers auch so seine Zeit. Beim ersten Start insgesamt locker 30-40 sec. Bei jedem folgenden dann erträgliche 10 sec (Cache!?).
jaenicke - Di 15.09.09 06:15
Ja, aber dieses Nachladen solltest du dann einfach erst nach der Anzeige des SplashScreens machen, das meine ich. ;-)
alzaimar - Di 15.09.09 08:03
Bernhard138 hat folgendes geschrieben : |
...etwas träge ist und seine Zeit dauert (Hauptprogramm 1100 KB |
Kopiere die Anwendung nur dann, wenn die im Netz befindliche neueren Datums als die lokale Version ist.
Bernhard138 hat folgendes geschrieben : |
+ Nachladen diverser Datenbankfiles zur Laufzeit). |
Wieso lässt du die nicht im Netz oder verfährst so wie oben? Sind es exklusive Daten, die sich selten ändern und von der Anwendung nicht verändert werden?
Ich sehe keinen Grund, diese "Datenbankfiles" jedesmal aus dem Netz zu laden. Wenn du diese Daten immer mal wieder aktualisierst, denke mal über einen kleinen DB-Server nach, auf dem du die Daten zentral ablegst (MSSQL, Firebird usw)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!