在具有x64处理器的计算机上,.NET dll可以作为32位和64位运行.我需要在运行时确定我的应用程序运行的位数.
目前我一直在做类似的事情System.IntPtr.Size == 8,但这似乎是一个丑陋的黑客.是否有更"正确"的方法来确定这一点?
Ric*_*ard 17
在.NET 4中,System.Environment该类有两个静态属性:Is64BitOperatingSystem和Is64BitProcess.在早期的.NET版本中,您需要使用IntPtr大小方法.
在.NET 4之前,建议使用a的大小IntPtr(4位为32位,8位为64位).但是,这并没有给你机器的位数 - 它给你正在使用的CLR的位数.
如果您在32位进程内运行,例如应用程序加载项,那么这是一个重要的区别.我有一篇关于根据WMI查找机器位数的博客文章:
http://adamhouldsworth.blogspot.com/2010/03/64bit-registry-from-32bit-application.html
但是请注意,我仍然不清楚这是否真的能代表当前的操作系统位数(因为它正在使用处理器).
对于绝大多数情况,在正常编译(AnyCPU)下运行您自己的应用程序,IntPtr就足够了.
在.NET 4中,正如其他人所说,现在Environment.Is64BitProcess和
Environment.Is64BitOperatingSystem.