Inno Setup
Zurück

 

Setup Erstellung mit Inno

Im Original erschienen Access-Report Nr. 3 + 4 von Karl Donaubauer. Inzwischen überarbeit und erweitert.
Autor: Bernhard Martin

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.


Abb. 1 Der Lizenzbildschirm von Inno

Inno und seine Features

Inno 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:

  • Unterstützt alle gängigen Windows-Versionen
  • Erzeugt eine Setup.exe zur Installation beliebiger Dateien
  • Ausführen von verschiedenen Dateioperationen während der Installation
  • Erstellen von Registryeinträgen
  • Erstellen von Einträgen in INI-Dateien
  • Erstellen von Verknüpfungen auf Icons an beliebiger Stelle
  • Installation nur auf bestimmten Betriebssystemen durchführen
  • Dateien abhängig vom Betriebssystem installieren
  • Verschiedene frei definierbare Setuptypen z.B. Minimal, Maximal, Benutzerdefiniert
  • Enthält einen UnInstaller
  • Kopieren, installieren und registrieren von Dateien incl. DLL/OXC/FNT/TLB-Dateien
  • Prüfen, ob bestimmte Programme aktiv sind
  • Passwortschutz für das Setup
  • Erscheinungsbild und Verhalten kann in vielen Punkten beeinflusst werden
  • Silent-Installations möglich
  • Bei Abbruch des Setup werden alle bis zu diesem Punkt durchgeführte Aktionen wieder rückgängig gemacht.

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.

  • Abfragen nach Benutzername, Firma, Lizenznummer etc.
  • Mehrsprachige Setups (seit der Version 4 möglich)
  • Prüfen, ob bestimmte Registryeinträge oder Dateien / Programme vorhanden sind (Dies kann bisher nur mit dem Pascal-Scripting von "My Inno Setup Extensions" gelöst werden)
  • Hierarchische Komponenten

Tools und Ergänzungen

Zu 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.

  • ISTool von Bjørnar Henden http://www.bhenden.org/istool/
    ist ein komfortabler Skripteditor. ISTool wurde auf der 4. AEK im Vortrag "Inno Setup" von Michael Reitz sehr detailliert vorgestellt. Den Vortrag gibt’s als Download beim Access-Profi-Pool e.V. http://www.accessprofipool.de.
  • Scriptmaker von TaFWeb Software http://www.tafweb.com/scriptmaker.html>
    ist ebenfalls ein Skripteditor, wird aber seit einiger Zeit nicht mehr weiterentwickelt, so dass die neueren Features von Inno nicht unterstütz werden.
  • My Inno Setup Extensions von Martijn Laan http://www.wintax.nl/isx/
    gehört zur Kategorie "Allgemeine Erweiterungen". Mit der Version 2 von Inno sind aber schon viele Features dieses Tools in Inno eingeflossen. Als Besonderheit bietet dieses Tool noch die Möglichkeit das Setup selbst in Form eines Pascal-Scriptes zu erweitern.
  • Translater von Jernej Simoncic http://www2.arnes.si/~sopjsimo/translator.html
    ist ein Tool für all diejenigen, die noch eine neue Sprachdatei erzeugen wollen. Vielleicht möchte ja noch jemand eine Installation in klingonisch machen.
  • Preprocessor von Alex Yackimoff http://www16.brinkster.com/yackimoff/products/isutils/
    erweitert Inno um die Fähigkeiten bedingter Kompilierung von Skripten und ermöglicht die Verwendung von selbstdefinierten Variablen.

Installation

Inno 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.


Abb. 2 Installation von Inno-Setup

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 Skript

Ein 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.

Kommentare

Zur 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.

Sektionen

Die 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.
Anweisungen bestehen aus einem oder mehreren Parametern sowie deren Optionen und Flags. Ein Parameter wiederum besteht aus seinem Namen, gefolgt von einem Doppelpunkt (:) und seinem Wert. Mehrere Parameter sowie Optionen und Flags sind jeweils mit einem Semikolon (;) voneinander getrennt. Im weiteren Verlauf werden noch einige Sektionen und deren Anwendung besprochen. Eine ausführliche Darstellung aller Optionen würde aber den Umfang dieses Artikels bei weitem sprengen. In der Inno-Hilfe sind alle Optionen, meist mit Beispielen, ausführlich dokumentiert. Die folgende Tabelle zeigt die Sektionen im Überblick.

 

