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

grep 2.5.3 представил - параметр исключать-dir, который будет работать способ, которым Вы хотите.

grep -rI --exclude-dir=\.svn PATTERN .

можно также установить переменную среды: GREP_OPTIONS = "-исключать-dir =. svn"

я буду второй Andy голосование за ack, хотя, это является лучшим.

5
задан 19 August 2009 в 11:31
поделиться

3 ответа

Кажется, нет способа изменить константу сценария с помощью сценария.
Я думаю, что лучше всего изменить целевой каталог для каждой записи в разделе [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"

без необходимости в скриптах. Если есть сомнения, выберите более простое решение.

3
ответ дан 18 December 2019 в 11:59
поделиться

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

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

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

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

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

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

10
ответ дан 18 December 2019 в 11:59
поделиться

У меня аналогичная ситуация, когда приложение установки получает путь установки из командной строки. Я использую решение, предложенное 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;

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

2
ответ дан 18 December 2019 в 11:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: