情况:

我需要将当前的开发环境从 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. 。因此构建脚本无法找到他们正在寻找的任何内容并且失败。

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

问题是, ,这不是真的机器发生了什么?为什么我的系统是32位的 cmd.exe 默认情况下在一台机器上而不是在其他机器上?在所有情况下我都明确执行 C:\Windows\System32\cmd.exe 来自 Start|Run 菜单但得到不同的结果 仅在一台机器上. 。所有这些都运行相同版本的 Vista 64 位。

有什么想法或见解吗?

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

有帮助吗?

解决方案 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 位上不存在,因为那样确实更简单。

啊,没有什么比公开发帖更能让自己出丑的了……:)

其他提示

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

cmd.exe 从两台计算机上的“开始”菜单中启动。精确重现:

  • 单击开始球
  • 类型 ”cmd",只出现一场比赛(c:\windows\system32\cmd.exe)
  • 启动它。

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

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

代替 %ProgramFiles%, ,不是有一个 %Programfiles(x86)% 无论哪个 cmd.exe 正在运行,它总是会到达您想要的位置?我的 Windows XP 64 位系统都有这个;请原谅我没有花时间启动 Vista 系统。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top