0

情况:

我需要将我们当前的开发环境从 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 位进程,所以脚本找到了目录的x86版本,Program Files一切都很好。

在我能找到的所有其他 64 位机器(包括我的家用机器)上,C:\Windows\System32\cmd.exe都是 64 位版本,而 32 位版本在C:\Windows\SysWow64\cmd.exe. 所以构建脚本找不到他们正在寻找的任何东西并且失败了。

我现在明白了,cmd.exe如果你需要的话,应该明确调用 32bit ,默认情况下你会得到一个 64bit cmd.exe。典型案例WORKSFORME...

问题是,这不正确的机器发生了什么?为什么我cmd.exe在一台机器上默认获得 32 位,而在其他机器上却没有?在所有情况下,我都是C:\Windows\System32\cmd.exeStart|Run菜单中显式执行,但仅在一台机器上得到不同的结果。都运行相同版本的 Vista 64 位。

有什么想法或见解吗?

(*) 请接受我必须这样做。我无权说出我为什么要这样做。从头开始重新安装操作系统和一切可能会起作用,但这肯定是矫枉过正。此外,说服我们的 IT 部门提供 Vista 机器已经够难的了!

4

4 回答 4

2

如果您从 32 位进程运行 cmd,由于文件重定向 ( http://msdn.microsoft.com/en-us/library/aa384187.aspx ) ,您将获得 32 位 cmd 。当您从资源管理器运行 CMD 时,您是否获得了 32 位版本的 CMD?

于 2008-12-17T01:48:26.007 回答
2

我终于找到了问题所在,果然很简单:用户错误。资源管理器(它本身是 Windows Vista 64 位上的 64 位进程)默认启动 64 位命令提示符。如果您想要 32 位CMD.EXE,则必须显式引用C:\Windows\SysWoW64\CMD.EXE.

这在我的系统上运行良好的原因是我在大多数命令行使用中都使用了 Far Manager,它是 32 位的(因此它会启动 32 位命令提示符)。当我验证时,我一定是混淆了 32 位窗口和 64 位窗口(毕竟它们看起来一样!)并问了一个愚蠢的问题。

Die in Sente,问题%ProgramFiles(x86)%在于它在 Windows Vista 32 位上不存在,因为那样会更简单。

啊,没有什么比公开发帖更能自欺欺人了……:)

于 2009-01-19T20:11:48.860 回答
1

cmd.exe从两台机器的开始菜单中启动。精确复制:

  • 单击开始球
  • 键入“ cmd”,只出现一个匹配项 ( c:\windows\system32\cmd.exe)
  • 启动它。

在我的工作机器上,它启动 32 位版本(如任务管理器所示,它已*32附加到Processes选项卡中的名称)。在我尝试过的所有其他 Vista 64 机器上,这会启动 64 位版本cmd,我无法找到对此行为的合理解释。

我还没有检查explorer.exe受影响机器上本身是 32 位还是 64 位,也许这是相关的……谢谢你的提示。

于 2008-12-17T03:35:37.583 回答
0

而不是,无论哪个 cmd.exe 正在运行,是否总%ProgramFiles%有一个你想要的地方?%Programfiles(x86)%我的 Windows XP 64 位系统都有这个;请原谅我没有花时间启动 Vista 系统。

于 2009-01-13T00:10:38.317 回答