如何在运行时检查Windows操作系统是32位还是64位?我想为32位编译一次应用程序,但是它可以用于两个版本,因此使用宏是不可能的。
据我所知,我应该使用QSysInfo来确定这一点,但文档中的所有内容都看起来很陌生;我不知道我应该检查什么,或者我应该检查哪个值。
如果有人可以澄清并举例说明如何做到这一点,或提供更有效的替代方案,我们将不胜感激!
答案 0 :(得分:1)
您可以使用IsWow64Process()
。它检查应用程序是否在64位Windows上运行。
BOOL Is64BitOS()
{
BOOL bIs64BitOS = FALSE;
// We check if the OS is 64 Bit
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS
fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(
GetModuleHandle("kernel32"),"IsWow64Process");
if (NULL != fnIsWow64Process)
{
if (!fnIsWow64Process(GetCurrentProcess(),&bIs64BitOS))
{
//error
}
}
return bIs64BitOS;
}
答案 1 :(得分:-1)
这曾经用于C#,你的里程可能会有所不同......
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool IsWow64Process(IntPtr hProcess, out bool wow64Process);
public static bool Is64BitOperatingSystem()
{
// 64-bit programs run only on Win64
if (IntPtr.Size == 8)
{
return true;
}
else
{
// 32-bit programs run on both 32-bit and 64-bit Windows
// Detect whether the current process is a 32-bit process running on a 64-bit system.
bool flag;
return ((doesWin32MethodExist("kernel32.dll", "IsWow64Process") &&
IsWow64Process(GetCurrentProcess(), out flag)) && flag);
}
}
private static bool doesWin32MethodExist(string moduleName, string methodName)
{
IntPtr moduleHandle = GetModuleHandle(moduleName);
if (moduleHandle == IntPtr.Zero)
{
return false;
}
return (GetProcAddress(moduleHandle, methodName) != IntPtr.Zero);
}