Como o aplicativo de 32 bits pode encontrar o local do diretório Arquivos de Programas de 64 bits no Windows Vista de 64 bits?

Eu estou lutando com um problema de como determinar o local do diretório de arquivos de programas de 64 bits no Windows Vista de 64 bits de um aplicativo de 32 bits.

Chamadas paraSHGetKnownFolderPath(FOLDERID_ProgramFilesX64) não devolva nada. oMSDN artigoKNOWNFOLDERID também afirma que esta chamada particular comFOLDERID_ProgramFilesX64 não é suportado por um aplicativo de 32 bits.

Eu gostaria de evitar o máximo possível codificar o caminho para "C: \ Program Files". Fazendo algo comoGetWindowsDirectory(), extrair a unidade do valor de retorno e adicionar "\ Arquivos de programas" a ela também não é atraente.

Como um aplicativo de 32 bits pode obter corretamente o local da pasta do Windows Vista de 64 bits?

fundo

Nosso aplicativo possui um componente de serviço que deve iniciar outros processos com base em solicitações do componente específico da sessão do usuário. Os aplicativos lançados podem ser de 32 ou 64 bits. Nós fazemos isso é viaCreateProcessAsUser() passando um token de iniciar o processo de sessão do usuário. Para ligar paraCreateProcessAsUser, criamos um bloco de ambiente através doCreateEnvironmentBlock() API. O problema é queCreateEnvironmentBlock(), usando o token do aplicativo de sessão do usuário, cria um bloco com ProgramW6432 = "C: \ Arquivos de Programas (x86)", que é um problema para aplicativos de 64 bits. Precisamos substituí-lo com o valor adequado.

questionAnswers(4)

yourAnswerToTheQuestion