Как изменить параметр defaultdirname непосредственно перед установкой в ​​Inno Setup?

Я хочу изменить параметр defaultdirname в части ssInstall. Как я могу это сделать? Есть ли функция для настройки параметров [Setup].


person Community    schedule 19.08.2009    source источник


Ответы (3)


Доступны следующие глобальные объекты: MainForm типа TMainForm, WizardForm типа TWizardForm и UninstallProgressForm типа TUninstallProgressForm и одна специальная константа: crHand типа TControl.Cursor.

Если вы хотите установить в мастере каталог по умолчанию, просто получите доступ к его компонентам, как в обычном коде delphi.

Например, установите для каталога произвольное значение:

WizardForm.DirEdit.Text := 'c:\test';

чтобы прочитать это значение, вы можете использовать функцию WizardDirValue.

Я говорю "просто доступ" ... но мне потребовался час, чтобы понять;)

person Jonx    schedule 21.09.2009

Похоже, что нет способа изменить константу сценария с помощью сценария.
Я думаю, что лучше всего изменить целевой каталог для каждой записи в разделе [Files], например

[Files]
Source: "MYPROG.EXE"; DestDir: "{code:NewTargetDir}"

и создайте новый установочный каталог следующим образом:

[Code]
function NewTargetDir(Param: String): String;
begin
  Result := ExpandConstant('{app}') + '\MySubDir';
end;

Поскольку функция NewTargetDir будет вызываться непосредственно перед фактическим копированием файла, это должно сработать.

Однако я считаю, что вам следует пересмотреть свой подход. Сначала просят пользователя указать каталог для установки, а затем фактическая установка в другой каталог, что, по-видимому, является вашим намерением, это неправильный путь, ИМО. У вас действительно есть веская причина для установки в каталог, отличный от указанного пользователем? Кроме того, результат моего примера кода также может быть достигнут, если указать

[Files]
Source: "MYPROG.EXE"; DestDir: "{app}\MySubDir"

без скриптов. В случае сомнений выберите более простое решение.

person Treb    schedule 19.08.2009
comment
Я встроил другой установщик (хост-приложения) в установщик плагина. плагин при запуске проверяет путь установки из реестра (хост-приложения). Однако, если он еще не был установлен, этот путь на данный момент не определен. Затем установщик подключаемого модуля запускает установщик основного приложения до начала фактической установки. Это момент, когда я хочу обновить имя каталога до (теперь определенного) пути установки хост-приложения. Здесь мне нужно отредактировать файл installdir. На самом деле, даже в этом случае Inno устанавливает файлы в правильный каталог, но не файлы unins000.exe / dat, что странно. - person ; 20.08.2009
comment
Хорошо, это квалифицируется как «веская причина» в моей книге ;-) - person Treb; 20.08.2009

У меня аналогичная ситуация, когда приложение установки получает путь установки из командной строки. Я использую решение, предложенное Jonx:

WizardForm.DirEdit.Text := 'c:\test';

Пример:

function CompareParameter(param, expected: String): Boolean;
begin
  Result := False;
  if Length(param) >= Length(expected) then
  begin
    if CompareText(Copy(param, 1, Length(expected)), expected) = 0 then
    begin
      Result := True;
    end;
  end;
end;

function GetParameter(expectedParam: String): String;
var
  i : LongInt;
begin
  Result := '';
  for i := 0 to ParamCount() do
  begin
    if CompareParameter(ParamStr(i), '/' + expectedParam + '=') then
    begin
      Result := Copy(ParamStr(i), Length(expectedParam) + 3, Length(ParamStr(i)));
      break;
    end;
  end;
end;

procedure InitializeWizard();
var
  newInstallFolder: String;
begin
  newInstallFolder := GetParameter('INSTALL_FOLDER');
  if Length(newInstallFolder) > 2 then
  begin
    if Copy(newInstallFolder, 1, 1) = '"' then
      newInstallFolder := Copy(newInstallFolder, 2, Length(newInstallFolder) - 2)
    if Length(newInstallFolder) > 1 then
      WizardForm.DirEdit.Text := newInstallFolder;
  end;
end;

Приложение установки запускается из другой установки в беззвучном режиме. У меня это сработало.

person Gilberto Olimpio    schedule 28.10.2009
comment
Вам не нужно этого делать; установщик, созданный Inno Setup, уже принимает аргумент / dir - person Thomas Levesque; 04.04.2014
comment
Кроме того, даже если вы действительно хотели это сделать (что вам не нужно), Inno также поддерживает более простой метод синтаксического анализа параметров командной строки с использованием констант {param:...}. - person Miral; 23.02.2017