¿Cómo puede la aplicación de 32 bits encontrar la ubicación del directorio de Archivos de programa de 64 bits en Windows Vista de 64 bits?

Estoy teniendo problemas con el problema de cómo determinar la ubicación del directorio de Archivos de programa de 64 bits en Windows Vista de 64 bits desde una aplicación de 32 bits.

Llamadas aSHGetKnownFolderPath(FOLDERID_ProgramFilesX64) No devuelvas nada. losMSDN artículoCONOCIMIENTO También afirma que esta llamada en particular conFOLDERID_ProgramFilesX64 no es compatible con una aplicación de 32 bits.

Me gustaría evitar tanto como sea posible codificar la ruta a "C: \ Archivos de programa". Haciendo algo comoGetWindowsDirectory()Extraer la unidad del valor de retorno y agregar "\ Archivos de programa" tampoco es atractivo.

¿Cómo puede una aplicación de 32 bits obtener correctamente la ubicación de la carpeta desde Windows Vista de 64 bits?

Fondo

Nuestra aplicación tiene un componente de servicio que se supone que inicia otros procesos basados ​​en las solicitudes del componente específico de la sesión del usuario. Las aplicaciones iniciadas pueden ser de 32 bits o de 64 bits. Hacemos esto es viaCreateProcessAsUser() pasando un token desde el proceso de inicio de sesión de usuario. Para llamar aCreateProcessAsUser, creamos un bloque de entorno a través delCreateEnvironmentBlock() API. El problema es eseCreateEnvironmentBlock()Al usar el token de la aplicación de sesión de usuario, se crea un bloque con ProgramW6432 = "C: \ Archivos de programa (x86)", que es un problema para las aplicaciones de 64 bits. Necesitamos anularlo con el valor apropiado.

Respuestas a la pregunta(4)

Su respuesta a la pregunta