我想知道如何在命令提示符下显示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 ??
显示答案 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)
另一个相关的环境变量是:
因此,在以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位重定向)。
答案 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位下为我工作的那个。
如果您要修复其他dll,则需要在引号内使用dll的完整路径。