Programmieren mit dBASE PLUS: Inno Setup

Tips und Tricks zu Inno Setup

Bearbeiten

Installationsverzeichnis vorbelegen

Bearbeiten

Der Zielordner, in dem die Anwendung installiert werden soll, kann wie folgt vorbelegt werden:

[Setup]
DefaultDirName={pf}\<Ordnername>

Dies bedeutet, dass im Abschnitt [Setup] das Schlüsselwort DefaultDirName vorkommen muss. Die Vorbelegung kann mit bestimmten Konstanten erfolgen. In diesem Fall steht die Konstante {pf} für den Programmordner, i. d. R. C:\Programme.

Falls der Anwender bei einer vorangegangenen Installation einen anderen als den vorgegebenen Zielordner ausgewählt hat, ist es günstig, wenn gleich dieser andere Ordner vorgeschlagen wird. Dies wird mit folgenden Zeilen erreicht:

[Setup]
UsePreviousAppDir=true

Allerdings handelt es sich dabei um die Standardeinstellung für diesen Wert, d. h. die Zeile muss nicht ausdrücklich gesetzt sein.

Ausführen der Anwendung während Installation verhindern

Bearbeiten

Wenn das Installationsprogramm prüfen soll, ob die zu installierende Anwendung gerade ausgeführt wird, muss folgende Zeile in das Inno-Script aufgenommen werden:

[Setup]
AppMutex=<Zeichenfolge>,Global\<Zeichenfolge>

Dabei prüft Inno Setup, ob die Anwendung sowohl beim aktuellen Benutzer als auch bei anderen Benutzern gerade ausgeführt wird.

In die Startroutine der dBASE-Anwendung müssen noch folgende Zeilen ergänzt werden:

// Mutex für Installer anlegen
set procedure to mutex.prg additive
b_ok = dbcreatemutex("<Zeichenfolge>")
if b_ok <> "OK"
  msgbox(b_ok, "Fehler", 0)
endif 

Dabei muss <Zeichenfolge> in beiden Fällen genau gleich sein. Groß- und Kleinschreibung wird unterschieden!

Marc van den Berghen hat freundlicherweise die Routine entwickelt, die nicht nur den lokalen sondern auch den globalen Mutex erzeugt. Das erforderliche Programm mutex.prg ist hier zu holen.

Borland Database Engine und dBASE-Runtime installieren

Bearbeiten

Um die dBASE-Runtime und die Borland Database Engine zu installieren besorgt man sich am besten die jeweilige Runtime-Installer-Version von der Webseite von dBI. Dieser Runtime-Installer muss nun nur noch in das Inno-Script integriert werden. Dazu fügt man in den genannten Abschnitten die folgenden Zeilen hinzu:

[Components]
Name: RuntimeInstall; Description: Borland Database Engine und dBASE-Runtime

[Files]
Source: PlusRuntime-bXXXX_DE.exe; DestDir: {tmp}; Components: RuntimeInstall; Flags: nocompression

[Dirs]
Name: {pf}\dBASE\Plus\Runtime; Permissions: everyone-readexec
Name: {cf}\Borland\BDE; Permissions: everyone-full; Flags: uninsneveruninstall

[Run]
Filename: {tmp}\PlusRuntime-bXXXX_DE.exe; WorkingDir: {tmp}; Parameters: "-s -a Runtime=""{pf}\dBASE\Plus\Runtime"" BDE=""{cf}\Borland\BDE"" Silent -sr"; Flags: waituntilterminated; Components: RuntimeInstall; StatusMsg: dBASE-Runtime und Borland Database Engine werden installiert...

[UninstallRun]
Filename: {win}\ISUN0407.exe; Parameters: "-f""{pf}\dBASE\Plus\Runtime\Uninst.isu"" -c""{sys}\UN_dPLUSr.DLL"""; Flags: waituntilidle

Die XXXX sind durch die jeweilige Build-Nummer zu ersetzen.

Nachdem die Borland Database Engine durch diesen Installer stets mit Standard-Werten installiert wird, sollten innerhalb der dBASE-Anwendung diese Werte geprüft und ggf. angepasst werden. Dazu kann bdeconfig.prg verwendet werden.

Windows Scripting Host aktualisieren

Bearbeiten

Wer in seinen dBASE-Anwendungen Gebrauch von Funktionen des Windows Scripting Host macht (z. B. OleAutoClient("VBScript..."), OleAutoClient("WScript...") oder OleAutoClient("Scripting...")), sollte dafür sorgen, dass dieser während der Anwendungs-Installation aktualisiert wird. Sonst kann es vorkommen, dass Funktionen aufgerufen werden, die auf dem Zielrechner noch nicht zur Verfügung stehen. Die dBASE-Anwendung produziert einen Fehler und für den Anwender sieht es so aus, als ob dies an der Anwendung liegt und nicht an der Windows-Komponente. Zur Aktualisierung ergänzt man das Inno-Script in den genannten Abschnitten um die folgenden Zeilen:

[Components]
Name: WSH; Description: Windows Scripting Host

[Files]
Source: scr56de.exe; DestDir: {tmp}; MinVersion: 4.1,4.0; OnlyBelowVersion: 0,4.01; Components: WSH; Flags: nocompression
Source: scriptde.exe; DestDir: {tmp}; MinVersion: 0,5.0; OnlyBelowVersion: 0,5.02; Components: WSH; Flags: nocompression

[Run]
; Install Windows 98, Me, and NT 4.0 version
Filename: {tmp}\scr56de.exe; Parameters: /r:n /q:1; MinVersion: 4.1,4.0; OnlyBelowVersion: 0,4.01; Flags: waituntilterminated; Components: WSH; StatusMsg: Windows Scripting Host wird aktualisiert...
; Install Windows 2000 and XP version
Filename: {tmp}\scriptde.exe; Parameters: /r:n /q:1; MinVersion: 0,5.0; OnlyBelowVersion: 0,5.02; Flags: waituntilterminated; Components: WSH; StatusMsg: Windows Scripting Host wird aktualisiert...

Hier erhält man die Quelldateien scr56de.exe und scriptde.exe.

Verknüpfung für Deinstallation in Programmgruppe aufnehmen

Bearbeiten

Um den Aufruf für das Deinstallationsprogramm in die Programmgruppe mit aufzunehmen ergänzt man das Inno-Script um folgende Zeile:

[Icons]
Name: {group}\Deinstallieren; Filename: {uninstallexe}

Berechtigungen für Ordner setzen

Bearbeiten

Eigene Tests haben gezeigt, dass man unbedingt Berechtigungen für bestimmte Ordner setzen muss, da sonst das Arbeiten mit der Anwendung als eingeschränkter Benutzer nicht fehlerfrei möglich ist. Beim eingeschränkten Benutzer sind automatisch der Ordner "C:\Programme" und die Unterordner davon schreibgeschützt.

Ohne das Setzen der Berechtigungen können im Anwendungsordner zwar vorhandene Dateien verändert, aber keine neuen Dateien erstellt werden. Dies bedeutet, dass eine Anwendung, die mit Administrator-Rechten installiert wurde, beim Ausführen als Benutzer mit eingeschränkten Rechten z. B. kein Erstellen von temporären Dateien oder von neuen Tabellen erlaubt.

Das Ausbleiben von Fehlermeldungen der Benutzer unserer Programme deutet allenfalls darauf hin, dass die Anwender stets als Administrator angemeldet sind.

Die Lösung unter Inno-Setup besteht darin, die Rechte für die Ordner ausdrücklich zu setzen. Dazu ergänzt man folgende Zeilen:

[Dirs]
Name: {app}; Permissions: authusers-modify
Name: {app}\Hilfe; Permissions: authusers-modify
Name: {app}\Tabellen; Permissions: authusers-full

