How can I add a check box for optional files during install in Inno Setup?

ApprenticeGeek picture ApprenticeGeek · Nov 21, 2012 · Viewed 22.6k times · Source

I'm trying to make a custom checkbox in my custom page (because it's a one page installer), is needed only a checkbox without dialogs or anything, the installer that I'm trying to compile is very linear and simple.

I want to bind FILE3.EXE on a checkbox in this way: if checkbox is checked copy the file (FILE3.EXE) in DestDir, otherwise if checkbox is unchecked skip the file (FILE3.EXE) during installation.

This is the code that I used, obviously the checkbox code is missing because I'm not able to do that

[Files]
Source: FILE1.EXE; DestDir: {app};
Source: FILE2.EXE; DestDir: {app};
Source: FILE3.EXE; DestDir: {app}; //OPTIONAL
[Code]
procedure ExitProcess(uExitCode: UINT);
external '[email protected] stdcall';

var
  MainPage : TWizardPage;
  FolderToInstall : TEdit;
  InstallLocation : String;

procedure CancelClick(Sender: TObject);
begin
  if ExitSetupMsgBox then
  begin
    ExitProcess(0);
  end;
end;

procedure BrowseClick(Sender : TObject);
var
  Dir : String;

begin
  Dir := FolderToInstall.Text;
  if BrowseForFolder('Browse',Dir,false) then
    FolderToInstall.Text := Dir;
  WizardForm.DirEdit.Text := Dir;
end;

procedure InitializeWizard();
var
  LabelFolder : TLabel;
begin
  MainPage := CreateCustomPage(wpWelcome,'','');
  LabelFolder := TLabel.Create(MainPage);
  LabelFolder.Parent := WizardForm;
  LabelFolder.Top := 164;
  LabelFolder.Left := 6;
  LabelFolder.Caption := 'Directory:'

  FolderToInstall := TEdit.Create(MainPage);
  FolderToInstall.Parent := WizardForm;
  FolderToInstall.Top := 182;
  FolderToInstall.Left := 85;
  FolderToInstall.Width := 380;
  FolderToInstall.Text :=  WizardDirValue;
  FolderToInstall.ReadOnly := True;
end;

Answer

jachguate picture jachguate · Nov 21, 2012

You don't have to manually create checkboxes for that. The standard way to let the user choose what to install is to use the [Types] and [Components] sections of your script file.

Take a look at the Components.iss script located in your Inno Setup install folder\examples.

; -- Components.iss --
; Demonstrates a components-based installation.

; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES!

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
OutputDir=userdocs:Inno Setup Examples Output

[Types]
Name: "full"; Description: "Full installation"
Name: "compact"; Description: "Compact installation"
Name: "custom"; Description: "Custom installation"; Flags: iscustom

[Components]
Name: "program"; Description: "Program Files"; Types: full compact custom; Flags: fixed
Name: "help"; Description: "Help File"; Types: full
Name: "readme"; Description: "Readme File"; Types: full
Name: "readme\en"; Description: "English"; Flags: exclusive
Name: "readme\de"; Description: "German"; Flags: exclusive

[Files]
Source: "MyProg.exe"; DestDir: "{app}"; Components: program
Source: "MyProg.chm"; DestDir: "{app}"; Components: help
Source: "Readme.txt"; DestDir: "{app}"; Components: readme\en; Flags: isreadme
Source: "Readme-German.txt"; DestName: "Liesmich.txt"; DestDir: "{app}"; Components: readme\de; Flags: isreadme

[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"

At runtime, the installer presents this dialog within the wizard:

Components dialog