function ApplyPathRedirRules(const Path64Bit: Boolean; const Path: String; const TargetProcess: TPathRedirTargetProcess): String;
Применяет перенаправление системного пути к указанному пути и возвращает перезаписанный путь.
Параметр Path64Bit определяет текущую разрядность пути Path: True — 64-бит, а False — 32-бит. Параметр TargetProcess определяет разрядность процесса, который в конечном итоге будет обращаться к преобразованному пути. В таблице раздела справки "Перенаправление системного пути" это, соответственно, "разрядность записи" и "разрядность целевого процесса".
Перед перезаписью путь раскрывается с помощью функции ExpandFileName и преобразуется в удлиненный путь (также известный как "суперпуть").
Раскрытие пути и преобразование в удлиненный путь выполняются всегда, даже если ничего не перезаписывается.
На системах под управлением Windows 32-бит параметр Path64Bit должен быть равен False, в противном случае будет сгенерировано исключение.
Класс TPathRedirTargetProcess — это перечисляемый тип и объявлен следующим образом:
TPathRedirTargetProcess = (tpCurrent, tpNativeBit, tp32Bit, tp32BitPreferSystem32);
| Значение | Разрядность целевого процесса |
|---|---|
| tpCurrent | 64-бит в 64-разрядном установщике, или 32-бит в 32-разрядном установщике |
| tpNativeBit | 64-бит при запуске на Windows 64-бит или 32-бит на Windows 32-бит |
| tp32Bit | 32-бит |
| tp32BitPreferSystem32 | 32-бит, в преобразованном пути используется System32 вместо SysWOW64 (см. главу "Перенаправление системного пути") |
var InPath, OutPath: String; begin InPath := ExpandConstant('{sys}\MyLibrary.dll'); Log(InPath); // Обычно записывается путь: C:\Windows\System32\MyLibrary.dll // Преобразование 64-разрядного пути в путь, доступный в текущем процессе if IsWin64 then begin OutPath := ApplyPathRedirRules(True, InPath, tpCurrent); Log(OutPath); // В 32-разрядном установщике записывается путь: \\?\C:\Windows\Sysnative\MyLibrary.dll // В 64-разрядном установщике записывается путь: \\?\C:\Windows\System32\MyLibrary.dll end; // Преобразование 32-разрядного пути в путь, доступный в текущем процессе OutPath := ApplyPathRedirRules(False, InPath, tpCurrent); Log(OutPath); // В 32-разрядном установщике записывается путь: \\?\C:\Windows\SysWOW64\MyLibrary.dll // В 64-разрядном установщике записывается путь: \\?\C:\Windows\SysWOW64\MyLibrary.dll end
ApplyPathRedirRulesForCurrentProcess
PathConvertSuperToNormal