AppLoader

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:

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:

Zusammenfassend sind das die Anforderungen an den AppLoader:

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.

Download

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:   Ordnerbin   Ordner für Ihre Programm- und Daten-Dateien
  Dateivb5prog.exe   Hauptprogramm geschrieben in Visual Basic
Ordnersetup   Setup-Ordner, für den Fall der Fälle...
  Dateisetup.exe   Setup-Programm aus PWD
  Dateisetup.cab   Cabinet-Datei, mit der komprimierten Runtime
  Dateisetup.lst   Steuerdatei für AppLoader und Setup
Dateistart.exe   AppLoader
Dateiautorun.inf   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.

***

©2004 WW-Anwendungsentwicklung