通过Inno Setup中的任务启动自定义代码

时间:2010-02-17 14:35:43

标签: inno-setup

如果用户在安装期间检查相应的复选框,我想执行一些代码。从阅读帮助文件,看起来使用该任务的唯一方法是将其与文件/图标/等中的条目相关联。部分。我真的想将它与代码部分中的程序联系起来。可以这样做,如果是这样,怎么办?

2 个答案:

答案 0 :(得分:11)

您无需定义自己的向导页面。您只需将它们添加到其他任务页面即可。

[Tasks]
Name: associate; Description:"&Associate .ext files with this version of my program"; GroupDescription: "File association:"

[Code]
function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := True;
  if CurPageID = wpSelectTasks then
  begin
    if WizardForm.TasksList.Checked[1] then
      MsgBox('First task has been checked.', mbInformation, MB_OK);
    else
      MsgBox('First task has NOT been checked.', mbInformation, MB_OK);
  end;
end;

this post将信用转到TLama。

答案 1 :(得分:4)

您可以通过添加包含复选框的自定义向导页面来执行此操作,并在用户单击该页面上的“下一步”时执行所有选中复选框的代码:

[Code]
var
  ActionPage: TInputOptionWizardPage;

procedure InitializeWizard;
begin
  ActionPage := CreateInputOptionPage(wpReady,
    'Optional Actions Test', 'Which actions should be performed?',
    'Please select all optional actions you want to be performed, then click Next.',
    False, False);

  ActionPage.Add('Action 1');
  ActionPage.Add('Action 2');
  ActionPage.Add('Action 3');

  ActionPage.Values[0] := True;
  ActionPage.Values[1] := False;
  ActionPage.Values[2] := False;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := True;
  if CurPageID = ActionPage.ID then begin
    if ActionPage.Values[0] then
      MsgBox('Action 1', mbInformation, MB_OK);
    if ActionPage.Values[1] then
      MsgBox('Action 2', mbInformation, MB_OK);
    if ActionPage.Values[2] then
      MsgBox('Action 3', mbInformation, MB_OK);
  end;
end;

复选框可以是标准控件或列表框中的项目,有关详细信息,请参阅Pascal Scripting上的Inno Setup文档。

如果您希望根据是否选择了某个组件或任务来执行代码,请改用IsComponentSelected()IsTaskSelected()函数。