Как 32-разрядное приложение может найти расположение каталога 64-разрядных программных файлов в 64-разрядной версии Windows Vista?

Я борюсь с проблемой определения местоположения каталога 64-битных программных файлов в 64-битной Windows Vista из 32-битного приложения.

Звонки вSHGetKnownFolderPath(FOLDERID_ProgramFilesX64) не возвращай ничего.MSDN статьяKNOWNFOLDERID также заявляет, что этот конкретный звонок сFOLDERID_ProgramFilesX64 не поддерживается для 32-битного приложения.

Я хотел бы избежать как можно более жесткого кодирования пути кC: \ Program Files ", Делать что-то вродеGetWindowsDirectory(), извлекая диск из возвращаемого значения и добавляя\Программные файлы" к этому тоже не обращаюсь.

Как 32-битное приложение может правильно определить местоположение папки из 64-битной WindowsVista?

Фон

В нашем приложении есть служебный компонент, который должен запускать другие процессы на основе запросов от пользовательского сеанса. Запускаемые приложения могут быть 32-разрядными или 64-разрядными. Мы делаем это черезCreateProcessAsUser() путем передачи токена от инициации пользовательского сеанса. Для звонкаCreateProcessAsUserмы создаем блок среды черезCreateEnvironmentBlock() API. Проблема в том, чтоCreateEnvironmentBlock()с помощью токена приложения пользовательского сеанса создает блок с ProgramW6432 = "C: \ Program Files (x86) ", что является проблемой для 64-битных приложений. Мы должны переопределить это с надлежащим значением.

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

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