Die Sektionen im Überblick

Sektion Bedeutung
[Setup] Enthält Anweisungen zum Aussehen und Verhalten des Setups. Die Schlüsselworte AppName, AppVerName und DefaultDirName sind erforderlich. Alle weiteren Schlüsselworte sind optional.
[Files] Enthält die Dateien für das Setup.
[Icons] Anlegen von Icons
[Components] Zuordnung von Komponenten zu Setuptypen
[Dirs] Erlaubt es, beliebige zusätzliche leere Verzeichnisse anzulegen.
[INI] Schreiben von Einträgen in INI-Dateien.
[InstallDelete] Erste Aktion beim Installieren. Syntax entspricht der in der Sektion UninstallDelete.
[Messages] Erlaubt setupspezifische Änderungen der Texte.
[Registry] Schreiben von Einträgen in die Registry.
[Run] Wird nach erfolgreicher Installation der Dateien, aber noch vor dem Schlussdialog ausgeführt.
[Tasks] Erlaubt zusätzliche Aktionen im Setup.
[Types] Legt die Setuptypen fest.
[UninstallDelete] Letzte Aktion beim Deinstallieren. Hiermit können beliebige Verzeichnisse und / oder Dateien gelöscht werden.
[UninstallRun] Wird als erste Aktion beim Deinstallieren ausgeführt. Syntax entspricht der in der Sektion [Run].
[LangOptions] Enthält Informationen zur Sprache, wird aber in der Regel nicht benötigt.

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.
Wer selbst definierte Konstanten einsetzen will, muss auf Alex Yackimoff‘s Preprocessor zurückgreifen.

Hier einige Beispiele. Eine komplette Aufstellung ist wiederum in der Hilfe enthalten.

Konstante Inhalt Beispiel für Inhalt
{win} Pfad zum Windows-Verzeichnis C:\Windows
{sys} Pfad zum Windows System bzw.
System32-Verzeichnis
C:\Windows\System bzw.
C:\Windows\System32
{app} Pfad zur eigenen Applikation
{pf} Pfad zum Programme-Verzeichnis C:\Programme
{cf} Pfad zu den gemeinsamen Dateien C:\Programme\Gemeinsame Dateien
{dao} Entspricht {cf}\Microsoft Shared\DAO C:\Programme\Gemeinsame Dateien\Microsoft Shared\DAO
{src} Pfad zum Installationsverzeichnis während das Setup ausgeführt wird. R:\
{group} Programmgruppe für das Startmenü

Skript-Beispiele

Nun 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.

