SHGetFolderPath () 32 бита против 64 бита - PullRequest
1 голос
/ 26 сентября 2008

Что произойдет, если я использую SHGetFolderPath вызов API в 32-разрядной системе с идентификатором папки CSIDL_PROGRAM_FILESx86 вместо идентификатора CSIDL_PROGRAM_FILES?

Теоретически CSIDL_PROGRAM_FILESx86 должен отображаться на C:\program files (x86) в 64-битной системе, но что он отображает в 32-битной системе, где этот путь не существует?

Ответы [ 2 ]

9 голосов
/ 26 сентября 2008

Различные сценарии описаны в этой статье на MSDN .

Прокрутите вниз до примечаний "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

Сводка: он будет указывать на% SystemDrive% \ Program Files

1 голос
/ 01 июня 2011

Попробуйте это:

GetEnvironmentVariable("ProgramW6432", szBuffer, nBufferSize);

YMMV

...