一种很简单的方法就是根据IntPtr类型的Size属性来判断,
1 //IntPtr.Size在64位为8,在32位为4 2 public static Boolean Is64Bit() 3 { 4 if (IntPtr.Size == 4) 5 return false; 6 else 7 return true; 8 }
通过查看IntPtr的源码可以看到:
//.... public struct IntPtr : ISerializable { //... // 摘要: // 获得此实例的大小。 // // 返回结果: // 此平台上的指针或句柄的大小,按字节计。此属性的值在 32 位平台上为 4,在 64 位平台上为 8。 public static int Size { get; } //... }
确实如此,在64位下IntPtr.Size=8,在32位下为4。
但请注意:
在部分Visual Studio中,如VS 2013在64的操作系统中会优先使用32位的架构,所以判断系统架构出错,
此时只需要在项目的 Properties(属性) --> Bulid(生成) --> Prefer 32-bit(首选32位),将复选框取消即可