Geschrieben von: Andreas Roth
Kategorie: ASP Tricks
This printed page brought to you by AlphaSierraPapa
Für das Internet werden mittlerweile nicht mehr nur einfache Anwendungen geschrieben - oft ist sehr nützliche Software im Internet zu finden. Daher ist der oft gehörte Wunsch verständlich, diese Applikationen auch Kunden ohne Internetzugang zur Verfügung zu stellen. Mit der Software Intorel ActiveSite Compiler ist es möglich, ein ASP Anwendung als Exe(cutable) weiterzugeben. Hier nun der Bericht, von einem Projekt das den Weg vom Netz auf die Scheibe mit einigen seiner Haken wieder gibt.
Die Firma A. Raymond, Grenoble, stellt Schnellbefestigungen für die Automobilindustrie her. Um die Entwickler unser aller liebsten Kinder, der Fahrzeuge, besser zu unterstützen, wurde ein mehrsprachiger Katalog Online gestellt, der sehr komplexe Recherchemöglichkeiten beinhaltet. Vorbild war eine alte MS-Foxpro Anwendung, die an die Entwickler auf CD Rom versendet wurde. Als zweiter Teil dieser Entwicklung sollte die MS-Foxpro Anwendung selbst ebenfalls abgelöst werden, da mit modernen Systemen teilweise erhebliche Probleme auftraten. Da für das Internet die ganze Anwendung bereits entwickelt und getestet war, lag es nahe, diese Programmierung weiter zu verwenden.
Nach einiger Recherche stieß ich auf den Intorel ActiveSite Compiler, der es erlaubt, ASP Anwendungen zu ausführbaren Dateien zu kompilieren. Die Funktionsweise ist dabei in etwa die folgende: Die Dateien der Anwendung werden, zusammen mit einem kleinen Webserver in eine einzige Datei kombiniert. Beim Start des Executables wird der Webserver ausgeführt, der sich aus der Datei die jeweils aufgerufene ASP Datei in das Temp-Verzeichnis des Windows Verzeichnisses extrahiert, dort ausführt und die Datei anschließend gleich wieder löscht.
Ich kann hier nur vom Funktionsumfang der Vorversion, dem Octopod Weblicator berichten. Die aktuelle Version besitzt eine weitaus größere Zahl an Funktionen und unterstützt auch ASP.NET.
Wie für einen Katalog üblich, galt es, eine große Menge an Information zu hinterlegen. Zu etwa 8.000 Produkten und zur Menüführung gab es jeweils Abbildungen, was eine Flut von ca. 30.000 Dateien zur Folge hatte. Zuviel um sie mit dem Sitecompiler in eine einzelne Datei zusammenzufassen. Der Site-Compiler erlaubt aber auf Wunsch den Zugriff auf Dateien außerhalb des Kompilats.
Auch die Informationen in der Datenbank ließen die MDB auf 16 MB anschwellen. Da Daten für Suchabfragen gespeichert werden, konnte ich Sie auch nicht auf der CD lassen, denn diese ist ja nicht beschreibbar. Um die Datenbank temporär auf die Festplatte zu schreiben sind 16MB jedoch zu viel. Die Lösung für die Datenbank wurde in einem angenehmen Feature der Jet Engine gefunden. In einer MDB kann man Tabellen anderer MDBs verknüpfen, die dann wie eigene Tabellen behandelt werden. Dies geht allerdings nur mit dem Access Frontend und nicht mit der Jet-Engine zur Laufzeit. Jedoch bleiben Verknüpfungen erhalten. Somit bestand der Trick darin, Tabellen, deren Inhalt sich ändert, in eine MDB zu kopieren. Dort wurden Verknüpfungen eingebaut, die auf eine MDB auf der CD verweisen. Diese MDB enthält die Tabellen mit den Produktinformationen, die den meisten Raum einnehmen und sich zur Laufzeit nicht ändern.
Da für Verknüpfungen Pfade gespeichert werden, wurde es darüber hinaus nötig, für jeden möglichen Laufwerksbuchstaben des CD Laufwerks eine solche MDB zu generieren. Auch der spätere Pfad einer solchen Datenbank muß immer der gleiche sein. Ich entschied mich für C:\temp. Soll die Anwendung nun von CD gestartet werden, ist der Bildpfad relativ zum Ausführungs-Ort gleich, die Datenbank wird immer in C:\temp\cdtemp.mdb gesucht. Damit die Bedingungen für die Anwendung stimmen, wird die Anwendung nicht direkt gestartet, sondern über ein VB Programm, das zuerst den Laufwerksbuchstaben bestimmt, gegebenenfalls den "Temp" Ordner anlegt und die MDB mit den richtigen Verknüpfungen dorthin kopiert. Für das Überspielen des Katalogs auf Festplatte wurde eine zweite Anwendung kompiliert, welche die vollständige Datenbank beinhaltet - und die Bilder werden komplett in den dafür angelegten Ordner kopiert.
Dem Kunden wurde eine Anwendung versprochen, die auf allen Windowssystemen ohne Installation läuft. Aus diesem Kontext ergaben sich erhebliche Probleme, denn auch der Sitecompiler hat gewisse Bedürfnisse, im wesentlichen waren dies:
Da diese Komponenten auf den meisten Systemen aber bereits installiert sind, war die Bedingung in 90% aller Fälle erfüllt. Dennoch mußte für die restlichen 10% eine Lösung gefunden werden.
Eine weitere Schwierigkeit bestand darin, daß die CD Rom international lauffähig sein mußte. Gerade mit der Installationsroutine der ursprünglichen CD Rom Anwendung gab es hier Probleme, da diese in Frankreich entwickelt wurde und ohne Rückfrage einige französischsprachige DLLs installiert. Ein Problem, das sich natürlich nicht wiederholen sollte!
Nachdem einige Installer getestet wurden, zeigte sich, daß diese meist ein unerwünschtes Vorgehen zeigen: Sie installieren einfach, selbst wenn es nicht nötig sein sollte. Einzig der Installer von Wise war soweit anpassbar, daß er sowohl die richtigen Komponenten zur Sprache als auch eine Installationsroutine, als auch gegebenenfalls einen direkten Start der Applikation ermöglicht, ohne daß eine Komponente installiert wird. Aus firmenpolitischen Gründen wurde jedoch auf den Einsatz dieser Software verzichtet - sodaß ich gezwungen war, ein eigenes Installations- und Startprogramm zu schreiben.
Visual Basic 5 zeigte sich hier als passendes Werkzeug. Da DLLs, wenn nicht auf dem System installiert, im Verzeichnis der Anwendung gesucht werden, konnte ich eine Ausführung ohne Installation garantieren, indem ich einen Basissatz der zur "Runtime" benötigten DLLs mit in das entsprechende Verzeichnis legte. Es war jedoch nicht möglich die erweiterten DLLs, wie zum Beispiel die Common Controls zu nutzen - das führte zu massiven Konflikten mit evt. vorhandenen Installationen. Systemprogrammierern längst vertraut, gibt es dafür eine passende Bezeichnung: "DLL-Hell".
Das selbstgeschriebene Installationsprogramm prüft nun zuerst auf die Existenz der benötigten Klassen und Schnittstellen und bietet gegebenenfalls die Installation an. Die 3 Dateien waren jeweils für die 4 Basissprachen auf der CD-Rom, ein Link für das Laden besagter Dateien direkt von Microsoft wurde für weitere Sprachen angeboten.
Um der CD-Rom ein eigenes Logo zu geben, braucht man eine *.ico Datei mit dem gewünschten Icon. Dann schreibt man in das Wurzelverzeichnis der CD-Rom eine Textdatei: Autorun.inf, die folgenden Aufbau hat:
[autorun] open={relativer Pfad zur Anwendung, die automatisch gestartet werden soll} Icon={ relativer Pfad zum Icon, das als CD Logo angezeigt werden soll},0
Wise Installer ist kein günstiges Programm, aber es ist um einiges billiger als ein Entwickler, der das Rad neu erfindet.
Besorgen Sie sich gleich zu Beginn einen schnellen Brenner und einen 200er Pack Rohlinge. Drücken Sie all Ihren Freunden, Verwandten und Bekannten eine Kopie der Beta in die Hand und bitten sie diese Menschen mögen die CD auf allen ihnen verfügbaren Systemen einlegen und ausprobieren. Besonders Freunde im Ausland sind willkommen.
Eine CD kann nicht mehr geändert werden, wenn Sie erst einmal gepresst ist. Deshalb muß jede Möglichkeit ausgeschöpft werden, Probleme zu finden, bevor der Master (eine ganz normale, gebrannte CD) zum Dienstleister geschickt wird, der sich um die Pressung kümmert.
Es ist faszinierend, welche Möglichkeiten sich ergeben, wenn man Webanwendungen für das Internet weitergibt. Demoversionen von Online-Produkten, Katalogysteme wie Rasch Safix, oder aber Wissensdatenbanken. Das Projekt hat gezeigt: Es ist möglich und gar nicht allzu schwer, ASP Anwendungen auf die Silberscheibe zu bringen.
This printed page brought to you by AlphaSierraPapa
Intorel ActiveSite Compiler
http://www.intorel.com/sitecomp/
©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.