Как заставить переключатель командной строки Inno Setup /DIR работать с пользовательской страницей пути

Когда я использую /DIR переключатель командной строки

"Mysoft.exe" /VERYSILENT /installerbusiness /DIR="C:\Program Files (x86)"

Указанный путь не используется для поля пути на моей пользовательской странице:

Я использую код, основанный на Использовать два / несколько выбранных каталогов с пользовательской страницы в разделе Файлы.

Это пример кода, который я использую.

[Code]

var
  Install: TInputDirWizardPage;

procedure InitializeWizard();
begin
  Install :=
    CreateInputDirPage(
      wpSelectDir, CustomMessage('Readyinstall'), 
      CustomMessage('Readyinstallpc'), #13#10#13#10 + CustomMessage('Tocontinuet'),
      True, 'Mysoft');

  Install.Add(CustomMessage('DestFolder'));

  Install.Values[0] := ('C:\Program Files\Mysoft');
  { ... }
end;

1 ответ

Решение

Если вы хотите стандартное поведение "пути установки" Inno Setup, когда включает обработку /DIR= переключатель командной строки, вы должны связать свой пользовательский путь к стандартному.

В частности, вы должны скопировать начальное значение WizardForm.DirEdit к вашей пользовательской коробке:

var
  Page: TInputDirWizardPage;

procedure InitializeWizard();
begin
  ...
  Page := CreateInputDirPage(...);
  Page.Add(...);
  Page.Values[0] := WizardForm.DirEdit.Text;
end;

Это решение обрабатывает не только /DIR=, но также /LOADINF=,

Чтобы дополнить код выше, вы должны скопировать значение обратно в WizardForm.DirEdit, Таким образом, вы убедитесь, что при повторной установке / обновлении ранее выбранное значение используется повторно. Это показано в пункте 1) моего ответа на Использование двух / нескольких выбранных каталогов с пользовательской страницы в разделе "Файлы".


Если вышесказанное слишком сложно (или неочевидно) для реализации, из-за сложной логики вашего установщика, вы можете обработать /DIR= переключить программно самостоятельно. См. Настройка значения поля пользовательской страницы Inno Setup из командной строки.

procedure InitializeWizard();
var
  DirSwitchValue: string;
begin
  Install := ...;

  Install.Add(...);

  DirSwitchValue := ExpandConstant('{param:DIR}');
  if DirSwitchValue <> '' then
  begin
    Install.Values[0] := DirSwitchValue;
  end
    else
  begin
    Install.Values[0] := ExpandConstant('{pf}\Mysoft');
  end;
end;

Это решение явно не справляется /LOADINF=, Как обрабатывать .inf Файлы отображаются в Inno Setup Загрузка значений по умолчанию для пользовательских настроек установки из файла (.inf) для автоматической установки.

Кроме того, с этим решением ранее использованный путь установки не будет использоваться для обновлений / переустановок. Как реализовать это, показано в Inno Setup с тремя целевыми папками.

Другие вопросы по тегам