【发布时间】:2010-12-29 20:31:41
【问题描述】:
我正在努力解决如何从 32 位应用程序确定 64 位 Windows Vista 上 64 位 Program Files 目录的位置的问题。
调用SHGetKnownFolderPath(FOLDERID_ProgramFilesX64) 不会返回任何内容。 MSDN 文章 KNOWNFOLDERID 还指出,32 位应用程序不支持使用 FOLDERID_ProgramFilesX64 进行此特定调用。
我想尽可能避免硬编码到“C:\Program Files”的路径。
像GetWindowsDirectory() 这样的操作,从返回值中提取驱动器并将“\Program Files”添加到其中也没有吸引力。
32 位应用程序如何从 64 位 Windows Vista 中正确获取文件夹的位置?
背景
我们的应用程序有一个服务组件,它应该根据来自用户会话特定组件的请求启动其他进程。启动的应用程序可以是 32 位或 64 位。我们通过CreateProcessAsUser() 传递来自启动用户会话过程的令牌来做到这一点。为了调用CreateProcessAsUser,我们通过CreateEnvironmentBlock() API 创建一个环境块。问题是CreateEnvironmentBlock() 使用用户会话应用程序的令牌创建了一个带有 ProgramW6432="C:\Program Files (x86)" 的块,这对于 64 位应用程序来说是个问题。我们需要用适当的值覆盖它。
【问题讨论】:
-
出于好奇.. 为什么?如果你是一个在 64 位上运行的 32 位程序,那么你不需要知道 64 位程序文件目录的位置,你应该使用返回给你的那个,它是这样的:C:\Program Files (x86)
标签: 32bit-64bit vista64