Erweitertes InnoSetup – Skript mit Auswahlmöglichkeiten und Datenbankverzeichnisabfrage

Ein häufiges Installationsszenario für ein VFP-Programm (aber auch ähnlich oder abgewandelt denkbar für jedes andere Entwicklungssystem) ist, dass man dem Anwender drei Möglichkeiten bieten möchte:

  • Eine Komplettinstallation mit Datenbank und Runtime (lokal / Erstinstallation)
  • Eine Installation von Programm und Runtime, aber ohne Datenbank (Zusatzinstallation im Netzwerk)
  • Nur Runtime  (z.B. bei FileServer – Installationen)

Nachfolgendes Skript für InnoSetup ermöglicht dies. Zu Beachten ist, dass die Pfade und Namen, die hier verwendet werden wie „meinProgramm“, „IhrName“ entsprechend Ihren Bedürfnissen angepasst werden müssen.

Ebenso der Pfad der Source-Dateien, hier wird z.B. „c:\projekte\setup“ verwendet. Um Warnungen von Innosetup zu vermeiden, lohnt es sich, DLL- und OCX-Dateien in einem eigenen Unterverzeichnis, in diesem Fall „c:\projekte\setup\winsystem“ zu sammeln.

Ich kann keine Gewähr für die Richtigkeit dieses Skripts übernehmen, aber es basiert natürlich auf echten Projekten,
die auch erfolgreich getestet worden sind. Zu eigenen Tests empfiehlt sich die Einrichtung eines VirtualPC-Systems, zumindest  mit XP und Vista/7.

Nach meinen persönlichen Erfahrungen haben sich bei mir Probleme mit Installationen auf Null reduziert, seit ich komplett auf InnoSetup gewechselt bin, trotzdem kann man Probleme auf Kundenrechnern natürlich nie ausschließen, weil man wie bei einem Gebrauchtwagen niemals die Geschichte dieses Systems komplett kennt.

Hier das Skript:

setup.iss:

[INI]
// schreibt eine Ini-Datei in das Programmverzeichnis, welches den Pfad der Datenbank enthält
// der im Setup-Programm ausgewählt wird – siehe Skript – Sektion -, dieser könnte z.B. beim ersten Start des
// Programm ausgelesen werden
Filename: „{app}\db.ini“; Section: „Pfade“; key: „DB“; String: „{code:GetDataDir}\“; components: datenbank; Flags: uninsdeletesection

[Types]
// Auswahlmöglichkieiten für den Anwender
Name: voll; Description: Komplettinstallation mit Datenbank;  // z.B. lokal oder erste Installation im Netzwerk
Name: arechner; Description: Programminstallation ohne Datenbank;  // z.B. für Zusatz-Installation im Netzwerk
Name: laufzeit; Description: Nur Runtime;  // z.B. für eine FileServer-Installation

[Components]
Name: „runtime“; Description: „Laufzeitumgebung“; Types: voll arechner laufzeit;
Name: „programm“; Description: „Das Programm“; Types: arechner voll;
Name: „datenbank“; Description: „Datenbanken“; Types: voll;

// Das Flag components: runtime; (z.B.) im weiteren Verlauf kennzeichnet, wann was ausgeführt oder kopiert wird, entsprechend der Auswahl des Anwenders
[Dirs]
// liest das angegebene DB-Verzeichnis aus
Name: {code:GetDataDir}; Components: datenbank; Flags: uninsneveruninstall

[Setup]
// die App-ID für Ihr Programm in InnoSetup individuell erstellen
AppId={{ADV6556E-2DB5-4A9F-A0CC-77AFC558B318}}
AppName=meinProgramm
AppVerName=meinProgramm Version 1.0
AppCopyright=Copyright © 2009 IhrName
AppPublisher=Ihr Name
AppPublisherURL=http://www.IhrName.de
AppSupportURL=http://www.IhrName.de
AppUpdatesURL=http://www.IhrName.de
DirExistsWarning=Auto
DefaultDirName={pf}\meinProgramm
DefaultGroupName=Mein Programm
LicenseFile=
InfoBeforeFile=
OutputDir=C:\Projekte\Setup\output
OutputBaseFilename=IhrName-setup
SetupIconFile=C:\Projekte\Setup\IhrName.ico
Compression=lzma
SolidCompression=yes
PrivilegesRequired=admin
UsePreviousAppDir=yes

