根据KNOWNFOLDERID
documentation,似乎是说32位应用程序无法检索64位C:\Program Files
文件夹路径。
我有一个32位应用,需要C:\Program Files
的已知文件夹,而不是C:\Program Files (x86)
。
我试图禁用WOW64但这没有帮助。
有解决方法吗?
答案 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文件夹。