如何获取程序文件x86 env变量?

时间:2012-03-07 00:26:30

标签: windows environment-variables windows-7-x64

我想知道如何在命令提示符下显示Program Files(x86)的位置。我正在使用Windows 7 64位。

我试过了:

echo %programfiles(x86)%echo %programfiles%
两者都只显示C:\Program Files

当我手动检查注册表时,
HKLM /软件/微软/窗/ CURRENTVERSION
programfilesdir指向C:\Program Files

HKLM /软件/ WOW64 /微软/的Winodws / CURRENTVERSION
programfilesdir指向C:\Program Files (x86)

但是,为什么我总是用C:\ Program Files ??

显示

6 个答案:

答案 0 :(得分:165)

在以64位模式运行的64位计算机上:

  • echo %programfiles% ==> C:\Program Files
  • echo %programfiles(x86)% ==> C:\Program Files (x86)

在以32位(WOW64)模式运行的64位计算机上:

  • echo %programfiles% ==> C:\Program Files (x86)
  • echo %programfiles(x86)% ==> C:\Program Files (x86)

在以32位模式运行的32位计算机上:

  • echo %programfiles% ==> C:\Program Files
  • echo %programfiles(x86)% ==> %programfiles(x86)%

答案 1 :(得分:30)

另一个相关的环境变量是:

%ProgramW6432%

因此,在以32位(WOW64)模式运行的64位机器上:

  
      
  • echo%programfiles%==> C:\ Program Files(x86)
  •   
  • echo%programfiles(x86)%==> C:\ Program Files(x86)
  •   
  • echo%ProgramW6432%==> C:\ Program Files
  •   

来自Wikipedia

  

%ProgramFiles%变量指向Program Files目录,   它存储Windows和其他所有已安装的程序。该   英语系统的默认值是“C:\ Program Files”。在64位   版本的Windows(XP,2003,Vista),也有   %ProgramFiles(x86)%,默认为“C:\ Program Files(x86)”,和   %ProgramW6432%,默认为“C:\ Program Files”。该   %ProgramFiles%本身取决于进程是否请求   环境变量本身是32位或64位(这是由   Windows-on-Windows 64位重定向)。

参考:http://en.wikipedia.org/wiki/Environment_variable

答案 2 :(得分:3)

在Windows 64位计算机上,echo%programfiles(x86)%会打印C:\ Program Files(x86)

答案 3 :(得分:0)

恕我直言,在此讨论中遗漏的一点是,无论您使用什么变量,都可以保证始终指向适当的文件夹。 在Windows安装在C:\

以外的驱动器上的极少数情况下,这变得至关重要。

答案 4 :(得分:0)

在 64 位 Windows 系统上,读取各种环境变量和一些 Windows 注册表项是 redirected 到不同的来源,这取决于进行读取的进程是否为 32-位或 64 位。

下表列出了这些数据来源:

X = HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion
Y = HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion
Z = HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
     
READING ENVIRONMENT VARIABLES:    Source for 64-bit process               Source for 32-bit process
-------------------------------|----------------------------------------|--------------------------------------------------------------
                %ProgramFiles% :  X\ProgramW6432Dir                       X\ProgramFilesDir (x86)
           %ProgramFiles(x86)% :  X\ProgramFilesDir (x86)                 X\ProgramFilesDir (x86)
                %ProgramW6432% :  X\ProgramW6432Dir                       X\ProgramW6432Dir
     
          %CommonProgramFiles% :  X\CommonW6432Dir                        X\CommonFilesDir (x86)
     %CommonProgramFiles(x86)% :  X\CommonFilesDir (x86)                  X\CommonFilesDir (x86)
          %CommonProgramW6432% :  X\CommonW6432Dir                        X\CommonW6432Dir
     
                 %ProgramData% :  Z\ProgramData                           Z\ProgramData


      READING REGISTRY VALUES:    Source for 64-bit process               Source for 32-bit process
-------------------------------|----------------------------------------|--------------------------------------------------------------
             X\ProgramFilesDir :  X\ProgramFilesDir                       Y\ProgramFilesDir
       X\ProgramFilesDir (x86) :  X\ProgramFilesDir (x86)                 Y\ProgramFilesDir (x86)
            X\ProgramFilesPath :  X\ProgramFilesPath = %ProgramFiles%     Y\ProgramFilesPath = %ProgramFiles(x86)%
             X\ProgramW6432Dir :  X\ProgramW6432Dir                       Y\ProgramW6432Dir
     
              X\CommonFilesDir :  X\CommonFilesDir                        Y\CommonFilesDir
        X\CommonFilesDir (x86) :  X\CommonFilesDir (x86)                  Y\CommonFilesDir (x86)
              X\CommonW6432Dir :  X\CommonW6432Dir                        Y\CommonW6432Dir
     

例如,对于 32 位进程,%ProgramFiles%%ProgramFiles(x86)% 环境变量的数据源是注册表值 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir (x86)

但是,对于 64 位进程,%ProgramFiles% 环境变量的数据源是注册表值 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramW6432Dir ...以及 {{1} } 环境变量是注册表值 %ProgramFiles(x86)%

大多数默认的 Windows 安装都会在注册表值 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir (x86) 中加入一个类似 C:\Program Files (x86) 的字符串,但是这个(和其他)可以改变。

在这些 Windows 注册表值中输入的任何内容都会在登录时被 Windows 资源管理器读取到相应的环境变量中,然后复制到它随后产生的任何子进程。

注册表值 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir (x86) 尤其值得注意,因为大多数 Windows 安装都将字符串 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesPath 放入其中,以便 64 位进程读取。此字符串指的是环境变量 %ProgramFiles%,而后者又从注册表值 %ProgramFiles% 中获取其数据……除非某些程序先验地更改了此环境变量的值。

我编写了一个小实用程序,用于显示 64 位和 32 位进程的这些环境变量。你可以下载它here
包含 VisualStudio 2017 的源代码,编译后的 64 位和 32 位二进制可执行文件分别位于 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramW6432Dir..\x64\Release 目录中。

答案 5 :(得分:-6)

我尝试了在网络上找到的多种变体,但没有一种可行。我试图修复Subtitle Creator的reg问题。

经过一些反复试验,这是在Window 7 64位下为我工作的那个。

  1. 在Windows“开始”菜单中,在搜索框中键入CMD。
  2. 右键单击cmd.exe,然后选择以管理员身份运行。
  3. 如果出现提示,请输入管理员密码。
  4. 现在使用此命令: %systemroot%\ SysWoW64 \ regsvr32" C:\ Program Files(x86)\ SubtitleCreator \ SCSubtitleFilter.ax"
  5. 如果您要修复其他dll,则需要在引号内使用dll的完整路径。