Как 32-разрядное приложение может найти расположение каталога 64-разрядных программных файлов в 64-разрядной версии Windows Vista?
Я борюсь с проблемой того, как определить местоположение каталога 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
мы создаем блок среды черезCreateEnvironmentBlock()
API. Проблема в том, чтоCreateEnvironmentBlock()
с помощью токена приложения пользовательского сеанса создает блок с ProgramW6432 = "C: \ Program Files (x86)", что является проблемой для 64-разрядных приложений. Мы должны переопределить это с надлежащим значением.