2 Stimmen

InnoSetup, Installation verhindern, wenn eine Aufgabe ausgewählt ist

Mein Inno-Script hat zwei Aufgaben:

[Tasks]
Name: client; Description: FTP-Client installieren
Name: server; Description: FTP-Server installieren

Ich möchte die Installation auf eine nicht aufdringliche Weise verweigern, wenn eine der Aufgaben ausgewählt ist. Unter nicht aufdringlich verstehe ich zum Beispiel das Aktivieren/Deaktivieren der Schaltfläche "Weiter", wenn eine der beiden Aufgaben ausgewählt ist, ohne Werbe-Nachrichtenbox.

Ich bin mir nicht sicher, ob Inno Setup einen Parameter oder eine "Überprüfungs"-Funktion hat, um dies auf einfache Weise zu tun.

Wie könnte ich das machen?

3voto

TLama Punkte 73381

Es gibt keine Möglichkeit, das gewünschte nativ in Inno Setup zu tun. Du musst es selbst aus dem Code heraus machen.

Du kannst hier ein wenig schummeln, indem du die WizardSelectedTasks-Funktion verwendest. Diese Funktion gibt eine kommagetrennte Liste der ausgewählten Aufgabennamen (oder Beschreibungen) zurück und gibt somit einen leeren String zurück, wenn keine Aufgabe ausgewählt ist. Der Rest dreht sich um das Binden des Ereignisses OnClickCheck der Aufgabenliste und das Aktualisieren des Zustands der Schaltfläche "Weiter" sowie das Schreiben eines Abschnitts des Codes zur Initialisierung des Zustands der Schaltfläche "Weiter":

[Setup]
AppName=Mein Programm
AppVersion=1.5
DefaultDirName={pf}\Mein Programm

[Tasks]
Name: client; Description: FTP-Client installieren
Name: server; Description: FTP-Server installieren

[Code]
// Hilfsfunktion
function IsAnyTaskSelected: Boolean;
begin
  Result := WizardSelectedTasks(False) <> '';
end;

// Ereignishandler zum Festlegen des Anfangszustands der Schaltfläche "Weiter" beim Betreten der Aufgabenseite
procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpSelectTasks then
    WizardForm.NextButton.Enabled := IsAnyTaskSelected;
end;

// Methode des Ereignisses zum Klicken der Aufgabenlistenüberprüfung
procedure TasksListClickCheck(Sender: TObject);
begin
  WizardForm.NextButton.Enabled := IsAnyTaskSelected;
end;

procedure InitializeWizard;
begin
  WizardForm.TasksList.OnClickCheck := @TasksListClickCheck;
end;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X