Я борюсь с проблемой определения местоположения каталога 64-битных программных файлов в 64-битной Windows Vista из 32-битного приложения.
Звонки на SHGetKnownFolderPath(FOLDERID_ProgramFilesX64)
ничего не возвращают. В статье MSDN KNOWNFOLDERID также говорится, что этот конкретный вызов с FOLDERID_ProgramFilesX64
не поддерживается для 32-разрядного приложения.
Я бы хотел как можно больше не указывать путь к "C: \ Program Files".
Делать что-то вроде GetWindowsDirectory()
, извлекать диск из возвращаемого значения и добавлять к нему «\ Program Files» также не очень приятно.
Как 32-разрядное приложение может правильно определить местоположение папки в 64-разрядной Windows Vista?
Фон
В нашем приложении есть служебный компонент, который должен запускать другие процессы на основе запросов от конкретного пользовательского сеанса. Запускаемые приложения могут быть 32-разрядными или 64-разрядными. Мы делаем это через CreateProcessAsUser()
, передавая токен от инициации пользовательского сеанса. Для вызова CreateProcessAsUser
мы создаем блок среды через API CreateEnvironmentBlock()
. Проблема заключается в том, что CreateEnvironmentBlock()
, используя токен приложения пользовательского сеанса, создает блок с ProgramW6432 = "C: \ Program Files (x86)", что является проблемой для 64-разрядных приложений. Нам нужно переопределить его с правильным значением.