[Languages]
// hier könnte man weitere Sprachen hinzufügen, englisch ist default, zusätzlich in diesem Fall deutsch
Name: „german“; MessagesFile: „compiler:Languages\German.isl“
Name: en; MessagesFile: compiler:default.isl; InfoBeforeFile: C:\Projekte\Setup\readme.rtf

[Tasks]
Name: „desktopicon“; Description: „{cm:CreateDesktopIcon}“; GroupDescription: „{cm:AdditionalIcons}“; components: programm; Flags: unchecked
Name: „quicklaunchicon“; Description: „{cm:CreateQuickLaunchIcon}“; GroupDescription: „{cm:AdditionalIcons}“; components: programm; Flags: unchecked

[Files]
Source: „C:\Projekte\setup\meinProgramm.exe“; DestDir: „{app}“; components: programm; Flags: ignoreversion
Source: „C:\Projekte\setup\meinProgramm-hilfe.chm“; DestDir: „{app}“; components: programm; Flags: ignoreversion
Source: „C:\Projekte\setup\readme.rtf“; DestDir: „{app}“; components: programm; Flags: ignoreversion
Source: „C:\Projekte\setup9\meinProgramm.ico“; DestDir: „{app}“; components: programm; Flags: ignoreversion

Source: „C:\Projekte\setup\help\*“; DestDir: „{app}\help“; components: programm; Flags: ignoreversion recursesubdirs createallsubdirs
Source: „C:\Projekte\setup\reports\*“; DestDir: „{app}\reports“; components: programm; Flags: ignoreversion recursesubdirs createallsubdirs
Source: „C:\Projekte\setup\datenbanken\*“; DestDir: {code:GetDataDir}\; components: datenbank; Flags: recursesubdirs createallsubdirs uninsneveruninstall  onlyifdoesntexist

; vers. DLLs/OCX könnten dazu kommen, macht Sinn diese in einem Unterverzeichnis des Setup-Verzeichnisses zu sammeln
; z.B. VB-Runtime, u.a. wäre hier denkbar:
Source: C:\Projekte\setup\winsystem\mfc70.dll; DestDir: „{sys}“; components: runtime; Flags: sharedfile uninsneveruninstall  onlyifdoesntexist
Source: C:\Projekte\setup\winsystem\msvcrt.dll; DestDir: {sys}; components: runtime; Flags: sharedfile uninsneveruninstall  onlyifdoesntexist
Source: C:\Projekte\setup\winsystem\msvcr70.dll;  DestDir: {sys};components: runtime; Flags: sharedfile uninsneveruninstall  onlyifdoesntexist
Source: C:\Projekte\setup\winsystem\msvcp71.dll;  DestDir: {sys}; components: runtime; Flags: sharedfile uninsneveruninstall  onlyifdoesntexist
Source: C:\Projekte\setup\winsystem\comctl32.ocx; DestDir: {sys}; components: runtime;  Flags: regserver restartreplace uninsneveruninstall sharedfile onlyifdoesntexist
Source: C:\Projekte\setup\winsystem\richtx32.ocx; DestDir: {sys}; components: runtime;  Flags: restartreplace uninsneveruninstall sharedfile regserver onlyifdoesntexist
Source: C:\Projekte\setup\winsystem\msvbvm60.dll; DestDir: {sys};components: runtime; OnlyBelowVersion: 0,6; Flags: regserver restartreplace uninsneveruninstall sharedfile onlyifdoesntexist
Source: C:\Projekte\setup\winsystem\comdlg32.ocx; DestDir: {sys}; components: runtime; Flags: restartreplace uninsneveruninstall sharedfile regserver onlyifdoesntexist
Source: C:\Projekte\setup\winsystem\mscomctl.ocx; DestDir: {sys}; components: runtime;  Flags: restartreplace uninsneveruninstall sharedfile regserver onlyifdoesntexist
Source: C:\Projekte\setup\winsystem\comct232.ocx; DestDir: {sys}; components: runtime; Flags: restartreplace uninsneveruninstall sharedfile regserver onlyifdoesntexist
Source: C:\Projekte\setup\winsystem\mscomct2.ocx; DestDir: {sys}; components: runtime; Flags: restartreplace uninsneveruninstall sharedfile regserver onlyifdoesntexist
Source: C:\\Projekte\setup\winsystem\comct332.ocx; DestDir: {sys}; components: runtime; Flags: restartreplace uninsneveruninstall sharedfile regserver onlyifdoesntexist

