在.NET 2.0 C#应用程序中,我使用以下代码来检测操作系统平台:
string os_platform = System.Environment.OSVersion.Platform.ToString();
这将返回“ Win32NT”。问题是,即使在64位Windows Vista上运行,它也会返回“ Win32NT”。
还有其他方法可以知道正确的平台(32或64位)吗?
请注意,当在Windows 64位上作为32位应用程序运行时,它也应该检测到64位。
如果在64位Windows上的32位.NET Framework 2.0中运行,IntPtr.Size将不会返回正确的值(它将返回32位)。
正如Microsoft的Raymond Chen所描述的,您必须首先检查是否在64位进程中运行(我认为在.NET中,您可以通过检查IntPtr.Size来执行此操作),并且如果您在32位进程中运行,则仍然必须调用Win API函数IsWow64Process。如果返回true,则说明您正在64位Windows上以32位进程运行。
Microsoft的Raymond Chen: 如何以编程方式检测您是否在64位Windows上运行
我的解决方案:
static bool is64BitProcess = (IntPtr.Size == 8); static bool is64BitOperatingSystem = is64BitProcess || InternalCheckIsWow64(); [DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool IsWow64Process( [In] IntPtr hProcess, [Out] out bool wow64Process ); public static bool InternalCheckIsWow64() { if ((Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor >= 1) || Environment.OSVersion.Version.Major >= 6) { using (Process p = Process.GetCurrentProcess()) { bool retVal; if (!IsWow64Process(p.Handle, out retVal)) { return false; } return retVal; } } else { return false; } }