; -- Sample1.iss --
; Demonstrates copying 3 files and creating an icon.
Hier stehen lediglich Kommentare zum Skript.
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
AppCopyright=Copyright (C) 1997-2000 My Company, Inc.
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
Diese Sektion ist unbedingt erforderlich. Sie arbeitet mit Schlüsselworten und enthält alle Angabe zum Erscheinungsbild und zum Verhalten des Setups. So wird hier u.a. der Name der Applikation, das Default Installationsverzeichnis und die Programmgruppe eingetragen.
[Files]
Source: "MyProg.exe"; DestDir: "{app}"
Source: "MyProg.hlp"; DestDir: "{app}"
Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
Diese Sektion ist zwar optional, wird aber wohl für die meisten Setups relevant sein. Sie arbeitet mit Anweisungen und enthält die Dateien, die dem Setup hinzugefügt werden sollen. In diesem Beispiel werden 3 Dateien in das Verzeichnis kopiert, das in der Konstanten {app} steht . Die Konstante selbst wird in der Setup-Sektion über das Schlüsselwort "DefaultDirName" mit dem Wert {pf}\My Program vorbelegt. Dieser Defaultwert kann im Laufe der Installation vom Anwender geändert werden.
[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
Diese Sektion ist ebenfalls optional, wird aber auch für die meisten Setups relevant sein. Sie arbeitet mit Anweisungen und enthält die Angaben zum Programmicon.
In diesem Beispiel wird ein Eintrag mit dem Text "My Program" in der Programmgruppe erstellt, die in der Konstanten {group} steht. Die Konstante selbst wird in der Setup-Sektion über das Schlüsselwort "DefaultGroupName" mit dem Wert "My Program" vorbelegt. Dieser Defaultwert kann im Laufe der Installation vom Anwender geändert werden.
Zur Anzeige wird das Icon aus der Datei MyProg.exe aus dem Applikationsverzeichnis verwendet.

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.
Beginnen Sie mit den einfachen mitgelieferten Beispielen und ergänzen Sie diese um Ihre eigenen Dateien und sonstigen Belange. Das Verhalten des Setup kann man gefahrlos austesten, indem man einfach die File-Sektion weg lässt.

Als Anregung habe ich hier in der folgenden Tabelle noch einige Beispiele von wichtigen und interessanten Schlüsselworten und Anweisungen der einzelnen Sektionen zusammengestellt.

Sektion Beispiel
[Setup]
  • AppId=MeinProgramm
    Der Inhalt von AppID legt fest, ob ein separater UnInstall-Eintrag erstellt wird. Solange alle ihre Installationen die selbe Angabe haben, werden diese auch in einem Rutsch entfernt. Sinnvoll, wenn Erstprogramm und Update zusammen deinstalliert werden sollen.
  • DefaultGroupName=Mein Programm
    Defaultwert für die Konstante {group}
  • DefaultDirName={pf}\Mein Programm
    Defaultwert für die Konstante {app}
  • LicenseFile=license.txt
    Zeigt im Lizenzdialog das File license.txt an. Bei Verwendung eines Files im rtf-Format werden auch Formatierungen wie Fett, Kursiv etc. angezeigt.
  • MessagesFile=compiler:German.isl
    Angabe des Textfiles. Hier wird German.isl verwendet. Compiler: besagt, dass die Datei im Stammverzeichnis von Inno abgelegt wird.
  • AppMutex=MeinMutexName
    Mit diesem Schlüsselwort prüft Inno bei der Installation, ob ein Programm mit diesem Mutex momentan aktiv ist. Dies ist besonders dann interessant, wenn ein Update installiert wird und die Applikation dabei nicht aktiv sein darf. Wie man mit Access ein Mutex erzeugt, hat Christoph Jüngling in einem White-Paper beschrieben, das beim APP im Downloadbereich zu finden ist. Ein anderes Beispiel ist auf meiner Homepage zu finden.
  • AdminPrivilegesRequired=yes
    Mit diesem Schlüsselwort wird festgelegt, dass für die Installation auf WIN NT / 2000 Administratorrechte erforderlich sind.
  • MinVersion=4.1.2222,4.0.1381sp4
    Versionsabfrage zur Eingrenzung auf Betriebssysteme, die mindestens vorhanden sein müssen.
    4.1.2222 steht für WIN 98 SE
    4.0.1381sp4 steht für WIN NT 4.0 SP 4
  • OnlyBelowVersion=4.9.3000,5.0.2195sp2
    Versionsabfrage zur Eingrenzung auf Betriebssysteme, ab denen das Setup nicht mehr ausgeführt wird..
    4.9.3000 steht für WIN Me
    5.0.2195sp2 steht für WIN 2000 SP2
  • DisableDirPage =yes
    DisableProgramGroupPage=yes
    stehen beispielhaft für die Möglichkeiten, das Verhalten des Setups zu beeinflussen
    DisableDirPage =yes unterdrückt die Auswahl eines beliebigen Installationsverzeichnisses. Es wird direkt in das Default-Verzeichnis installiert.
    DisableProgramGroupPage =yes unterdrückt die Auswahl der Programmgruppen. Es wird direkt die Default-Programmgruppe verwendet.
    Es existieren weitere Schlüsselwort zum Aus-/Einblenden von Dialogen während der Installation.
[Dirs]
  • Name: "{app}\data"
    Erstellt eine leeres Verzeichnis data unterhalb des Applikationsverzeichnisses.
[INI]
  • Filename: "{win}\MeineINI.INI"; Section: "Settings"; Key: "InstallPath"; String: "{app}"
    In der Datei MeineINI.INI wird in der Sektion [Settings] das Schlüsselwort "InstallPath" auf den Wert der Konstanten {app} geändert. Ist das Schlüsselwort nicht vorhanden, so wird es erstellt. Ist die Sektion oder die Datei selbst nicht vorhanden, so werden diese ebenfalls erstellt.
[Messages]
  • ButtonNext=&Hier gehts weiter >
    So kann man z.B. die Beschriftung des Next-Buttons ändern. Im Prinzip kann jeder Text hier angepasst werden. Es muss dazu lediglich das entsprechende Schlüsselwort aus der Sprachdatei bekannt sein.
[Registry]
  • Root: HKCU; Subkey: "Software\Meine Firma"; Flags: uninsdeletekeyifempty
    Erstellt den Eintrag "Software\Meine Firma" in der Registry im Zweig HKEY_CURRENT_USER.
[Types]
  • Name: "full"; Description: "Komplette Installation"
    Name: "minimum"; Description: "Minimale Installation"
    Name: "custom"; Description: "Benutzerdefinierte Installation"; Flags: iscustom
    Definiert drei Typen für das Setup. Full, Minimum und Custom. Siehe Abbildung 2.
[Components]
  • Name: "main"; Description: "Programmdateien"; Types: full minimum custom; Flags: fixedName: "help"; Description: "Hilfe Dateien"; Types: full
    Name: "pic"; Description: "Bild Dateien"; Types: full
    Legt die Komponenten für die Setuptypen fest. Die mit dem Flag "fixed" versehene Komponente ist immer fest ausgewählt. Mit der Option "ExtraDiskSpaceRequired" kann noch der benötigte Speicherplatz angegeben werden. Siehe Abbildung 2.
Tasks]
  • Name: "T1"; Description: "Icon auf dem Desktop"; GroupDescription: Zusätzliche Aktionen
    Name: "T2"; Description: "Internet-Explorer 6.0"; GroupDescription: Zusatzprogramme
    Name: "T3"; Description: "Acrobat Reader 5.0"; GroupDescription: Zusatzprogramme
    Definiert drei zusätzliche Tasks. Diese werden dem Benutzer bei der Installation zur Auswahl angeboten. Tasks mit der selben GroupDescription werden zusammengefasst. Siehe Abbildung 3.
