Pascal Scripting: EnableFsRedirection

Прототип

function EnableFsRedirection(const Enable: Boolean): Boolean;

Описание

Управляет состоянием перенаправления файловой системы в WOW64 (с некоторыми исключениями) при обращении к файлам встроенными функциями Inno. Укажите для параметра Enable значение True, чтобы при вызове этих функций оставить перенаправление включенным, или значение False, чтобы отключить перенаправление. Функция возвращает предыдущее состояние перенаправления (True, если перенаправление было включено).

Если параметру Enable передаётся значение False и пользователь не работает в поддерживаемой 64-разрядной версии Windows, будет вызвано исключение. Чтобы избежать исключения, сначала вызовите функцию IsWin64.

Комментарии

После выполнения операции, требующей изменения состояния перенаправления, обязательно восстановите предыдущее состояние. Всегда используйте конструкцию try..finally, чтобы гарантировать, что предыдущее состояние будет восстановлено, даже если произойдёт исключение. Ниже приведен пример.

По умолчанию в 32-разрядном режиме установки перенаправление файловой системы включено, а в 64-разрядном режиме установки отключено.

Эта функция не влияет на вызов функций из внешних файлов DLL. При вызове внешних функций перенаправление файловой системы всегда остаётся включенным.

Допустимо вызвать эту функцию со значением True для параметра Enable, если пользователь не работает на 64-разрядной версии Windows. Но в этом случае вызов не будет действовать.

Пример

В примере ниже показано, как запустить исполняемый файл, расположенный в 64-разрядном каталоге System. (Примечание: в 64-разрядном режиме установки нет необходимости использовать вызов EnableFsRedirection, т.к. по умолчанию перенаправление файловой системы уже отключено.)

var
  OldState: Boolean;
  ResultCode: Integer;
begin
  // Сперва проверяем, что пользователь запустил установку
  // в Windows 64-бит, иначе вызов EnableFsRedirection(False)
  // создаст исключение.
  if IsWin64 then
  begin
    // Отключаем перенаправление, чтобы cmd.exe запускался
    // из 64-bit каталога System.
    OldState := EnableFsRedirection(False);
    try
      Exec(ExpandConstant('{cmd}'), '', '', SW_SHOWNORMAL,
        ewWaitUntilTerminated, ResultCode);
    finally
      // Восстанавливаем предыдущее состояние перенаправления.
      EnableFsRedirection(OldState);
    end;
  end;
end;