Man sollte hier neben dem Anwendungsordner auch sämtliche Unterordner aufführen (wie hier z. B. \Hilfe).

Ergänzungen für Windows Vista

Bearbeiten

Manifest-Dateien anpassen

Bearbeiten

Die Herstellerfirma dBI bietet Beispiel-Manifestdateien für das Ausführen der Anwendungen mit User-Rechten, den höchstmöglichen Rechten des Users und als Administrator an. Bei meinen Tests lief die Anwendung nur mit Administratorrechten einwandfrei.

Die Manifest-Dateien müssen vor dem Einsatz noch wie folgt angepasst werden:

- Die Datei plusrun.exe.manifest kopiert man als <Anwendung>.exe.manifest. Nach dem Öffnen mit einem beliebigen Editor müssen noch alle Vorkommen von "PLUSRUN" in <Anwendungs-EXE-Name> geändert werden.

- Innerhalb der Datei <Anwendung>.exe.manifest muss der gesamte Abschnitt zwischen den Tags <dependency> und </dependency> gelöscht werden.

- Dieser Abschnitt muss ebenfalls in der Datei bdeadmin.exe.manifest gelöscht werden.


Manifest-Dateien hinzufügen

Bearbeiten

Bei der Installation der dBASE-Runtime und Borland Database Engine werden bereits Manifest-Dateien mitkopiert, die allerdings nicht dem letzten Stand entsprechen. Daher ist es erforderlich, nach der Installation der dBASE-Runtime die eigenen Manifest-Dateien zu kopieren. Dies erreicht man in Inno Setup mit den folgenden Zeilen:

[Files]
Source: <application>.exe.manifest; DestDir: {app}; MinVersion: 0,6; Components: Programmdateien
Source: plusrun.exe.manifest; DestDir: {tmp}; MinVersion: 0,6; Components: RuntimeInstall; Flags: deleteafterinstall
Source: bdeadmin.exe.manifest; DestDir: {tmp}; MinVersion: 0,6; Components: RuntimeInstall; Flags: deleteafterinstall

[Run]
; nach dem Aufruf des Runtime-Installers!
Filename: {cmd}; Parameters: "/C if exist ""{tmp}\plusrun.exe.manifest"" copy ""{tmp}\plusrun.exe.manifest"" ""{pf}\dBASE\Plus\Runtime"""; MinVersion: 0,6; Components: RuntimeInstall
Filename: {cmd}; Parameters: "/C if exist ""{tmp}\bdeadmin.exe.manifest"" copy ""{tmp}\bdeadmin.exe.manifest"" ""{cf}\Borland\BDE"""; MinVersion: 0,6; Components: RuntimeInstall

Dabei sorgt der Parameter MinVersion: 0,6 dafür, dass die Installation erst ab Windows Vista erfolgt.


WinHlp32.exe für Windows Vista hinzufügen

Bearbeiten

Leider wurde in Windows Vista die Unterstützung für 32-Bit-Hilfedateien entfernt. Dies bedeutet, dass Hilfedateien unserer Anwendungen nicht mehr angezeigt werden können. Allerdings läßt sich diese Unterstützung nachrüsten. Dazu benötigt man von Microsoft folgenden Download. Innerhalb des Inno Scripts wird WinHlp32.exe wie folgt eingebunden:

[Components]
Name: Hilfedateien; Description: Hilfedateien

[Files]
Source: Windows6.0-KB917607-x86.msu; DestDir: {tmp}; MinVersion: 0,6; OnlyBelowVersion: 0,6.01; Components: Hilfedateien; Flags: deleteafterinstall nocompression

[Run]
Filename: {sys}\wusa.exe; Parameters: {tmp}\Windows6.0-KB917607-x86.msu; WorkingDir: {tmp}; Flags: waituntilterminated; MinVersion: 0,6; OnlyBelowVersion: 0,6.01; Components: Hilfedateien; StatusMsg: WinHlp32.exe für Windows Vista wird installiert...