Как 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-разрядных приложений. Мы должны переопределить это с надлежащим значением.

Ответы на вопрос(4)

Ваш ответ на вопрос