我正在努力解决如何从 32 位应用程序确定 64 位 Windows Vista 上 64 位程序文件目录的位置的问题。
呼吁SHGetKnownFolderPath(FOLDERID_ProgramFilesX64)
不返回任何东西。MSDN文章KNOWNFOLDERID还指出FOLDERID_ProgramFilesX64
32 位应用程序不支持此特定调用。
我想尽可能避免硬编码“C:\Program Files”的路径。做类似的事情GetWindowsDirectory()
,从返回值中提取驱动器并将“\ Program Files”添加到它也没有吸引力。
32 位应用程序如何从 64 位 Windows Vista 中正确获取文件夹的位置?
背景
我们的应用程序有一个服务组件,它应该根据来自用户会话特定组件的请求启动其他进程。启动的应用程序可以是 32 位或 64 位。我们CreateProcessAsUser()
通过在启动用户会话过程中传入一个令牌来做到这一点。对于调用,我们通过APICreateProcessAsUser
创建一个环境块。CreateEnvironmentBlock()
问题在于CreateEnvironmentBlock()
,使用用户会话应用程序的令牌创建了一个带有 ProgramW6432="C:\Program Files (x86)" 的块,这对于 64 位应用程序来说是个问题。我们需要用适当的值覆盖它。