[Icons]
  • Name: "{commonprograms}\Mein Programm"; Filename: "{app}\icon.ico"
    Name: "{userdesktop}\Mein Programm"; Filename: "{app}\icon.ico"; Tasks: T1
    Erzeugt die Icons für den Programmstart. Das Icon auf dem User-Desk wird nur dann erzeugt, wenn der Benutzer den Task "T1" ausgewählt hat.
[Files]
  • Source: "MYPROG.EXE"; DestDir: "{app}"¸ Components: main
    Source: "INIT.EXE"; DestDir: "{app}"¸
    Source: "MYPROG.HLP"; DestDir: "{app}"; Components: help
    Source: "README.TXT"; DestDir: "{app}"; Flags: isreadme
    Source: "pics\*.jpg"; DestDir: "{app}\pics"; Flags: recursesubdirs; Components: pic
    Fügt die gewünschten Dateien dem Setup hinzu. Die Dateien werden nur dann installiert, wenn die dazugehörige Komponente ausgewählt wurde. Init.exe und Readme.txt werden in jedem Fall installiert, da sie an keine Komponente gebunden sind.
    Source: "pics\*.jpg" fügt dem Setup alle JPG-Dateien hinzu, die im Verzeichnis "pics" enthalten sind. Das Flag "recursesubdirs" erweitert dies rekursiv auf alle Unterverzeichnisse von "pics". Die selbe Verzeichnisstruktur wird später durch das Setup bei der Installation unterhalb von "{app}\pics" wieder abgebildet.
[Run]
  • Filename: "{app}\INIT.EXE"; Parameters: "/x"
    Filename: " {src}\IE6Setup.exe /Q /R:N"; Tasks: T2
    Filename: " {src}\AR50DEU.exe"¸ Tasks: T3
    Führt die Datei INIT.exe aus und übergibt dazu den Parameter /X.
    Die Dateien IE6Setup.exe und AR50DEU.exe werden nur ausgeführt, wenn der jeweilige Task vom Benutzer ausgewählt wurde. Die beiden Dateien selbst sind in diesem Fall nicht im Setup enthalten, sondern werden über die Konstante{src} angesprochen, die den Pfad zur Setup.exe enthält. Ist das Setup auf einer CD, so müssen die Dateien mit auf die CD gebrannt werden.
    Zu beachten ist, dass hier kein Reboot ausgelöst werden darf. Falls hier z.B. eine Installation des IE durchgeführt werden soll, was zwingend einen Reboot erforderlich macht, so muss dieser mit entsprechenden Switches unterbunden werden. Statt dessen ist der Reboot mit dem Schlüsselwort AlwaysRestart = yes in der [Setup]-Sektion nach Abschluss der Installation auszulösen.

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 Runtimeerstellung

