W jaki sposób aplikacja 32-bitowa może znaleźć lokalizację 64-bitowego katalogu Program Files w systemie Windows Vista 64-bit?

Mam problem z określeniem lokalizacji 64-bitowego katalogu Program Files w 64-bitowym systemie Windows Vista z aplikacji 32-bitowej.

Wzywa doSHGetKnownFolderPath(FOLDERID_ProgramFilesX64) nie zwracaj niczego. TheMSDN artykułKNOWNFOLDERID stwierdza również, że to konkretne połączenie zFOLDERID_ProgramFilesX64 nie jest obsługiwany dla aplikacji 32-bitowych.

Chciałbym w miarę możliwości uniknąć zakodowania ścieżki do „C: Program Files”. Robię coś takiegoGetWindowsDirectory()Wyodrębnienie dysku z wartości zwracanej i dodanie do niego „Program Files” również nie jest atrakcyjne.

W jaki sposób aplikacja 32-bitowa poprawnie pobiera lokalizację folderu z 64-bitowego systemu Windows Vista?

tło

Nasza aplikacja ma komponent usługi, który ma uruchamiać inne procesy w oparciu o żądania z komponentu specyficznego dla sesji użytkownika. Uruchomione aplikacje mogą być 32-bitowe lub 64-bitowe. Robimy to przezCreateProcessAsUser() przekazując token z inicjowania procesu sesji użytkownika. Aby zadzwonić doCreateProcessAsUser, tworzymy blok środowiska za pomocąCreateEnvironmentBlock() API. Problemem jestCreateEnvironmentBlock(), używając tokena aplikacji sesji użytkownika, tworzy blok z ProgramW6432 = "C: Program Files (x86)", co stanowi problem dla aplikacji 64-bitowych. Musimy ją zastąpić odpowiednią wartością.

questionAnswers(4)

yourAnswerToTheQuestion