我如何确定;比特尼斯“;我的C#应用程序在哪种情况下运行?

我如何确定;比特尼斯“;我的C#应用程序在哪种情况下运行?,c#,.net,C#,.net,NET dll可以在带有x64处理器的计算机上以32位和64位的形式运行。我需要在运行时确定我的应用程序运行的比特数 目前我一直在做类似于System.IntPtr.Size==8的事情,但这似乎是一个丑陋的黑客行为。是否有更“正确”的方法来确定这一点?在.NET 4及更高版本中,包括.NET Core,System.Environment类有两个静态属性:和。在早期的.NET版本中,您需要使用IntPtr大小方法。在.NET 4.0中,您可以使用 Environment.Is64BitProc

NET dll可以在带有x64处理器的计算机上以32位和64位的形式运行。我需要在运行时确定我的应用程序运行的比特数


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

在.NET 4及更高版本中,包括.NET Core,
System.Environment
类有两个静态属性:和。在早期的.NET版本中,您需要使用
IntPtr
大小方法。

在.NET 4.0中,您可以使用

Environment.Is64BitProcess and
Environment.Is64BitOperatingSystem

NET 4之前,建议使用
IntPtr
的大小(4表示32位,8表示64位)。但是,这并没有给出机器的比特度-它给出了正在使用的CLR的比特度

如果在32位进程(如应用程序外接程序)内运行,这是一个重要的区别。我有一篇关于基于WMI查找机器比特数的博文:

但是请注意,我仍然不清楚这是否真的代表了当前操作系统的比特数(因为它使用的是处理器)

对于绝大多数情况,在运行自己的应用程序的正常编译(AnyCPU)下,
IntPtr
就足够了

正如其他人所说,在.NET4中,现在有了
Environment.Is64BitProcess

Environment.is64位操作系统

这是微软的建议。。。请注意,除非将编译指定为x86,否则64位操作系统上的任何普通应用程序都将运行64位。在其他进程内部运行时会出现异常。请检查这里:这不是一个难看的黑客行为,它很优雅。它不仅非常便宜,而且直接表达了64位代码的不同之处。您还需要检查该进程是否在4之前的.NET版本中的WOW64下运行。仅仅检查指针的大小是不够的。@乔治:我不想要操作系统的位,我想要代码使用的位。因此,理查德所描述的是正确的。检查这个答案,因为它有最多的投票;不幸的是,我不能使用.NET4:(嗯,公认的答案肯定是正确的,而不是得票最多的那一个,正如你所承认的,这对你的情况是不正确的…@Adam:当没有“正确”时回答我发布的情况,然后你应该从剩下的备选方案中选择最好的。@Billy实际上你可以自己回答帖子,提供正确的答案,并将其标记为已接受-你甚至可以为此获得一个徽章我想:-)我不想要操作系统比特,我想要我的比特:)那就好了,IntPtr,正如我所说的,将返回CLR位,并可用于此目的。