在64位操作系统上的32位应用程序中的C:\ Program Files的KNOWNFOLDERID

时间:2017-02-26 22:21:53

标签: winapi visual-c++

根据KNOWNFOLDERID documentation,似乎是说32位应用程序无法检索64位C:\Program Files文件夹路径。

我有一个32位应用,需要C:\Program Files的已知文件夹,而不是C:\Program Files (x86)

我试图禁用WOW64但这没有帮助。

有解决方法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用GetEnvironmentVariable()根据Microsoft文章WOW64 Implementation Details阅读%ProgramW6432%变量:

  

环境变量

     

当64位进程创建32位进程时,或者32位进程创建64位进程时,WOW64会为创建的进程设置环境变量,如下表所示。

           

64位进程

     

PROCESSOR_ARCHITECTURE = AMD64或PROCESSOR_ARCHITECTURE = IA64

     

<强> PROGRAMFILES =%PROGRAMFILES%

     

<强> ProgramW6432 =%PROGRAMFILES%

     

COMMONPROGRAMFILES =%COMMONPROGRAMFILES%

     

CommonProgramW6432 =%COMMONPROGRAMFILES%

     

Windows Server 2008,Windows Vista,Windows Server 2003和Windows XP:从Windows 7和Windows Server 2008 R2开始添加了ProgramW6432和CommonProgramW6432环境变量。

           

32位进程

     

PROCESSOR_ARCHITECTURE = 86

     

PROCESSOR_ARCHITEW6432 =%PROCESSOR_ARCHITECTURE%

     

<强> PROGRAMFILES =%PROGRAMFILES(x86)的%

     

<强> ProgramW6432 =%PROGRAMFILES%

     

COMMONPROGRAMFILES =%COMMONPROGRAMFILES(86)%

     

CommonProgramW6432 =%COMMONPROGRAMFILES%

因此,%ProgramFiles%将指向32位或64位文件夹,具体取决于调用应用程序的体系结构,但在64位操作系统%ProgramW6432%上将始终指向64两种架构中的-bit文件夹。