情况:
我需要将当前的开发环境从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 64bit。
有任何想法或见解吗?
(*)请接受我必须这样做。我不能自由地说为什么我这样做。从头开始重新安装操作系统和所有东西可能会起作用,但这肯定是矫枉过正的。此外,很难说服我们的IT部门发布Vista机器!
答案 0 :(得分:2)
如果从32位进程运行cmd,由于文件重定向(http://msdn.microsoft.com/en-us/library/aa384187.aspx),您将获得32位cmd。从资源管理器运行时,您是否获得了32位版本的CMD?
答案 1 :(得分:2)
我终于找到了问题,并且正如预期的那样很简单:用户错误。资源管理器(在Windows Vista 64位上本身是64位进程)默认情况下会启动64位命令提示符。如果您想要32位CMD.EXE
,则必须明确引用C:\Windows\SysWoW64\CMD.EXE
。
我的系统运行正常的原因是我使用远程管理器来执行大多数命令行使用,即32位(因此它会启动32位命令提示)。当我验证时,我必须混淆一个64位窗口的32位窗口(毕竟它们看起来一样!)并且问了一个愚蠢的问题。
死在Sente中,%ProgramFiles(x86)%
的问题在于它在Windows Vista 32位上不存在,因为那会非常简单。
啊,没有什么比公开发帖更能让自己变得愚蠢......:)
答案 2 :(得分:1)
cmd.exe
从两台计算机的“开始”菜单中启动。确切的责备:
cmd
”,只会出现一个匹配项(c:\windows\system32\cmd.exe
)在我的工作机器上,它启动32位版本(如任务管理器所示,*32
选项卡中的名称附加了Processes
。在我试过的所有其他Vista 64机器上,这启动了cmd
的64位版本,我无法找到这种行为的合理解释。
我没有检查受影响的计算机上explorer.exe
本身是32位还是64位,也许这是相关的......感谢提示。
答案 3 :(得分:0)
而不是%ProgramFiles%
,是否总是有%Programfiles(x86)%
总是可以到达您想要的位置,无论哪个cmd.exe正在运行?我的Windows XP 64位系统都有这个功能;请原谅我没有花时间启动Vista系统。