为啥 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.exeWORKSFORME的典型案例...

问题是,这不正确的机器发生了什么?为什么我在一台机器上默认获得 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 中正确加载?

为啥 VFP .NET OLEdb 提供程序不能在 64 位 Windows 中工作?

Windows目录及一些重要文件