Inno Setup从文件(.inf)加载默认的自定义安装设置,用于静默安装



我有一个安装脚本,允许用户指定要在哪里安装我的应用程序。它的形式是[Code]块中的Pascal脚本。

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, 'SoftwareMicrosoftWindowsCurrentVersionUninstall{#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;

因此,问题是我如何支持静默安装?当用户调用/SILENT/VERYSILENT时,安装程序默认为SelectUsersPage.Values[1],即Just Me。我想通过提供应答文件来帮助支持想要更改安装目录的用户。

我没有开发所有这些代码,我是Pascal的新手。

谢谢。

您可以将自定义密钥(如Users)添加到由/SAVEINF创建的.inf文件中。

然后在安装程序中,查找/LOADINF命令行参数,读取密钥并相应地执行操作:

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;

相关内容

  • 没有找到相关文章

最新更新