从命令提示符下,我得到以下内容:
>echo %ProgramFiles% C:\Program Files
然而,一些应用程序(在这个例子中是PHP,尽pipe我在Apache的httpd.conf中看到了相同的行为),它是:
>php -r "echo $_ENV['ProgramFiles'];" C:\Program Files (x86)
为什么是这样?
背景:我正在开发的主机操作系统是32位或64位的configuration文件,这是非常好的脚本。 在32位系统上, %ProgramFiles%是“C:\ Program Files”,而在一个64位系统上, %ProgramFiles%看起来像是返回C:\Program Files (x86) 。 我只是好奇,为什么当我从Windows命令提示符(或在浏览器栏等)尝试它时,不一样。 有没有一个64位的命令提示符或什么的?
当在64位Windows中启动的32位应用程序处理系统环境variables%ProgramFiles%或%commonprogramfiles%时,WoW64子系统会将这些variables的值replace为variables%ProgramFiles(x86)%和% commonprogramfiles(x86)%。因此,例如,当从32位程序寻址时,%ProgramFiles%将以“C:\ Program Files(x86)”打开。
此行为由寄存器redirect系统确定,该系统提供32位软件与64位操作系统的向后兼容性。 32位程序模拟32位程序,即使他们正在寻址的数据位于不同的地方。
要避免在32位程序中进行redirect,在访问相应的寄存器节点时,应使用%programfiles%或%COMMONPROGRAMFILES%(即反向)环境variables或KEY_WOW64_64KEY标志。