为啥 Windows Vista 64 位默认使用 32 位 cmd.exe? (特定于机器)
Posted
技术标签:
【中文标题】为啥 Windows Vista 64 位默认使用 32 位 cmd.exe? (特定于机器)【英文标题】:Why is Windows Vista 64-bit using a 32-bit cmd.exe by default? (machine-specific)为什么 Windows Vista 64 位默认使用 32 位 cmd.exe? (特定于机器) 【发布时间】:2010-09-27 06:21:38 【问题描述】:情况:
我需要将我们当前的开发环境从 Windows XP 32 位转换为 Windows Vista 64 位 (*)。自然,我在我们的构建系统中遇到了很多硬编码路径存在问题的地方(例如,“C:\Program Files
”变成了“C:\Program Files (x86)
”)。幸运的是,有一个%ProgramFiles%
环境变量映射到基于源进程(32 位或 64 位)的正确目录。所以我用%ProgramFiles%
更新了构建脚本,我确信它会结束。
从命令行调用构建环境 (C:\Windows\System32\cmd.exe
)。
问题:
在一台特定的机器上(即我正在工作的开发机器),事实证明C:\Windows\System32\cmd.exe
实际上是一个 32 位进程,因此脚本会找到 Program Files
目录的x86
版本,并且一切正常。
在我能找到的所有其他 64 位机器上(包括我的家用机器),C:\Windows\System32\cmd.exe
是 64 位版本,而 32 位版本在 C:\Windows\SysWow64\cmd.exe
中。所以构建脚本找不到他们正在寻找的任何东西并且失败了。
我现在明白,如果您需要,应该显式调用 32 位 cmd.exe
,默认情况下您会得到 64 位 cmd.exe
。 WORKSFORME
的典型案例...
问题是,这不正确的机器发生了什么?为什么我在一台机器上默认获得 32 位 cmd.exe
而在其他机器上却没有?在所有情况下,我都明确地从Start|Run
菜单执行C:\Windows\System32\cmd.exe
,但仅在一台机器上得到不同的结果。都运行相同版本的 Vista 64bit。
有什么想法或见解?
(*) 请接受我必须这样做。我无权说为什么我这样做。从头开始重新安装操作系统和一切可能会起作用,但这肯定是矫枉过正。此外,说服我们的 IT 部门提供 Vista 机器已经够难的了!
【问题讨论】:
【参考方案1】:如果您从 32 位进程运行 cmd,由于文件重定向 (http://msdn.microsoft.com/en-us/library/aa384187.aspx),您将获得 32 位 cmd。从资源管理器中运行 CMD 时是否获得 32 位版本?
【讨论】:
【参考方案2】:我终于找到了问题所在,果然很简单:用户错误。资源管理器(它本身是 Windows Vista 64 位上的 64 位进程)默认启动 64 位命令提示符。如果你想要一个 32 位的CMD.EXE
,你必须明确引用C:\Windows\SysWoW64\CMD.EXE
。
这在我的系统上运行良好的原因是我在大多数命令行使用中使用了 Far Manager,它是 32 位的(因此它会启动 32 位命令提示符)。当我验证时,我一定是混淆了 32 位窗口和 64 位窗口(毕竟它们看起来一样!)并问了一个愚蠢的问题。
死在 Sente,%ProgramFiles(x86)%
的问题在于它在 Windows Vista 32 位上不存在,因为那样会更简单。
啊,没有什么比公开发帖更能自欺欺人了……:)
【讨论】:
【参考方案3】:cmd.exe
是从两台机器的“开始”菜单中启动的。精确复制:
cmd
”,只会出现一个匹配项 (c:\windows\system32\cmd.exe
)
启动它。
在我的工作机器上,它启动 32 位版本(如任务管理器所示,它在 Processes
选项卡中的名称后附加了 *32
)。在我尝试过的所有其他 Vista 64 机器上,这会启动 cmd
的 64 位版本,我找不到对此行为的合理解释。
我还没有检查explorer.exe
本身在受影响的机器上是 32 位还是 64 位,也许这是相关的……感谢您的提示。
【讨论】:
经过验证,explorer.exe进程在所有机器上都是64bit。我不明白 64 位进程如何默认启动 32 位版本的 cmd... :(【参考方案4】:不是%ProgramFiles%
,而是%Programfiles(x86)%
,无论哪个cmd.exe 正在运行,它总是可以去你想去的地方?我的 Windows XP 64 位系统都有这个;请原谅我没有花时间启动 Vista 系统。
【讨论】:
以上是关于为啥 Windows Vista 64 位默认使用 32 位 cmd.exe? (特定于机器)的主要内容,如果未能解决你的问题,请参考以下文章
适用于Windows Vista的最佳Subversion客户端(64位)[关闭]
C# - Console.Beep 在 Windows Vista 上不起作用
如何配置 Vista Ultimate(64 位)帐户,以便它可以访问 OSX 上的 SMB 共享? [关闭]
为啥我的 Joomla 模板无法在 Windows 7 / Vista 的 IE9 中正确加载?