; Microsoft Visual C++ 7.1 Runtime DLL
; wenn noch keine vorhanden, schreibe eine Kopie von MSVCR71.DLL in das Systemverzeichnis
; um erfolgreich VFP9R.DLL registrieren zu können. deleteafterinstall um die Datei hinterher zu entfernen
; wenn Installation komplett. Deleteafterinstall flag entfernt keine vor der Installation bereits vorhandenen Dateien
; also sicher, wenn diese Datei nicht enfernt werden sollte (weil von anderen Prg benutzt)
Source: C:\Projekte\setup\winsystem\msvcr71.dll; DestDir: {sys}; components: runtime; Flags: restartreplace uninsneveruninstall sharedfile

; Microsoft Visual FoxPro 9.0 Runtime Support Libraries
Source: C:\Projekte\Setup\winsystem\gdiplus.dll; DestDir: {cf}\Microsoft Shared\VFP; components: runtime; Flags: sharedfile uninsneveruninstall restartreplace
// eventuell anpassen, falls die VFP-Runtime woanders angelegt ist
Source: C:\Programme\Common Files\Microsoft Shared\VFP\vfp9r.dll; DestDir: {cf}\Microsoft Shared\VFP; components: runtime; Flags: regserver sharedfile uninsneveruninstall restartreplace
Source: C:\Programme\Common Files\Microsoft Shared\VFP\vfp9t.dll; DestDir: {cf}\Microsoft Shared\VFP; components: runtime; Flags: sharedfile uninsneveruninstall restartreplace
Source: C:\Programme\Common Files\Microsoft Shared\VFP\vfp9renu.dll; DestDir: {cf}\Microsoft Shared\VFP; components: runtime; Flags: sharedfile uninsneveruninstall restartreplace
Source: C:\Programme\Common Files\Microsoft Shared\VFP\vfp9rdeu.dll; DestDir: {cf}\Microsoft Shared\VFP; components: runtime; Flags: sharedfile uninsneveruninstall restartreplace

[Files]
// eventuell anpassen, falls die VFP-Runtime woanders angelegt ist
Source: „C:\Program Files\Common Files\Microsoft Shared\VFP\foxhhelp9.exe“;   DestDir: „{cf}\Microsoft Shared\VFP“; components: runtime; Flags: sharedfile uninsneveruninstall restartreplace
Source: „C:\Program Files\Common Files\Microsoft Shared\VFP\foxhhelpps9.dll“; DestDir: „{cf}\Microsoft Shared\VFP“; components: runtime; Flags: sharedfile uninsneveruninstall restartreplace regserver

; Microsoft Report Runtime Files for Visual FoxPro 9.0
; nicht benötigt für V8 oder früher
Source: C:\Programme\Common Files\Microsoft Shared\VFP\ReportPreview.app; DestDir: {cf}\Microsoft Shared\VFP; Flags: sharedfile uninsneveruninstall restartreplace
Source: C:\Programme\Common Files\Microsoft Shared\VFP\ReportOutput.app; DestDir: {cf}\Microsoft Shared\VFP; Flags: sharedfile uninsneveruninstall restartreplace
Source: C:\Programme\Common Files\Microsoft Shared\VFP\ReportBuilder.app; DestDir: {cf}\Microsoft Shared\VFP; Flags: sharedfile uninsneveruninstall restartreplace
Source: C:\Projekte\setup\winsystem\gdiplus.dll; DestDir: {cf}\Microsoft Shared\VFP; components: runtime; Flags: sharedfile uninsneveruninstall restartreplace

[Icons]
Name: „{group}\IhreProgrammGruppe“; Filename: „{app}\IhrProgramm.exe“; WorkingDir: „{app}“; comment: „Beschreibung Ihr Programm“; components: programm;
Name: „{group}\{cm:UninstallProgram,IhrProgramm}“; components: programm; Filename: „{uninstallexe}“

Name: „{commondesktop}\IhrProgramm“; Filename: „{app}\IhrProgramm.exe“; Tasks: desktopicon; components: programm;
Name: „{userappdata}\Microsoft\Internet Explorer\Quick Launch\IhrProgramm“; Filename: „{app}\IhrProgramm.exe“; Tasks: quicklaunchicon; components: programm;

