为什么 Windows Vista 64 位默认使用 32 位 cmd.exe?(机器特定)
-
22-08-2019 - |
题
情况:
我需要将当前的开发环境从 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 系统。