1

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?

Anders
  • 97,548
  • 12
  • 110
  • 164
RomanM
  • 6,363
  • 9
  • 33
  • 41

2 Answers2

10

The different scenarios are described in this article on MSDN.

Scroll down to remarks, "FOLDERID_ProgramFiles"

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 tables summarize the KNOWNFOLDERID use in those cases.

FOLDERID_ProgramFiles
OS  Application 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 (undefined)    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

Magnus Johansson
  • 28,010
  • 19
  • 106
  • 164
1

Try this:

GetEnvironmentVariable("ProgramW6432", szBuffer, nBufferSize);

YMMV

Stlopus
  • 11
  • 1