Nachdem 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 Aspekte

Wer 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.

  • In der Datei Odeeula.txt sind 115 Dateien für die Weitergabe aufgeführt. Das Ganze ist eine unvollständige und zu dem noch schlampige Übersetzung vom englischen Original. Zwei Beispiele: die hier erwähnte Datei MRT7ENG.DLL muss sicherlich MRTDEU.DLL heißen und GR8APH8.EXE heißt zumindest bei mir GRAPH8.EXE.
  • Im Knowledgebase (KB) Artikel 163535 ODE97: List of Files You Can Redistribute with ODE Run-Time Application sind 147 Dateien für die Weitergabe aufgeführt. Darunter sind u.a. OLEAUT32.DLL, ODBCTRAC.DLL, SELFREG.DLL und VBA3EN.DLL die auf einem deutschen System wiederum VBA3DE.DLL heißt. Allerdings ist auch diese Aufstellung nicht vollständig, so fehlt auch hier die MSACCESS.SRG, ohne die keine Runtime-Installation funktioniert.
  • Im KB-Artikel 216988 ACC97: Gifimp32.flt Is Redistributable Through the ODE ist dann noch die Freigabe für die Weitergabe der Datei Gifimp32.flt enthalten. Zitat: "However, this file is not included in the list of redistributable files for the ODE. The File, Gifimp.flt, is redistributable through the ODE.

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:

  • Die Rechtschreibprüfung und Wörterbücher mit ihren Dateien Mssp_*.lex, Mssp2_*.lex
  • Die Assistenten Wzcnf80.mda, Wzlib80.mde, Wzmain80.mde, Wztool80.mde
  • Die Steuerelemente aus der Fm20.dll sowie diese dll selbst
  • Die Graphikfilter zur Anzeige von Bildern. Somit können nur Grafiken im BMP, GIF und WMF-Format angezeigt werden. Eine interessante Alternative gibt’s bei http://www.lebans.com.
  • Auch die Office-Library MSO97.DLL darf nicht weitergegeben werden. Dafür existiert die spezielle Version MSO97RT.DLL, deren interner Name MSO97.DLL lautet.

Weitere wichtige Aspekte

  • Die allseits bekannte ActiveX-Problematik.
  • Die friedliche Koexistenz mehrerer Office-Versionen auf einem PC.
  • Die Probleme, die auch bei der Installation des Vollproduktes auftreten können.

Die ActiveX-Problematik

Dieses, 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:
Da Office 97 für Windows 95 entwickelt wurde und lt. EULA nur bestimmte Dateien weitergeben werden dürfen, zu denen für mein Verständnis auch nur die Versionen gehören, die mit dem Office-Paket installiert wurden, erstelle ich Applikationen mit kritischen Komponenten wie TreeView oder ListView ausschließlich auf einem speziellen PC. Auf diesem PC ist nur Windows 95, Office-97 Developer mit den entsprechenden Updates und Service-Releases und natürlich Inno und ISTool installiert . Sonst nichts, auch kein Internet Explorer! Seither klappt es auch mit den ActiveXen und lizenzrechtlich liegt man so auf der sicheren Seite.
Hier noch ein Tipp dazu: vor der Verteilung einer Anwendung unbedingt kontrollieren, ob keine unnötigen Verweise aktiviert sind.

Mehrere Office-Versionen auf einem PC

Auch 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.
Interessante Lektüre dazu gibt’s unter folgenden Adressen:

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.
Nun, ausgehend von diesen Überlegungen muss für eine Runtime-Installation folgendes gelten:

  • Vermeide ActiveX
    Die Alternativen sind leider nicht immer kostenlos erhältlich.
  • Installation in ein separates Verzeichnis
    Dazu muss im Inno-Script lediglich ein eigenes Office-Verzeichnis für die Accesskomponenten angegeben werden.
  • Keine Änderung der Access-Registrierung
    Dazu kann man folgenden Trick anwenden. Man nimmt eine leere Textdatei, nennt sie "msaccess.leer" um Verwechslungen mit dem Original zu vermeiden, und verwendet diese für das Setup anstatt dem Original. Da in der Datei nichts drin steht, gibt’s auch nichts zu registrieren. Bei der Installation sorgt Inno durch Angabe des Zielnamens dafür, dass sie in "msaccess.srg" umbenannt wird. Access sucht bei beim Programmstart nach der Datei msaccess.srg und meckert, falls sie nicht vorhanden ist.
    Da eine Runtime-Applikation immer mit komplettem Pfad und allen Parametern über ein Icon aufgerufen wird, sind auch keinerlei Registrierungen von Dateitypen etc. erforderlich. Zwei Nachteile hat die Sache allerdings, das soll nicht verschwiegen werden. Da die Runtime nicht registriert wird, kann diese auch nicht als OLE-Server dienen und die Exportfunktionen wie der Befehl "OutputTo" funktionieren trotz installierter ISAMs nicht mehr. Zumindest "OutputTo" kann man mit einer speziellen msaccess.srg bzw. mit der Übernahme der entsprechenden Registryeinträge aus der originalen msaccess.srg in das Script wieder zur Funktion überreden.

