![]() |
Inno Setup: Bereits installierte Komponenten disablen
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:
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?
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; 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 |
Re: Inno Setup: Bereits installierte Komponenten disablen
Hallo,
vielleicht hilft dir dies weiter ![]() oder, natürlich angepasst (ungetestet)
Delphi-Quellcode:
procedure CurPageChanged(CurPageID: Integer);
begin if CurPageID = wpSelectComponents then WizardForm.ComponentsList.ItemEnabled[0] :=FreePDFinstalled() ; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz