function ExecWithNativeSysDir(const Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ResultCode: Integer): Boolean;
Используйте эту функцию вместо Exec для запуска исполняемого файла, расположенного в 64-разрядном системном каталоге, из 32-разрядного установщика.
Эта функция позволяет избежать проблемы, связанной с тем, что функция Exec в 32-разрядном установщике может запускать такой исполняемый файл только с помощью псевдонима Sysnative, который недоступен для 64-разрядных приложений. Для этого функция временно отключает перенаправление файловой системы WOW64.
В 32-разрядной Windows или в 64-разрядном установщике эта функция является просто псевдонимом для Exec.
var ResultCode: Integer; begin if IsWin64 then begin { Эта команда запустит 32-бит версию cmd.exe в 32-разрядном установщике а 64-бит версию cmd.exe в 64-разрядном установщике. } Exec(ExpandConstant('{cmd}'), '', '', SW_SHOWNORMAL, ewNoWait, ResultCode); { Эта команда запустит 64-бит версию cmd.exe как 32-разрядном установщике, так и в 64-разрядном установщике. } ExecWithNativeSysDir(ExpandConstant('{cmd}'), '', '', SW_SHOWNORMAL, ewNoWait, ResultCode); { НЕПРАВИЛЬНО: эта команда также запустила бы 64-бит версию cmd.exe в 32-разрядном установщике, но она использовала бы псевдоним Sysnative, по которому 64-бит версия cmd.exe недоступна. } // Exec(ApplyPathRedirRulesForCurrentProcess(True, ExpandConstant('{cmd}')), '', '', SW_SHOWNORMAL, ewNoWait, ResultCode); end;