Believe it or not, my installer is so old that it doesn't have an option to detect the 64-bit version of Windows.
Is there a Windows DLL call or (even better) an environment variable that would give that information for Windows XP and Windows Vista?
One possible solution
I see that Wikipedia states that the 64-bit version of Windows XP and Windows Vista have a unique environment variable: %ProgramW6432%
, so I'm guessing that'd be empty on 32-bit Windows.
This variable points to Program Files
directory, which stores all the installed program of Windows and others. The default on English-language systems is C:\Program Files
. In 64-bit editions of Windows (XP, 2003, Vista), there are also %ProgramFiles(x86)%
which defaults to C:\Program Files (x86)
and %ProgramW6432%
which defaults to C:\Program Files
. The %ProgramFiles%
itself depends on whether the process requesting the environment variable is itself 32-bit or 64-bit (this is caused by Windows-on-Windows 64-bit redirection).
I see that Wikipedia states that the 64-bit version of Windows XP and Windows Vista have a unique environment variable: %ProgramW6432%, so I'm guessing that'd be empty on 32-bit Windows.
Not quite. Windows XP seems to leave alone references to environment variables it doesn't know about. I.eecho %ProgramW6432%
causes%ProgramW6432%
to be echoed, rather than a null string. You should still be able to use this however, with a statement like:if "%ProgramW6432%" == "Program Files" echo 64-bit OS detected
orif not "%ProgramW6432%" == "Program Files" echo 32-bit OS detected
– Lias