Разрешить переменную PROGRAMFILES из 32-битного приложения в ОС Win64?
Как объясняется в подробностях реализации MSDN WOW64, переменная %PROGRAMFILES%
,
в 32-разрядном процессе в 64-разрядной ОС Windows разрешается
C:\Program Files (x86)
в 64-разрядном процессе в 64-разрядной ОС Windows разрешается
C:\Program Files
Это можно проверить, например, с помощью программы Delphi 10.1, скомпилированной как с 32-разрядной целевой платформой Windows, так и с 64-разрядной целевой платформой Windows:
MyShellExecute('%PROGRAMFILES%');
Итак, как из 32-разрядного приложения Delphi, запущенного в Windows-64bit-OS, получить ОБА:
каталог ProgramFiles для 32-битных программ (
C:\Program Files (x86)
)каталог ProgramFiles для 64-битных программ (
C:\Program Files
)
1 ответ
Используйте следующие переменные среды:
ProgramW6432
получить каталог 64-битных программных файлов.ProgramFiles(x86)
получить каталог 32-битных программных файлов.
Они возвращают одинаковые значения в 32- и 64-разрядных процессах.
Конечно, полагаться на переменные среды всегда немного хрупко. Ваш родительский процесс всегда может изменить эти переменные перед созданием вашего процесса.
Чтобы сделать вашу программу более надежной, вы должны использовать вместо нее известные идентификаторы папок. использование FOLDERID_ProgramFilesX64
а также FOLDERID_ProgramFilesX86
,