Search code examples
windows-vista32bit-64bitcmdsystem32syswow64

Why is Windows Vista 64-bit using a 32-bit cmd.exe by default? (machine-specific)


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!


Solution

  • 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... :)