[Run]
; registriert das VFP Hilfesystem
Filename: {cf}\Microsoft Shared\VFP\foxhhelp9.exe; Parameters: /regserver
Filename: „{app}\IhrProgramm.exe“; Description: „{cm:LaunchProgram,IhrProgramm}“; Flags: nowait postinstall skipifsilent; components: programm;

[Code]
var
DatabasePage: TInputDirWizardPage;
DataDir: String;

function GetDataDir(S: String): String;
begin
{ gibt das DB-Verzeichnis zurück }
Result := DataDir;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
{ DB-Verzeichnis auswählen soll nur angezeigt werden, wenn die entsprechende Option ausgewählt ist}
if (PageID = DatabasePage.id) and (IsComponentSelected(‚datenbank‘)=false) then
Result := True
else
Result := False;
end;

function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo,
MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
var
S: String;
begin
{ Füllt die ‚Bin Bereit‘ Seite mit allen Infos, muss überschrieben werden, damit die Infos der Nicht-Standard-Seite Datenbanken angezeigt werden}
S := “;
S := S +  MemoDirInfo + NewLine+ NewLine;
s:= s+ MemoComponentsInfo+Newline+ NewLine;
s:= s+ MemoTypeInfo+Newline+ NewLine;
s:= s+ MemoGroupInfo+Newline+ NewLine;
s:= s+ MemoTasksInfo+Newline;
// nur wenn Option ausgewählt
IF (IsComponentSelected(‚datenbank‘)=true) then
s:=s+’Datenbankverzeichnis: ‚+DataDir;
Result := S;
end;

// Erstellt die Zusatzseite zur Wahl des DB-Verzeichnisses
procedure InitializeWizard();
begin
DatabasePage := CreateInputDirPage(wpSelectComponents,
‚Wählen Sie das Datenbankverzeichnis‘, ‚Wo möchten Sie die Datenbanken ablegen?‘,
‚Die Datenbanken werden erstellt im folgenden Verzeichnis.’#13#10#13#10 +
‚Wählen Sie Weiter, um fortzufahren. Wählen Sie „Durchsuchen“, um ein anderes Verzeichnis zu wählen.‘,
False, ‚Neues Verzeichnis‘);
// item  hinzufügen
DatabasePage.add(‚Datenbankverzeichnis‘);
// Startwert setzen (optional)
DatabasePage.Values[0] := ‚c:\IhrProgramm\datenbanken‘;
// Wert in Variable einlesen
DataDir := DatabasePage.Values[0];
end;

Werbung

Aktuelle Top Aktionen bei Acer, HP, Lenovo, Bitdefender & Co

Angebote bei Acer
Acer Gaming Week: Bis zu 15% Rabatt auf Acer Gaming Notebooks, PCs und Zubehör bis 21. August 2018


Angebote bei HP
» HP 10% Gutschein für All-in-One PCs:10% Rabatt mit HP Gutschein HPTD1XA818 die HP All-in-One PCs im HP Store in dieser Liste


Angebote bei Lenovo
» Lenovo Top Wochenangebote: Heiße ThinkPad und IdeaPad Wochenangebote mit großer Auswahl und dicken Rabatten


Weitere Möglichkeiten
» Top bei Otto: Sehr gute HP Notebook Angebote, teils mit Extras wie 4 Jahre Garantie und mehr
» Mehr Aktionen in der Übersicht: Aktuelle HP Angebote und mehr auf einem Blick


Aktuelle Bitdefender Aktionen:
» Top Angebot: Bitdefender "The Darkest Minds Promotion" mit kostenlosem Gewinnspiel und Angebot Total Security 2019 MultiDevice nur 39,99€ statt 79,99 Euro (50% Rabatt)
» Bitdefender Sommer-Aktion Version 2019 mit 25% auf Bitdefender Antivirus Plus 2019 (3 Geräte und 1 Jahr), 42% auf Bitdefender Internet Security 2019 (3 Geräte und 1 Jahr) und 50% auf Bitdefender Total Security Multi Device 2019 (5 Geräte und 1 Jahr)
» Bitdefender +1 Jahr dazu-Aktion
» Top für neue PCs! Bitdefender AntiVirus Plus Lebenslang Edition: 5 Jahre Schutz für nur für nur 89,95
Weitere aktuelle Bitdefender Angebote » Alle Bitdefender Angebote auf einem Blick

Werbung
www.unitymedia.de

Verwandte Themen:


Sorry! Unser Kommentarfunktion ist vorübergehend geschlossen.