Probleme bei der Installation

Grundsä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.
Wenn allerdings die bisher besprochenen Punkte beherzigt werden, so ist das Potential für Installationsprobleme gering. Bei NT-basiserten Windowsvarianten ist es empfehlenswert für die Installation Administratorrechte zu verwenden. Leider gibt es für das bekannte Problem mit dem Hatten-Font noch keine vernünftige Lösung mit INNO. Hier soll in die Version 3 noch eine neue Sektion [RunBeforeInstall] einfließen, mit der dieser Übeltäter vor der Installation umbenannt werden kann.

Probleme im Betrieb

Fü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 Runtime

Nun 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.
Sie können das Skript nach belieben weiter ergänzen. Dies ist besonders dann erforderlich, wenn Sie Verweise auf weitere Bibliotheken oder zusätzliche OCX-Dateien verwenden.

Frontend / Backend Installation

Fü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-Graph

Wer 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.

Dateien Verwendung Speicherort Odeeula.txt MSKB 163535 1) ODE Setup
graph8.exe Microsoft Graph V.8.0/8.0a Datvert2) / Office3) X X X
graph8rt.srg Runtimeversion zur Selbstregistrierung für Graph8 Datvert X X X
gr8409.dll Microsoft Graph Lexicon 8.0/8.0a Datvert / Office X X X
gr87.dll Microsoft Graph Lexicon 8.0a Office - - X
graph8.olb Microsoft Graph Object Library V.8.0 / 8.0a 4) Datvert / Office X X X
grDE50.olb Microsoft Graph Object Library V.5.0 Office - - X
gren50.olb Microsoft Graph Object Library V.5.0 Office - - X
scp32.dll Code Page Translation Library V.2.0.330 System - X X
grintl32.dll Microsoft Graph Object Library Microsoft Graph Localized Resources V.8.0a Office - X X
gr8galry.gra Microsoft Graph 97-Diagramm Datvert X X X

1) MSKB-Artikel 16353 ODE97: List of Files You Can Redistribute with ODE Run-Time Application.
2) c:\programme\microsoft office\odetools\setup-assistent\datvert\ Enthält die Dateien der Version 8.0.
3) c:\programme\microsoft office\office\ Enthält die Dateien der Version 8.0a, sowie die Vollversion von Graph8.
4 ) Type-Library, muss registriert werden.

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 erforderlich

Die 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 Probleme

Probleme 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 Graph

Wer 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 Inno

Wenn 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.
Inzwischen ist schon Access 2003 veröffentlicht und mir sind für keine der neueren Access-Version Inno-Scripte bekannt geworden und ich gehe davon aus, dass in nächster Zeit auch nicht mit solchen zu rechnen ist. Zudem sich, wie man in den NG hört, der Setup-Assistent seit Access-2002 deutlich verbessert haben soll.

Zu guter Letzt

Jetzt, 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

Homepage www.jrsoftware.org
Download und Info www.jrsoftware.org/isinfo.php
Sprachdateien www.jrsoftware.org/files/istrans
Support / Newsgroups:
Inno-Setup allgemein
Einsatz der Code-Section und Pascal-Scripting
Third-party Add-Ons für INNO

jrsoftware.innosetup
jrsoftware.innosetup.code
jrsoftware.innosetup.thirdparty
Deutsche inoffizielle INNO Setup Seite
von Frank Saes
www.innosetup.de.vu

Impressum

Letzte Aktualisierung: 04.11.06


Professionelle Access-Tools in einer einzigartigen Tool-Sammlung