|
|
|
|
Setup Erstellung mit InnoIm Original erschienen Access-Report
Nr. 3 + 4 von Karl Donaubauer. Inzwischen überarbeit und erweitert. Der Setup-Assistent in der Developer-Version von Office taugt leider seit der Version 97 nicht mehr viel. Eine der oft genannten Alternativen ist das Freeware-Tool Inno-Setup. Hier ein Überblick über Bedienung und Möglichkeiten von Inno basierend auf der Version 2.0.19. Inzwischen ist schon Version 5 mit mehreren Beta-Versionsständen veröffentlich, was aber am grundsätzlichen nichts ändern und allenfalls weitere Verbesserungen gebracht hat. In den Newsgroups (NG) zu Access findet man immer wieder Fragen zur Setuperstellung. Häufig im Zusammenhang mit dem Erstellen einer Runtime-Installation. Da gibt es Probleme mit dem Setup-Assistenten der ODE oder die erzeugten Setups funktionieren nicht wie gewünscht. In den Antworten kommt dann oft der Hinweis, "Inno" zu verwenden, und Links auf Artikel aus der Knowledgebase von Microsoft. Eine Übersicht der wichtigsten Artikel zur ODE habe ich hier auf meiner Homepage zusammengestellt. Dieser Artikel soll einen Überblick geben, was Inno ist, was man damit machen kann und wie man damit arbeitet. Selbstverständlich können dabei nicht alle Aspekt im Detail besprochen werden, so dass man um das Studium der Inno-Hilfe nicht ganz herum kommen wird. Access-Entwickler können mit Inno für ihre Applikation ein professionelles Setup erstellen, das bei der Weitergabe mehr Eindruck macht als eine gezippte MDE-Datei. Solange Sie lediglich die Applikations-MDE weitergeben wollen ist Inno auch für alle Access-Versionen gleich gut geeignet. Soll mit dem Setup auch eine Runtime-Installation erfolgen, so ist die Eignung momentan auf Access 97 eingeschränkt. Dies liegt vor allem daran, dass Access 97 noch ohne den Windows-Installer auskommt und so die benötigten Dateien recht einfach ermittelt werden können. Einen kleinen Hinweise zu neueren Access-Versionen gibt es am Ende des Artikels.
Inno und seine FeaturesInno Setup ist ein Installer für Windowsprogramme von Jordan Russell. Basierend auf einem Skript wird ein Setup-File im EXE-Format erzeugt. Die Software ist nur per Download verfügbar. Inno Setup ist Freeware, also kostenlos. Dies gilt auch für den kommerziellen Einsatz. Für Interessierte ist zudem der Delphi-Sourcecode frei erhältlich. Der Support erfolgt ausschließlich über Newsgroups in englischer Sprache. Die Anfragen werden in der Regel schnell und kompetent beantwortet. Hier die wichtigsten Features im Überblick:
Trotz dieser vielen Möglichkeiten bleiben noch Wünsche offen. Dies kann Inno bisher (noch) nicht. Einige Punkte stehen aber schon auf der Wunschliste für kommende Versionen.
Tools und ErgänzungenZu Inno gibt es verschiedene Tools und Ergänzungen. Dies sind zum einen Skripteditoren und zum anderen allgemeine Erweiterungen. Wie Inno selbst, sind auch diese Ergänzungen Freeware und somit kostenlos erhältlich. Hier eine Auflistung der wichtigsten.
InstallationInno selbst kommt als EXE-File, das natürlich mit Inno erstellt wurde. Man erhält somit während der Installation bereits einen Eindruck wie das, was man selbst noch erstellen möchte, später dann mal aussehen wird. Installiert wird die Anwendung, einige Hilfedateien und drei sehr einfache Beispiele. Damit kann man dann schon loslegen.
Die Programmoberfläche ist recht spartanisch gehalten und nur in englisch verfügbar, was aber bei den wenigen Menüpunkten kein Problem darstellt. Im Prinzip ist die Programmoberfläche ja nur ein einfacher Texteditor in dem das Skript erstellt wird. Außer der Hilfe gibt es keine weiteren Hilfsmittel oder Assistenten. Wer es komfortabler möchte, kann für die Skripterstellung auch einen speziellen Editor wie ISTool verwenden. Dies kann ich auf Grund der sehr vielfältigen Optionen wirklich empfehlen. Besonders ISTool unterstützt hier sehr gut durch kontextsensitive Hilfe und Kontextmenüs über die rechte Maustaste. Die Texte für die Oberfläche des Setups und die Dialoge, die später der Anwender sieht, sind in einer separaten Sprachdatei untergebracht. Inno liefert hier nur die englische Version mit. Wer eine andere Sprache möchte, muss sich die passende Sprachdatei downloaden. Die gewünschte Sprache wird später im Skript angegeben. Einzelne Elemente der Sprachdatei können individuell über das Skript angepasst werden, ohne dass dazu die Sprachdatei editiert werden muss. Details dazu gibt’s weiter unten. Das SkriptEin Inno Setup ist ein einfaches ASCII-Textfile das ähnlich wie eine INI-Datei aufgebaut ist. Darin gibt es Sektionen, deren Namen in eckige Klammern [] eingeschlossen sind. Innerhalb dieser Sektionen wiederum gibt es Schlüsselworte und Anweisungen die vom Compiler gelesen und umgesetzt werden. KommentareZur besseren Übersicht kann das Skript auch mit Kommentaren versehen werden. Diese beginnen mit einem Semikolon am Zeilenanfang und können an jeder beliebigen Stelle im Skript platziert werden. Jede Kommentarzeile benötig ein eigenes Semikolon, Blockkommentare sind nicht möglich. Kommentare können auch nicht mitten in einer Zeile z.B. nach einer Anweisung beginnen. Der Compiler lässt dies zwar zu, es führt aber zu einem Fehler wenn das Setup später ausgeführt wird. SektionenDie Reihenfolge der Sektionen im Skript ist beliebig. Alle Sektion, mit
Ausnahme von [Setup] sind optional. Die Schlüsselworte und Anweisungen in den
Sektionen bestimmen Aussehen, Verhalten und Inhalt des Setup. Schlüsselworten
wird mit einem Gleichheitszeichen (=) ein Wert zugewiesen.
Die Sektionen im Überblick
Inno arbeitet innerhalb des Skripts mit einer Vielzahl von vordefinierten
Konstanten die in der Regel Pfade beinhalten. Die Schreibweise ist {Name}.
Sie können an jeder beliebigen Stelle im Skript eingesetzt werden. Einige
Konstanten, wie {app} und {group}, können / müssen in der Setup-Sektion mit
benutzerspezifischen Werten vorbelegt werden. Siehe dazu die Beispiele in den
Skripten. Hier einige Beispiele. Eine komplette Aufstellung ist wiederum in der Hilfe enthalten.
Skript-BeispieleNun zur Praxis. Wie beginnt man? Am einfachsten mit einem der mitgelieferten Beispiele. Dazu wird Inno über Start -> Programme -> Inno -> Inno Setup Compiler gestartet und über den Open Dialog ein Beispiel ausgewählt. Die nachfolgende Tabelle zeigt das mitgelieferte Beispiel "Sample1.iss", das ich mit Erläuterungen versehen habe.
Ein Klick auf die Schaltfläche "Compiler" erstellt sofort das Setup und bietet dieses anschließend zur Testinstallation an. Probieren Sie es aus. Es werden nicht mehr als die 3 Dateien installiert und das Ganze lässt sich ja rückstandsfrei wieder entfernen. Ein Blick in die Hilfe zeigt schnell, dass sich viele Parameter mit
umfangreichen Optionen und Flags ergänzen lassen. Dies kann einen, zugegeben, zu
Beginn schon abschrecken. Aber mit Hilfe eines guten Skripteditors, wie z.B.
ISTool, behält man den Überblick und nach einer Stunde Einarbeitung sind die
wichtigsten Funktionen klar. Als Anregung habe ich hier in der folgenden Tabelle noch einige Beispiele von wichtigen und interessanten Schlüsselworten und Anweisungen der einzelnen Sektionen zusammengestellt.
Abb. 3 Auswahl des Setup-Typs und der Komponenten entsprechend dem obigen Beispiel
Abb. 4 Auswahl der zusätzlichen Tasks entsprechend dem obigen Beispiel Abschließend noch ein Hinweis zur Syntax. Die Werte der Parameter sind typischerweise von Anführungszeichen (" ") umschlossen. Diese Syntax ist optional. Es funktioniert auch ohne Anführungszeichen. Werden jedoch Anführungszeichen oder Semikolons innerhalb eines Wertes benötigt, so müssen Anführungszeichen verwendet werden. Um beispielsweise ein Anführungszeichen einzuschließen, muss dieses verdoppelt werden. ISTool nimmt einem auch hier die Arbeit ab und macht dies automatisch. Die RuntimeerstellungNachdem wir im oberen Teil den Leistungsumfang von Inno und den prinzipiellen Aufbau eines Skriptes besprochen haben, wollen wir uns jetzt der Erstellung eines Skriptes für eine Access 97 Runtime-Installation und den damit verbundenen Problemen widmen. Rechtliche AspekteWer Access-Anwendungen mit dem Runtime-Modul weitergeben möchte, benötigt dazu eine entsprechende Lizenz. Diese ist sowohl bei der Office-Developer-Version (ODE) des Office-Paketes als auch bei den Office-Developer-Tools als Add-On zum Office-Professional-Paket enthalten. Die Access 97 Online-Hilfe (OH) enthält unter der Überschrift "Dateien, die Sie mit Ihrer Laufzeitanwendung vertreiben dürfen" eine Aufstellung dieser Dateien sowie den folgenden Hinweis: "Informationen zu den Dateien, die Sie nicht mit Ihren Anwendungen vertreiben dürfen, sowie zu anderen Aspekten der Lizenzierung finden Sie in Ihrem Lizenzvertrag". Weitere Informationen finden sich auch in der Onlinehilfe unter "Dateien, die Sie mit Ihrer Laufzeitanwendung vertreiben dürfen" sowie in der Datei Odeeula.txt. Leider ist dies nur ein Teil der Wahrheit.
Der Setup-Assistent der ODE packt noch einige weitere Dateien, wie ASYCFILT.DLL und STDOLE2.TLB etc. mit in das Setup, die ebenfalls nicht in der Odeeula.txt enthalten sind. Davon sind sicherlich einige nur für das Setup selbst erforderlich, andere dienen dazu, das Betriebssystem, speziell die OLE-Dateien upzudaten. Wer OLE benötigt, sollte hier immer die aktuellsten Treiber mit in sein Setup integrieren. Leider gibt es keine vollständige, mir bekannte, Dokumentation hinsichtlich der Bedeutung und Verwendung der einzelnen Dateien. Ein wenig Licht ins Dunkel kann man mit der "DLL Help Database" http://support.microsoft.com/servicedesks/fileversion/dllinfo.asp von Microsoft bringen. Außer der Info, welches Programm denn nun welche Version mitgebracht hat, gibt es teilweise noch Hinweise zur Bedeutung. Auch auf http://faqs.org.ru/progr/database/ode.htm gibt’s Infos zu einzelnen Dateien, aber leider nur in russisch L. Also, wie Sie selbst erkennen können, so ganz klar und eindeutig ist das alles nicht. Letztlich bleibt es doch an Ihnen, zu entscheiden, ob Sie eine Datei mitgeben oder nicht. Recht klar ist aber, was nicht weitergegeben werden darf. Dazu gehören:
Weitere wichtige Aspekte
Die ActiveX-ProblematikDieses, nicht nur auf die Distribution mit dem Runtime-Modul bezogene Phänomen zeigt sich als Error 429 "Objekterstellung durch Active-X-Komponente nicht möglich" bzw. Error 438 "Objekt unterstützt diese Eigenschaft oder Methode nicht". In der Regel stimmen dann die Verweise nicht, eine DLL- oder OCX-Datei fehlt, wurde nicht korrekt registriert oder das Zielsystem enthält eine neuere Version der ActiveX-Komponente. Das Ergebnis ist in jedem Fall gleich unangenehm. Ein TreeView bleibt leer oder es hagelt unerklärliche Fehlermeldungen. Denn, wenn auch nur eine Referenz nicht stimmt, dann denkt Access, dass alle Referenzen nicht mehr stimmen. So ist auch erklärbar, warum plötzlich Fehlermeldungen wie "Funktion Left() in Ausdruck xyz ist nicht bekannt" entstehen, obwohl die VBA-Bibliotheken korrekt registriert sind. Über Abhilfemaßnahmen wurde schon viel diskutiert, man könnte dazu sicherlich einen eigenen Artikel verfassen. Recht erfolgreich sind hier Lösungen, die auf das ActiveX verzichten und direkt mit API arbeiten, so wie es vielen Lesern vom File-Dialog her bekannt sein dürfte. Ähnlich problematisch wie der File-Dialog sind TreeView und ListView. Lange hatte ich das Gefühl, dass es eher Glückssache sei, wenn die beiden auf einem Kundenrechner funktionieren. Eine Untersuchung hat dann ergeben, dass sich auf fast jedem PC andere Versionen der benötigten Dateien befinden. Dies kommt vermutlich daher, dass Dateien wie die comcat.dll oder Comctl32.ocx von vielen Programm mitgebracht und installiert werden. Dies hat mich zu folgender Überlegung veranlasst: Mehrere Office-Versionen auf einem PCAuch dieses Thema ist ein Dauerbrenner in den Newsgroups. Wie man das zu
Hause macht, dürfte inzwischen wohl bekannt sein. Die zwei wichtigsten Punkte:
installiere die niedrigste Office-Version zuerst, und jede Office-Version erhält
ihr eigenes Installationsverzeichnis. Dennoch stellt man fest, dass sich Access
97 und die neueren Ausgaben immer wieder in die Quere kommen. Dies liegt daran,
dass alle Access-Versionen ab Access97 versuchen, sich bei jedem Aufruf neu zu
registrieren.
Besonders interessant sind die Ausführungen von Michael Kaplan. Er hat
festgestellt, dass die permanente Registrierung über die Datei MSACCESS.SRG führt.
Access schreibt über diese Datei eine Unzahl von Einträgen in die Registry. Die
meisten davon nach HKEY_CLASSES_ROOT. Der entscheidende aber ist "HKEY_CLASSES_ROOT
-> Access.Database -> CurVer", der die zuletzt verwendete Access-Version
enthält. Für Access 97 lautet der Eintrag dann "Access.Application.8" für Access
2000 "Access.Application.9" und für Access 2002 "Access.Application.10". Wer
mehrere Access-Version auf seinem PC parallel installiert hat, wird schon
festgestellt haben, dass immer, wenn Access 97 aktiv war, Access 2002 (oder
2000) zuerst den Windows-Installer anwirft, um die Registrierung wieder auf sich
selbst umzulenken. Access 97 macht das zwar auch, aber nicht so offensichtlich,
da es noch aus der Zeit vor dem Windows-Installer stammt.
Probleme bei der InstallationGrundsätzlich können bei der Installation einer Runtime-Applikation alle
Probleme auftreten, die auch bei der Installation von Office bzw. Access
auftreten können. Diese sind weitgehend in der KB und in Karl Donaubauers
Access-FAQ dokumentiert. Eine Übersicht der wichtigsten Artikel aus der
englischen und deutschen KB habe ich auf meiner Homepage zusammengestellt. Probleme im BetriebFür einen reibungslosen Einsatz der Runtime, vor allem auf NT-basierten Windowsversion, sind nach meinen Erfahrungen zumindest die Rechte eines Hauptbenutzers erforderlich. Im Prinzip gelten die selben Anforderungen / Einschränkungen wie für den Einsatz des normalen Officepaketes auch. Hierzu habe ich festgestellt, dass die User mit "einfachen" Benutzerrechten Probleme wegen fehlender Schreibrechte in die Programmverzeichnisse und die Registry haben. Das Skript für die Access 97 RuntimeNun zum spannenden Teil. Beginnen wir mit der Gretchenfrage: Welche Dateien muss das Setup denn nun enthalten? Dies herauszufinden ist im wesentlichen eine Fleißarbeit. Für die ersten Versuche erzeugte ich mit der ODE Setup-Dateien mit verschiedenen Komponenten, um so die Unterschiede für die benötigten Dateien zu erkennen. Auch die Tabellen im ODE-Assistenten und die LST-Dateien geben Auskunft darüber, welche Komponenten welche Dateien benötigen. Die von den ActiveX benötigten Dateien kann man aus den zugehörigen DEP-Dateien herausholen bzw. in der KB nachlesen. Richtig hilfreich war dann noch ein Inno-Script, das Bernd Kreuss als Freeware zur Verfügung gestellt hat. Es diente mir mit als Basis für weitere Untersuchungen, an deren Ende nun eine Variante für ein einfaches Script steht, das lediglich aus einer Handvoll Dateien besteht. Das Skript ist m.E. bis auf die 2 OLE-Dateien, EULA-konform und reicht für Anwendung, die sich auf Jet und DAO beschränken vollkommen aus. Eine Besonderheit sei hier noch erwähnt. Wenn die Access-Objektbibliothek "msacc8.olb" registriert wird, gilt dies auch für ein eventuell vorhandenes reguläres Access 97. Daher darf diese nicht mehr mit der Runtimeversion deinstalliert werden. Sonst mag das reguläre Access nicht mehr. Da die Runtime sich aber beim Start sich nicht um die Registrierung schert, sondern die Datei im eigenen Office-Verzeichnis sucht, bleibt hier als einziger Ausweg diese Datei zweimal zu installieren. Einmal in’s Office-Verzeichnis und ein zweites mal irgendwohin wo die Datei bleiben kann. Hier bietet sich z.B. das Verzeichnis für die gemeinsamen Dateien an. Es kann aber genauso gut das DAO- oder System-Verzeichnis sein. Die Scripte selbst sind hier jetzt nicht nochmals aufgeführt. Die jeweils
aktuellste Version gibt es hier
zum Download. Die Kommentare sind im Script enthalten. Getestet ist die Skripte in
verschiedenen Konstellationen unter WIN 95B /
WIN 98 SE / WIN ME, NT 4.0 SP4 und WIN 2000. Teilweise mit den Vollversionen von
Office97 / XP bzw. Access 97 und Access 2000/2002. Auch im praktischen Einsatz
hat es sich bestens bewährt. Inzwischen wurden schon mehrere tausend CD’s
verteilt, die eine Installation auf der Basis dieses Skriptes enthalten. Außer
anfänglichen Problemen in der Testphase mit dem TreeView sind mir bisher keine
negativen Rückmeldungen bekannt. Dennoch kann ich natürlich keine Garantie für
eine fehlerfreie Funktion in allen möglichen Systemumgebungen geben. Frontend / Backend InstallationFür Frontend / Backend Installationen, bei denen beide Dateien nicht im selben Verzeichnis liegen, bietet INNO derzeit keine direkte Unterstützung an. Dies liegt daran, dass INNO lediglich 1 Zielverzeichnis abfragt. Dieses Manko kann mit einem einfachen Trick umgangen werden, indem man eine Komponente "Backend installieren" definiert und, falls diese aktiviert ist, in der [Run] Section ein weiteres Setup aufruft, das diesen Job erledigt. Alternativ kann man auch mit einem ISX-Script ein weiteres Verzeichnis abfragen. Wie das geht steht in der ISX-KB. MS-GraphWer in seinen Anwendungen Graph mit einsetzt, muss außer den Access-Komponenten auch diese Laufzeitversion davon mit in sein Setup packen. Die erforderlichen Dateien lassen sich aus dem Installationsprotokoll der ODE recht einfach ermitteln. Allerdings zeigen sich auch hier wieder die bekannten Ungereimtheiten was die Erlaubnis zur Weitergabe der einzelnen Dateien angeht.
1) MSKB-Artikel 16353
ODE97: List of Files You Can Redistribute with ODE Run-Time Application. Bei der Frage, welche Dateien denn nun weitergegeben werden dürfen / müssen habe ich mich bisher an den MSKB-Artikel 163535 gehalten. Bei Graph reicht das nicht aus. Es ist zumindest noch die "gr87.dll" erforderlich. Fehlt diese Datei kommt es zu einem Laufzeitfehler. Da aber die ODE selbst diese Datei hinzufügt, habe ich dabei auch kein schlechtes Gewissen. Auf die beiden Dateien grDE50.olb und gren50.olb kann man verzichten Beide sind offensichtlich nicht erforderlich. Warum die ODE diese Graph 5 Dateien mit hinzufügt ist mir schleierhaft. Aber man muss ja nicht alles verstehen was Microsoft macht J. Wie in der obigen Tabelle zu erkennen ist, liegen die Graph-Dateien in unterschiedlichen Verzeichnissen in verschiedenen Version vor. Die ODE installiert eine Mischform der Versionen 8.0 und 8.0a die sich aber nur in der Datei "gr8409.dll" auswirkt. Die ODE nimmt hier die Version 8.0a aus dem Office-Verzeichnis. Es funktionieren beide Version (Testumgebungen WIN 98SE / ME / 2000) ohne erkennbare Einschränkungen. Registrierung erforderlichDie Hauptdatei Graph8.exe muss als OLE-Server registriert werden. Die ODE benutzt hierzu die Graph-Registrierdatei "graph8rt.srg", was man so man mit Inno leider nicht nachvollziehen kann. Das Inno-Flag "regserver" funktioniert für die Laufzeitversion nicht, daher muss man die Einträge der Graph-Registrierdatei mit in das Setup integrieren. Bekannte ProblemeProbleme können dann auftreten, wenn eine andere Anwendung, wie z.B. Office selbst, deinstalliert wird und diese auch Graph mit entfernt. Dadurch wird der Graph8.exe die Registrierung entzogen. Eine detaillierte Beschreibung kann dem KB-Artikel 174908 ODE97: Removing Microsoft Office Products May Unregister Microsoft Graph entnommen werden. Schlußbemerkungen zur Variante mit GraphWer es ganz perfekt machen will, kann mit Hilfe der Inno-Extensions zu Beginn des Setups prüfen ob Graph schon auf dem Zielsystem existiert und falls dies der Fall, ist diesen Pfad verwenden. Die Dateien sind dann als "Shared" zu kennzeichnen. Wie auch die einfache Variante gibt es diese hier zum Download. Runtime Erstellung für Access 2000/2002/2003 mit InnoWenn man den Beiträgen in den NG’s glauben kann, dann gibt es auch mit den
neueren Developer-Versionen nach wie vor Probleme mit den Runtime-Applikationen.
Seit Access 2000 setzt Microsoft den Windows-Installer ein bei dem man nicht
mehr einfach die Steuerdateien auslesen kann. Man muss also deutlich mehr Arbeit
in die Scripterstellung hineinstecken, so dass es nicht verwundert, dass bisher
keine Inno-Lösungen für diese beiden Access-Version veröffentlicht wurden. Vor
einigen Wochen war in einem Thread in der NG zu lesen, dass Bernd Oberfeld an
einem Skript für Access 2002 arbeitet, er dies aber noch nicht für so weit
ausgereift hält, dass er es jetzt schon veröffentlichen möchte. Zu guter LetztJetzt, am Ende der beiden Folgen des Inno-Artikels, sind sie in der Lage mit Inno ein professionelles Setup für Ihre Access 97 Applikationen zu erstellen und mit Hilfe des in dieser Folge beschriebenen Skriptes auch eine Runtime-Installion durchzuführen. Der Leistungsumfang von Inno konnte hier nur in Ausschnitten beschrieben werden. Für viele Anwendungen ist dies sicherlich ausreichend und wer mehr benötigt, der kann mit der Online-Hilfe, den Beispielen auf Jordan Russell‘s Web-Site oder der Inno-NG den Funktionsumfang voll ausreizen. Und da Inno noch immer weiterentwickelt wird lohnt sich auch ein regelmäßiger Besuch der Inno-Web-Site. Verwendete Quellen:
Inno im Internet
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||