如何确定运行C#应用程序的"bit-ness"?

Bil*_*eal 9 .net c#

在具有x64处理器的计算机上,.NET dll可以作为32位和64位运行.我需要在运行时确定我的应用程序运行的位数.

目前我一直在做类似的事情System.IntPtr.Size == 8,但这似乎是一个丑陋的黑客.是否有更"正确"的方法来确定这一点?

Ric*_*ard 17

在.NET 4中,System.Environment该类有两个静态属性:Is64BitOperatingSystemIs64BitProcess.在早期的.NET版本中,您需要使用IntPtr大小方法.


Ada*_*rth 5

在.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.Is64BitProcessEnvironment.Is64BitOperatingSystem.