SHGetFolderPath() 32 位与 64 位

问题描述 投票:0回答:2

如果我在 32 位系统中使用 CSIDL_PROGRAM_FILESx86 文件夹 id 而不是 CSIDL_PROGRAM_FILES id 来使用 SHGetFolderPath api 调用,会发生什么?

理论上 CSIDL_PROGRAM_FILESx86 应该映射到 64 位系统中的

C:\program files (x86)
,但是在不存在此路径的 32 位系统中它会映射到什么?

winapi shell 64-bit path 32-bit
2个回答
10
投票

MSDN 上的这篇文章描述了不同的场景。

某些

KNOWNFOLDERID
值的解释取决于该文件夹是 32 位还是 64 位应用程序的一部分,以及该应用程序是在 32 位还是 64 位操作系统上运行。例如,如果您的应用程序需要区分
Program Files
Program Files (x86)
,则必须根据具体情况使用正确的
KNOWNFOLDERID

下表总结了

KNOWNFOLDERID
在这些情况下的使用。

操作系统 应用程序 已知文件夹ID 默认路径 CSIDL 等效项
32位 32位 FOLDERID_ProgramFiles %系统驱动器%\程序文件 CSIDL_PROGRAM_FILES
32位 32位 FOLDERID_ProgramFilesX86 %系统驱动器%\程序文件 CSIDL_PROGRAM_FILESX86
32 位 32位 FOLDERID_ProgramFilesX64 不适用 不适用
64 位 64 位 FOLDERID_ProgramFiles %系统驱动器%\程序文件 CSIDL_PROGRAM_FILES
64 位 64 位 FOLDERID_ProgramFilesX86 %SystemDrive%\Program Files (x86) CSIDL_PROGRAM_FILESX86
64 位 64 位 FOLDERID_ProgramFilesX64 %系统驱动器%\程序文件
64 位 32位 FOLDERID_ProgramFiles %SystemDrive%\Program Files (x86) CSIDL_PROGRAM_FILES
64 位 32位 FOLDERID_ProgramFilesX86 %SystemDrive%\Program Files (x86) CSIDL_PROGRAM_FILESX86
64 位 32位 FOLDERID_ProgramFilesX64 %系统驱动器%\程序文件

总结:它将指向%SystemDrive%\Program Files


1
投票

试试这个:

GetEnvironmentVariable("ProgramW6432", szBuffer, nBufferSize);

YMMV

© www.soinside.com 2019 - 2024. All rights reserved.