Die Fakten
VB-Programme benötigen eine Runtime.
VB-Programme benötigen die Runtime in der
richtigen Version.
Seit es VB gibt, benötigen die mit dieser
Programmiersprache erstellten Programme eine Runtime Bibliothek. Mit
jeder neuen VB-Version kam auch eine neue Runtime Version die nicht
mehr abwärtskompatibel zur Vorgängerversion war. Darüber hinaus gibt
es noch unterschiedliche Versionen die aus den diversen SP entstanden.
Bis zu VB4 reichte es in der Regel noch, wenn die Runtime-DLL im
gleichen Verzeichnis mit dem VB-Programm abgelegt wurde. Auch VB5 ohne
SP kommt noch mit diesem Verfahren aus, sofern sie nicht ein uraltes
Windows 95 verwenden. Wenn Sie allerdings ein Programm mit VB5-SP2
erstellen und auf dem Zielrechner befindet sich im System-Verzeichnis
die ursprüngliche Runtime (ohne SP), beginnen die Probleme: Ihr
Programm verweigert den Dienst. Viel schlimmer wurde es mit VB6. Neben
der Runtime, werden diverse aktuellere OLE-Automatisierungsdateien
benötigt, die selbst ein Windows 98 nicht von Haus aus mitbringt.
Verwendet man im Programm auch noch zusätzliche Steuerelemente oder
OLE-DLLs, reicht es nicht aus wenn diese Dateien vorhanden sind, sie
müssen auch noch registriert sein. Zu Recht behaupten deshalb viele
Kollegen in diversen Newsgroups, dass ein VB-Programm nicht ohne Setup
auslieferbar sei und somit ein VB-Programm dass direkt von CD-ROM
startet Utopie ist. Dem möchte ich in diesem Artikel widersprechen,
ich behaupte: sofern die Voraussetzungen für ein VB-Programm auf
dem Zielrechner gegeben sind, sprich Runtime und
Zusatz-Steuerelemente liegen in der richtigen Version vor und sind
registriert, können sie ihr Programm von jedem beliebigen Laufwerk
starten. Das schließt natürlich auch eine CD-ROM ein. Den Beweis
dafür liefert uns Microsoft® mit dem
Installationsassistenten, der für VB geeignete Setups erstellt. Ein
mit diesem Werkzeug erstelltes Installationsprogramm beinhaltet genau
genommen zwei Programme: setup.exe und setup1.exe. Das Zweite
ist selber eine VB Anwendung die zur Ausführung natürlich auch die
unerlässliche Runtime benötigt. Dafür sorgt jedoch setup.exe
indem es alle nötigen Vorinstallationsdateien aus dem Abschnitt [BOOTSTRAP]
der setup.lst Konfigurationsdatei installiert.
setup.exe - die Lösung?
Nun könnte man leicht auf den Gedanken kommen dieses Prinzip auch bei der eigenen Anwendung zu verwenden. Zum eigentlichen Programm könnte man noch zusätzlich die setup.exe, setup.lst sowie die zur Installation nötigen Vorinstallationsdateien auf die CD-ROM packen. Der User würde grundsätzlich im Root-Verzeichnis die Datei setup.exe starten, bzw. würden wir die autostart.ini so abändern das beim Einlegen der CD-ROM diese EXE gestartet wird. Das Programm prüft nun ob die Dateien im Abschnitt [BootStrap] der setup.lst vorhanden sind und aktualisiert wenn nötig das System des Users. Eine kleine Anpassung in der setup.lst hätte zur Folge dass setup.exe nicht wie vorgesehen setup1.exe sondern die Haupt-Anwendung startet. Prinzipiell schaffen wir so die Voraussetzungen für jede VB-Anwendung. Es gibt aber auch erhebliche Nachteile die diesen Weg in Frage stellen:
Beim Start von setup.exe erscheint ein Fenster mit dem Hinweis dass gerade Initialisierungsdateien kopiert werden. Wenn die DLLs auf dem Zielsystem aktuell sind, wird zwar nichts kopiert, jedoch ist alleine schon dieses Fenster für unser Vorhaben störend. In der VB6-LST kann man immerhin den Text für Meldung und Fenstertitel ändern.
Durch die Änderung der Zeile
Setup=setup1.exe in Setup=irgendwas.exe (in der VB5
Konfigurationsdatei setup.lst) kann zwar ein beliebiges
Programm gestartet werden, setup.exe bleibt aber im Speicher
und wird erst beendet wenn auch die aufgerufene Haupt-Anwendung
geschlossen wurde.
Sollte setup.exe tatsächlich fehlende oder veraltete Dateien finden, werden diese ohne eine weitere Nachfrage installiert oder zumindest ein Installationsversuch unternommen. Dieser wird allerdings scheitern wenn die zu ersetzenden Dateien gerade in Verwendung sind oder Administratoren-Rechte vorausgesetzt werden.
Unabhängig von der DLL Aktualisierung, werden bereits beim Start von setup.exe diverse temporäre Dateien angelegt. Diese Dateien werden zwar beim Beenden des Programms wieder entfernt, dennoch ist es nicht in Ordnung dem Anwender zu suggerieren dass er lediglich eine Anwendung von CD startet, im Hintergrund aber reges Treiben auf seiner Festplatte herrscht.
Zusammenfassend muss man wohl sagen, dass dieser Ansatz nicht verwendbar ist.
Die Überlegungen auf der letzen Seite haben uns immerhin gezeigt worauf es ankommt: wir benötigen ein möglichst schnelles Programm dass die Voraussetzungen für eine VB-Anwendung auf dem Zielrechner prüft. Dieses Programm, wir wollen es AppLoader nennen, sollte ohne Runtime auskommen oder zumindest problemlos von CD-ROM startbar sein. Dafür bieten sich folgende Möglichkeiten an:
VB5 ohne SP mit der Runtime MSVBVM50.DLL
im Anwendungsverzeichnis.
Die MSVBVM50.DLL ist zudem bei vielen Windows-Installationen
bereits dabei. Unter ganz alten WIN95 Rechner kann es aber Probleme
geben. Des weiteren muss man natürlich eine gültige VB5 Lizenz
besitzen um den AppLoader inkl. Runtime zu vertreiben
VB4-32 mit der Runtime VB40032.DLL im Anwendungsverzeichnis. Diese Lösung scheint machbar, erfordert jedoch auch eine VB4-Lizenz. Das Starten vom AppLoader inkl. Runtime (>700 KB) von CD-ROM wird aber einige Zeit in Anspruch nehmen und somit den Start der Haupt-Anwendung verzögern
Runtime freie Sprachen wie C, Delphi, PowerBasic usw. erzeugen ausreichend schnelle Programme und starten direkt von CD-ROM
Zusammenfassend sind das die Anforderungen an den AppLoader:
das Programm muss problemlos von CD-ROM starten und sollte möglichst klein (die Ladezeiten von CD-ROM fallen auch bei aktuellen Laufwerken ins Gewicht) und schnell sein
er muss das Vorhandensein bestimmter Dateien prüfen und deren Versionen verifizieren
wenn die Prüfung erfolgreich ist, muss er die Haupt-Anwendung starten und sich selbst beenden
bei fehlenden Dateien oder alten Versionen soll er zumindest den Benutzer benachrichtigen und gegebenenfalls die Aktualisierung der fehlenden Dateien anbieten
ist der Benutzer mit der Aktualisierung
einverstanden, muss er ein entsprechendes Setup von der CD-ROM
starten
Wir haben einen AppLoader entwickelt, der diese Anforderungen erfüllt und möchten Ihnen dieses Programm auf den folgenden Seiten vorstellen. Das Programm ist in PowerBasic geschrieben, benötigt also keine Runtime und kann sich von der Leistung mit jedem C-Programm messen. Damit Sie einen Einblick in die Software bekommen, bieten wir Ihnen auch einen kompatiblen VB4-Quellcode an. Das hier vorgestellte Programm befindet sich in einem einzigen VB4 kompatiblen Modul. Mit VB4 können Sie dieses Modul natürlich erweitern oder ändern. Kompiliert ergibt es den VB4-AppLoader den Sie zusammen mit Ihrer Haupt-Applikation auf CD-ROM vertreiben können. WW-A bietet Ihnen alternativ den AppLoader als PowerBasic Variante. Der Programmablauf ist größtenteils identisch, unter PB haben wir die hier gegebenen Möglichkeiten ausgeschöpft um das Programm möglichst effektiv zu gestalten.
Funktionsweise
Der AppLoader wird ebenfalls wie ein VB-Installationsprogramm von der setup.lst Konfigurationsdatei gesteuert. Dazu wird diese Datei mit den Abschnitten [Duty] und [AppLoader] erweitert.
Der Abschnitt [Duty]. Ähnlich wie im
Abschnitt [BootStrap] sind hier alle Vorinstallationsdateien
aufgeführt die zur Ausführung der VB Anwendung unerlässlich sind. Der
Aufbau der einzelnen Zeilen ist identisch mit den Zeilen aus dem
Abschnitt [BootStrap]. Es liegt bei Ihnen welche Dateien Sie
als erforderlich ansehen. Der Optimist kommt an dieser Stelle sogar
nur mit der Zeile MSVBVMxx.DLL aus, in der Annahme dass die
Runtime Datei, sofern vorhanden, mit einem regulärem Setup installiert
wurde. Der Pessimist kopiert den ganzen [BootStrap]-Abschnitt.
Sofern Ihre Anwendung noch zusätzliche Abhängigkeiten erfordert,
erstellen Sie mit dem VB-Installationsassistent ein reguläres Setup
und kopieren daraus die Zeilen aus den Abschnitt [Files] bzw. [Setup1
Files]. Achten Sie darauf dass die Zeilen fortlaufend durchnummeriert
sind.
Der Abschnitt [AppLoader] steuert das Programm wie folgt:
ShowBadFiles=1 oder 0 - zeigt an ob die fehlenden oder
veralteten Dateien angezeigt werden
Install=setup\setup.exe - relativer Pfad zum Setup-Programm
AppExe=bin\programm.exe - relativer Pfad zur Haupt-Anwendung
Der AppLoader prüft die Umgebung anhand der Dateiliste im Abschnitt [Duty].
Wenn die Voraussetzungen für das VB-Programm erfüllt sind, wird das
Programm aus "AppExe" aufgerufen. Andernfalls wird eine Meldung
ausgegeben die besagt dass Dateien auf dem Zielrechner aktualisiert
werden müssen und bietet an dies durchzuführen. Ist der Anwender damit
einverstanden, wird das Programm aus "Install" aufgerufen. Dieses
Programm kann auch die setup.exe aus einem
VB-Installationsprogramm sein.
Versionstabellen
Auf der vorherigen Seite haben wir angedeutet dass ein VB-Programm im Prinzip einzig und alleine mit der MSVBVMxx.DLL auskommt. Das gilt natürlich nur für ein nacktes Programm das keine weiteren DLLs oder Zusatzsteuerelemente enthält. Allerdings hat die MSVBVMxx.DLL auch ihre Abhängigkeiten die für die ordnungsgemäße Funktion nötig sind. Folgende Tabelle gibt einen Einblick in die Abhängigkeiten:
| Dateiname | Visual Basic 5 | Visual Basic 6 | ||||
| Microsoft 1 | PWD SP0 | PWD SP3 | Microsoft 2 | PWD SP0 | PWD SP5 | |
| MSVBVM50.DLL | 05.00.8244 | 5.0.37.24 | 5.2.82.44 | |||
| MSVBVM60.DLL | 6.0.89.64 | 6.0.81.76 | 6.0.89.64 | |||
| OLEAUT32.DLL | 2.20.4118 | 2.20.4054.1 | 2.20.4118.1 | 2.40.4275.1 | 2.30.4261.1 | 2.40.4275.1 |
| OLEPRO32.DLL | 5.0.4118 | 5.0.4055.1 | 5.0.4118.1 | 5.0.4275.1 | 5.0.4261.1 | 5.0.4275.1 |
| STDOLE2.TLB | 2.20.4118 | 2.20.4054.1 | 2.20.4118.1 | 2.40.4275.1 | 2.30.4261.1 | 2.40.4275.1 |
| ASYCFILT.DLL | 2.20.4118 | 2.20.4056.1 | 2.20.4118.1 | 2.40.4275.1 | 2.30.4261.1 | 2.40.4275.1 |
| COMCAT.DLL | 4.71 | 4.71.1441.1 | 4.71.1441.1 | 4.71.1460.1 | 4.71.1460.1 | 4.71.1460.1 |
| VB5STKIT.DLL 3 | 5.0.37.16 | 5.0.0.3905 | ||||
| VB5DE.DLL 4 | 5.0.37.24 | 5.0.37.16 | ||||
| VB6STKIT.DLL 3 | 6.0.81.69 | 6.0.84.50 | ||||
| VB6DE.DLL 4 | 5.0.81.69 | 6.0.89.88 | ||||
| CTL3D32.DLL 5 | 2.31.0.0 | 2.31.0.0 | ||||
1) Quelle: Microsoft® Knowledge
Base Article - D44967
2) Quelle: Microsoft® Knowledge Base Article - D192461
3) Diese Datei wird nur vom VB-Installationsprogramm
benötigt, nicht in [Duty] aufnehmen!
4) Visual Basic Environment, ist nicht zwingend nötig
5) Diese Datei wird nur unter NT3.51 benötigt, nicht
in [Duty] aufnehmen!
Code Beschreibung
Die Anwendung startet mit der Prozedur Main aus dem VB4-Modul vb4.bas. Es werden zunächst einige Pfade ermittelt wie der Anwendungspfad, Pfad zum Windows- und System-Verzeichnis und der Pfad zur setup.lst. Da der Aufbau der LST-Datei wie der einer INI-Datei ist, können die einzelnen Zeilen des [Duty] Abschnittes in einer Do/Loop Schleife mittels der API-Funktion GetPrivateProfileString gelesen werden. Aus der gelesenen Zeile werden Dateiname, Zielpfad und Dateiversion entnommen und in einer UDT-Variable abgelegt. Nach dem Einlesen einer Zeile wird sofort geprüft ob die entsprechende Datei auf dem Zielsystem in der passenden oder neueren Version vorhanden ist. Sofern diese Prüfung keine gültige Datei findet werden die UDT-Variablen in einem Array gesammelt.
Nachdem alle Zeilen in der LST-Datei abgearbeitet sind, wird geprüft ob sich im Array Elemente angesammelt haben. Ist das Array leer (alle Dateien wurden gefunden) wird der Pfad mit Dateiname der Haupt-Anwendung aus der LST-Datei mittels GetPrivateProfileString gelesen und mit dem Shell-Aufruf gestartet. Der AppLoader beendet sich.
Sollten sich im Array "schlechte" Elemente finden,
wird zunächst die Einstellung ShowBadFiles aus der LST-Datei
gelesen und entsprechend die Fehlermeldung vorbereitet.
ShowBadFiles entscheidet ob die Dateien in der Fehlermeldung
angezeigt werden. Nach der Anzeige der Fehlermeldung kann der Anwender
entscheiden ob er das Problem beheben, ignorieren oder die Aktion
abbrechen will. Entscheidet er sich für die Aktualisierung der
problembehafteten Dateien, wird aus der LST-Datei Pfad und Dateiname
der Setup-Anwendung gelesen. Mit der Funktion Shell wird dieses Setup
gestartet.
Je nach VB-Version können Sie für das Setup unterschiedliche Wege wählen. Zum Teil finden Sie in diversen Computer-Fachzeitschriften Mini-Setups die lediglich die Runtime installieren. Auch auf VB Internet-Seiten können Sie fündig werden. Testen Sie jedoch diese Installationsprogramme gründlich auf allen Betriebsystemen bevor Sie sich für eines entscheiden. Alternativ können Sie natürlich auch das VB-Installationsprogramm verwenden. Eventuell benötigen Sie nur den ersten Teil, die setup.exe die lediglich die Dateien aus dem [BootStrap] Abschnitt installiert. Sie müssen dem VB5 setup.exe unbedingt ein weiteres Programm anbieten das an Stelle von setup1.exe ausgeführt wird, da es sonst zu einen Fehler kommt. Dieses Programm darf ohne weiteres in VB geschrieben sein (weil zum Zeitpunkt des Aufrufes die Runtime bereits installiert ist) und braucht nur eine Status-Meldung anzeigen.
Der AppLoader ist Open Source und darf frei verwendet werden. Sowohl die Quellcodes als auch die fertige Exe dürfen Sie für private als auch für kommerzielle Projekte verwenden. Bitte beachten Sie jedoch, dass wir keinen Support für dieses Programm gewähren. Den AppLoader verwenden Sie auf eigene Verantwortung. Wir haften nicht für eventuelle Schäden die Ihnen oder Ihren Kunden durch die Benutzung des Programms entstehen sollten. Sollten Sie den AppLoader verwenden, weiterentwickeln usw. dann denken Sie daran dass die Hinweise auf WW-Anwendungsentwicklung erhalten bleiben müssen. Eine Veröffentlichung des Codes muss ebenfalls den Bestimmungen quelloffener Software genügen. Wir würden uns auch über Ihr Feedback freuen. Ihre Änderungen und Erweiterungen können wir auf dieser Seite publizieren.
| Dateiname | Größe | Beschreibung |
| start.exe | 26 KB | AppLoaderStd - PowerBasic Programm |
| vb5.lst | 2 KB | Muster LST-Datei für das Prüfen von
Start-Voraussetzungen für Programme die Sie mit VB5 erstellt
haben. Bitte benennen Sie diese Datei nach dem Download um
in setup.lst. Datei im Browser anzeigen. |
| vb6.lst | 2 KB | Muster LST-Datei für das Prüfen von
Start-Voraussetzungen für Programme die Sie mit VB6 erstellt
haben. Bitte benennen Sie diese Datei nach dem Download um
in setup.lst. Datei im Browser anzeigen. |
| vb4.bas | 15 KB | VB4 Modul, der Quell-Code kann zum Einsehen und Test natürlich auch ohne Änderung in VB5 oder VB6 geöffnet werden. Ein AppLoader sollte aber keinesfalls mit VB5 oder VB6 erstellt werden. |
| vbcd.bas | 15 KB | PB Modul, der Quell-Code für PoverBasic, fertig kompiliert siehe oben: start.exe |
| Und so könnte die Verzeichnisstruktur Ihrer CD-ROM mit AppLoader aussehen: |
|
Ordner für Ihre Programm- und Daten-Dateien | |||
|
|
Hauptprogramm geschrieben in Visual Basic | ||||
|
|
Setup-Ordner, für den Fall der Fälle... | ||||
|
|
Setup-Programm aus PWD | ||||
|
|
Cabinet-Datei, mit der komprimierten Runtime | ||||
|
|
Steuerdatei für AppLoader und Setup | ||||
|
|
AppLoader | ||||
|
|
Konfigurationsdatei für Autorun | ||||
Links
Für die verlinkten Seiten und deren Inhalt ist WW-Anwendungsentwicklung nicht verantwortlich. Der Inhalt oder der Link selber könnten sich ändern. Wir kontrollieren zwar regelmäßig diese Verknüpfungen haben aber keinen Einfluss auf deren Inhalt oder Aktualität. Dankbar sind wir jedem Leser dieser Seite der uns drauf aufmerksam macht dass sich an der Qualität der verlinkten Seiten was ändert.
EnumModules listet laufende Prozesse und
ihre zugehörigen Module auf. Man sieht auf einen Blick welche DLL
(inkl. Pfad und Versions-Info) von welchem Prozess gerade verwendet
wird. Dieses Programm eignet sich hervorragend zum ermitteln der
Abhängigkeiten Ihrer VB-Anwendung.
http://www.fantastic-bits.de/frames.html
![]()
Auf den Seiten von Microsoft finden Sie diverse
Artikel zur Installation der Runtime für VB5 und VB6:
Microsoft® Knowledge Base Article - D44967: Msvbvm50.exe installiert
Visual Basic 5.0-Laufzeitdateien
Microsoft® Knowledge Base Article - D192461: VBRun60.exe installiert
Visual Basic 6.0-Laufzeitdateien
http://support.microsoft.com/default.aspx
![]()
Sie kennen auch eine Seite die inhaltlich zu dem Thema VB-Runtime passt? Mailen Sie uns die Internet-Adresse. Sofern der Inhaber der Seite damit einverstanden ist, nehmen wir den Link gerne auf.
***