What happens if I use SHGetFolderPath api call in a 32 bit system with CSIDL_PROGRAM_FILESx86 folder id instead of the CSIDL_PROGRAM_FILES id?
Theoretically CSIDL_PROGRAM_FILESx86 should map to C:\program files (x86)
in a 64 bit system but what does it map to in a 32 bit system where this path doesn't exist?
The different scenarios are described in this article on MSDN.
The interpretation of certain KNOWNFOLDERID
values depends on whether the folder is part of a 32-bit or 64-bit application and whether that application is running on a 32-bit or 64-bit operating system. If your application needs to distinguish between, for example, Program Files
and Program Files (x86)
, you must use the right KNOWNFOLDERID
for the situation.
The following table summarizes the KNOWNFOLDERID
use in those cases.
OS | App | KNOWNFOLDERID | Default Path | CSIDL Equivalent |
---|---|---|---|---|
32 bit | 32 bit | FOLDERID_ProgramFiles | %SystemDrive%\Program Files | CSIDL_PROGRAM_FILES |
32 bit | 32 bit | FOLDERID_ProgramFilesX86 | %SystemDrive%\Program Files | CSIDL_PROGRAM_FILESX86 |
32 bit | 32 bit | FOLDERID_ProgramFilesX64 | Not applicable | Not applicable |
64 bit | 64 bit | FOLDERID_ProgramFiles | %SystemDrive%\Program Files | CSIDL_PROGRAM_FILES |
64 bit | 64 bit | FOLDERID_ProgramFilesX86 | %SystemDrive%\Program Files (x86) | CSIDL_PROGRAM_FILESX86 |
64 bit | 64 bit | FOLDERID_ProgramFilesX64 | %SystemDrive%\Program Files | None |
64 bit | 32 bit | FOLDERID_ProgramFiles | %SystemDrive%\Program Files (x86) | CSIDL_PROGRAM_FILES |
64 bit | 32 bit | FOLDERID_ProgramFilesX86 | %SystemDrive%\Program Files (x86) | CSIDL_PROGRAM_FILESX86 |
64 bit | 32 bit | FOLDERID_ProgramFilesX64 | %SystemDrive%\Program Files | None |
Summary: It will point to %SystemDrive%\Program Files