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łoNasza 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ą.