Hallo liebe
DP'ler,
ich habe in meinem Inno Setup die Idee gehabt, dass man bei der Auswahl der Komponenten bereits vorhandene Zusatz-Tools die Checkboxen ausgrauen könnte.
Konkret bestehen die Zusatztools aus: Ghostscript, FreePDF,
BDE. Ich hab gelesen es wäre nicht empfehlenswert einfach drüber zu installieren, deswegen sollen die Checkboxen deaktiviert werden, wenn mein Setup feststellt, dass diese Programme bereits vorhanden sind. Dazu gibt's ne Hinweismeldung.
So weit, so gut. Nun steh ich vor dem Problem der Erkennung dieser Tools. Ich lese dafür aus der Registry, das ist nicht das Problem; das Problem steckt in einer Schleife und ich weiß nicht mehr weiter, mit welchen Daten ich meine Funktionen füttern soll. Ich steh total auf'm Schlauch. Anbei der Code:
Delphi-Quellcode:
function CheckForComponents(): Boolean;
var i: Integer;
begin
for i := 0
to WizardForm.ComponentsList.ItemIndex - 1
do
begin
if ComponentInstalled
then Result := true;
end;
end;
function gsInstalled(): Boolean;
begin
if RegKeyExists(HKEY_LOCAL_MACHINE, '
SOFTWARE\GPL Ghostscript')
then //Check auf installiertes Ghostscript
Result := true;
end;
function FreePDFinstalled(): Boolean;
begin
if RegKeyExists(HKEY_LOCAL_MACHINE, '
SOFTWARE\shbox\FreePdfXP')
then //Check auf installiertes FreePDF
Result := true
end;
function BDEinstalled(): Boolean;
begin
if RegKeyExists(HKEY_LOCAL_MACHINE, '
SOFTWARE\Borland\Database Engine')
then //Check auf installierte BDE
Result := true;
end;
function AlreadyInstalledComponents():
String;
var
List: TStrings;
i: Integer;
ComponentInstalled: Boolean;
begin
for i := 0
to WizardForm.ComponentsList.ItemIndex - 1
do
begin
if ComponentInstalled
then
List.Add(WizardForm.ComponentsList.ItemCaption[i] + #13 + #10);
end;
Result := List.Text;
end;
procedure CurPageChanged(CurPageID: Integer);
var
i: Integer;
begin
if CurPageID = wpSelectComponents
then
begin
for i := 0
to WizardForm.ComponentsList.ItemIndex - 1
do
begin
if CheckForComponents()
then
MsgBox('
Es wurden folgende bereits installierte Komponenten gefunden:' + #13 + #10 + #13 + #10 + AlreadyInstalledComponents() + #13 + #10 + #13 + #10 + '
Wenn Sie diese aktualisieren möchten, brechen Sie die Installation jetzt ab, deinstallieren Sie die aufgeführten Programme und starten Sie Setup erneut.', mbError, MB_OK);
end;
end;
end;
Ich bin mir im Klaren, dass
ComponentInstalled nirgends deklariert wurde. Es ist auch nur als Platzhalter gedacht. Gleich noch ne Frage aus Interesse: Macht an diesen Stelle der Aufruf einer weiteren Funktion Sinn?
Sinn und Unsinn der Vorgehensweise mit der ich an den User herantrete sei mal dahingestellt. Es geht primär darum: Einen Warnhinweis mit einer Liste der Komponenten auszugeben, die mein Setup auf dem Zielsystem entdeckt hat und die entprechenden Komponenten von der Auswahl und Installation durch den User auszuschließen (Sprich: CheckBox.Enabled := False).
Vielen Dank schon mal im Vorraus für eure Hilfe,
SoD