The situation:
I need to convert our current development environment from Windows XP 32-bit to Windows Vista 64-bit (*). Naturally, I've run into plenty of places in our build system where hardcoded paths were problematic (e.g. "C:\Program Files
" becoming "C:\Program Files (x86)
"). Fortunately, there is a %ProgramFiles%
environment variable which maps to the proper directory based on the source process (32-bit or 64-bit). So I updated the build scripts with %ProgramFiles%
, and I was sure it'd be the end of that.
The build environment is called from the command-line (C:\Windows\System32\cmd.exe
).
The problem:
On one specific machine (namely my dev machine at work), it turns out that C:\Windows\System32\cmd.exe
is actually a 32bit process, so the scripts find the x86
version of the Program Files
directory and everything works great.
On every other 64bit machine I can find (including my home machine), C:\Windows\System32\cmd.exe
is the 64bit version, and the 32bit version is in C:\Windows\SysWow64\cmd.exe
. So the build scripts can't find anything they're looking for and fail.
I understand now that the 32bit cmd.exe
should be called explicitly if that's what you need, and by default you get a 64bit cmd.exe
. Typical case of WORKSFORME
...
The question is, what happened to the machine where this is not true? Why am I getting a 32bit cmd.exe
by default on one machine but not on others? In all cases I am explicitly executing C:\Windows\System32\cmd.exe
from the Start|Run
menu but getting different results on one machine only. All are running the same edition of Vista 64bit.
Any thoughts or insight?
(*) Please accept that I must do this. I am not at liberty to say why I am doing this. Re-installing the OS and everything from scratch would probably work, but it is surely overkill. Besides, it was hard enough convincing our IT department to give out Vista machines!
I have finally found the problem, and as expected it is quite simple: user error. Explorer (which is itself a 64-bit process on Windows Vista 64-bit) launches 64-bit command prompts by default. If you want a 32-bit CMD.EXE
, you must explicitly reference C:\Windows\SysWoW64\CMD.EXE
.
The reason this worked fine on my system is that I use Far Manager for most of my command-line usage, which is 32-bit (therefore it launches 32-bit command prompts). When I verified I must have confused a 32-bit window for a 64-bit window (after all they look the same!) and asked a stupid question.
Die in Sente, the problem with %ProgramFiles(x86)%
is that it doesn't exist on Windows Vista 32-bit, because that would have really been simpler.
Ah, there is nothing like a public posting to make a fool of yourself... :)