【问题标题】:InnoSetup, prevent installation if any task is selectedInnoSetup,如果选择了任何任务,则阻止安装
【发布时间】:2015-03-04 13:08:08
【问题描述】:

我的 inno 脚本有两个任务:

[Tasks]
Name: client; Description: Install FTP client
Name: server; Description: Install FTP server

如果选择了任何任务,我想以非侵入性方式拒绝安装,对于非侵入性,我的意思是例如在选中两个任务之一时启用/禁用“下一步”按钮,没有广告消息be-盒子。

我不确定 innosetup 是否有一个参数或“检查”函数可以以简单的方式执行此操作

我该怎么做?

【问题讨论】:

    标签: installation inno-setup pascal pascalscript


    【解决方案1】:

    在 Inno Setup 中,本机无法做你想做的事。您需要自己从代码中完成。

    您可以在这里使用WizardSelectedTasks 函数作弊。此函数返回一个逗号分隔的选定任务名称(或描述)列表,因此当没有选择任务时它返回一个空字符串。剩下的就是绑定任务列表OnClickCheck事件,更新next按钮启用状态,写一段代码初始化next按钮状态:

    [Setup]
    AppName=My Program
    AppVersion=1.5
    DefaultDirName={pf}\My Program
    
    [Tasks]
    Name: client; Description: Install FTP client
    Name: server; Description: Install FTP server
    
    [Code]
    // helper function
    function IsAnyTaskSelected: Boolean;
    begin
      Result := WizardSelectedTasks(False) <> '';
    end;
    
    // event handler for setting the next button initial state when
    // entering the tasks page
    procedure CurPageChanged(CurPageID: Integer);
    begin
      if CurPageID = wpSelectTasks then
        WizardForm.NextButton.Enabled := IsAnyTaskSelected;
    end;
    
    // method of the task list check click event
    procedure TasksListClickCheck(Sender: TObject);
    begin
      WizardForm.NextButton.Enabled := IsAnyTaskSelected;
    end;
    
    procedure InitializeWizard;
    begin
      WizardForm.TasksList.OnClickCheck := @TasksListClickCheck;
    end;
    

    【讨论】:

    • 我不知道您是否是正式的 InnoSetup 开发人员,但您一如既往地展示了有关 InnoSetup 内部的出色知识。我可以自己尝试 6 个月,但从未找到解决方案,非常感谢您的帮助以及在这里帮助 innosetup 编码人员。
    • 不客气,谢谢!我不是 IS 贡献者(我有一些想法可以解决,但很遗憾没有额外的时间)。但是您可以在 SO 上找到 Jordan RussellMartijn Laan
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2014-10-24
    • 2021-08-21
    • 1970-01-01
    相关资源
    最近更新 更多