Load defaults for Inno Setup custom installation settings from a file (.inf) for silent installation
Asked Answered
B

1

5

I have a setup script that allows the user to specify where they would like to install my application. It is in the form of a Pascal script within the [Code] block.

var
  SelectUsersPage: TInputOptionWizardPage;
  IsUpgrade : Boolean;
  UpgradePage: TOutputMsgWizardPage;

procedure InitializeWizard();
var
  AlreadyInstalledPath: String;
begin
  // Determine if it is an upgrade...
  // Read from registry to know if this is a fresh install or an upgrade
  if RegQueryStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppId}_is1', 'Inno Setup: App Path', AlreadyInstalledPath) then
    begin
      // So, this is an upgrade set target directory as installed before
      WizardForm.DirEdit.Text := AlreadyInstalledPath;
      // and skip SelectUsersPage
      IsUpgrade := True;

      // Create a page to be viewed instead of Ready To Install
      UpgradePage := CreateOutputMsgPage(wpReady,
        'Ready To Upgrade', 'Setup is now ready to upgrade {#MyAppName} on your computer.',
        'Click Upgrade to continue, or click Back if you want to review or change any settings.');
    end
  else
    begin
      IsUpgrade:= False;
    end;

  // Create a page to select between "Just Me" or "All Users"
  SelectUsersPage := CreateInputOptionPage(wpLicense,
    'Select Users', 'For which users do you want to install the application?',
    'Select whether you want to install the library for yourself or for all users of this computer. Click next to continue.',
    True, False);

  // Add items
  SelectUsersPage.Add('All users');
  SelectUsersPage.Add('Just me');

  // Set initial values (optional)
  SelectUsersPage.Values[0] := False;
  SelectUsersPage.Values[1] := True;
end;

So the question is how could I support a silent installation? When a user invokes /SILENT or /VERYSILENT the installer defaults to SelectUsersPage.Values[1], which is for Just Me. I want to help support the user that wants to change the installation directory with providing an answer file.

I didn't develop all of this code, and am a newbie with Pascal.

Thanks.

Blanketyblank answered 27/7, 2016 at 22:10 Comment(0)
C
6

You can add a custom key (say Users) to the .inf file created by the /SAVEINF.

Then in the installer, lookup the /LOADINF command-line argument and read the key and act accordingly:

procedure InitializeWizard();
var
  InfFile: string;
  I: Integer;
  UsersDefault: Integer;
begin
  ...

  InfFile := ExpandConstant('{param:LOADINF}');

  UsersDefault := 0;

  if InfFile <> '' then
  begin
    Log(Format('Reading INF file %s', [InfFile]));
    UsersDefault :=
      GetIniInt('Setup', 'Users', UsersDefault, 0, 0, ExpandFileName(InfFile));
    Log(Format('Read default "Users" selection %d', [UsersDefault]));
  end
    else
  begin
    Log('No INF file');
  end;

  SelectUsersPage.Values[UsersDefault] := True;
end;
Catafalque answered 29/7, 2016 at 6:5 Comment(1)
Thank you! I didn't get at first where in the INF file I needed to store the key and its value until I looked up GetiniInt() function, and saw that I needed to create a Users key in the [Setup] section. I had to add some additional code to see if IsUpgrade is set to True so the code block you provided is not executed during an upgrade. Thank you very much for your help!Blanketyblank

© 2022 - 2024 — McMap. All rights reserved.