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;
WebSite X5 Winter Angebot mit 35% Rabatt
Professionelle Homepages / Online-Shops ohne Programmierung erstellen mit WebSite X5 und dabei aktuell 35% sparen:
WebSite X5 Evo jetzt bereits für 69,97 statt 99,95€
WebSite X5 Pro jetzt bereits für 139,97 Euro statt 199,95€
WebSite X5 Agency für 244,94 statt 349,95€