ken*_*ken 8 windows environment-variables
从命令提示符,我得到以下信息:
>echo %ProgramFiles%
C:\Program Files
Run Code Online (Sandbox Code Playgroud)
然而,一些应用程序(在这个例子中是 PHP,虽然我在 Apache 的 httpd.conf 中看到了相同的行为),它是:
>php -r "echo $_ENV['ProgramFiles'];"
C:\Program Files (x86)
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
背景:我正在开发与主机操作系统是 32 位还是 64 位无关的脚本,对于配置文件,这非常有效。在 32 位系统上,%ProgramFiles%
是“C:\Program Files”,而在 64 位系统上,%ProgramFiles%
似乎同样返回C:\Program Files (x86)
. 我只是好奇为什么当我从 Windows 命令提示符(或在资源管理器栏等中)尝试它时,同样的情况不成立。是否有 64 位命令提示符之类的?
jus*_*in0 12
当在 64 位 Windows 中启动的 32 位应用程序寻址系统环境变量 %ProgramFiles% 或 %commonprogramfiles% 时,WoW64 子系统将这些变量的值替换为变量 %ProgramFiles(x86)% 和 "% commonprogramfiles(x86)%。因此,例如,当从 32 位程序寻址时,%ProgramFiles% 将被打开为“C:\Program Files (x86)”。
此行为由寄存器重定向系统决定,该系统提供 32 位软件与 64 位操作系统的向后兼容性。32 位程序模拟 32 位环境,即使它们寻址的数据位于不同的位置。
为了避免在 32 位程序中发生这种重定向,您应该在访问相应的寄存器节点时使用 %programfiles% 或 %COMMONPROGRAMFILES%(即大小写相反)环境变量或 KEY_WOW64_64KEY 标志。
归档时间: |
|
查看次数: |
52905 次 |
最近记录: |