2010-07-23 5 views
8

A .NET dll se puede ejecutar como 32 bits y 64 bits en una máquina con un procesador x64. Necesito determinar en tiempo de ejecución qué bitness se está ejecutando mi aplicación.¿Cómo puedo determinar el "bit-ness" bajo el cual se ejecuta mi aplicación C#?

Actualmente he estado haciendo algo como System.IntPtr.Size == 8, pero parece un hack feo. ¿Hay una manera más "correcta" de determinar esto?

+0

Eso es lo que Microsoft aconseja ... http://msdn.microsoft.com/en-us/library/ms973190.aspx – pascal

+0

Tenga en cuenta que a menos que especifique la compilación como x86, cualquier aplicación normal en un sistema operativo de 64 bits ejecutará 64 bits. Las excepciones ocurren cuando se ejecuta dentro de otros procesos. –

+0

Compruebe aquí: http://stackoverflow.com/questions/336633/how-to-detect-windows-64-bit-platform-with-net –

Respuesta

17

En .NET 4 la clase System.Environment tiene dos propiedades estáticas: Is64BitOperatingSystem y Is64BitProcess. En versiones anteriores de .NET necesita usar el enfoque de tamaño IntPtr.

+0

También debe comprobar si el proceso se está ejecutando en WOW64 en versiones de .NET anteriores a 4. Simplemente no es suficiente comprobar el tamaño del puntero. –

+0

@George: No quiero la fragilidad del SO, quiero el bitness que usa mi código. Por lo tanto, lo que Richard describe es correcto. Verificando esta respuesta porque tiene la mayoría de los votos ascendentes; desafortunadamente no puedo usar .NET 4 :( –

+0

Ummm, seguramente la respuesta aceptada es la correcta, no la que tiene la mayoría de los votos ascendentes que es, como usted admite, incorrecta para su situación ... –

2

En .Net 4.0 se puede utilizar

Environment.Is64BitProcess and 
Environment.Is64BitOperatingSystem 
5

Pre .NET 4 se sugirió utilizar el tamaño de un IntPtr (4 de 32 bits y 8 para 64 bits). Sin embargo, esto no le da la bitness de la máquina - le da la bitness de la CLR que se está utilizando.

Esa es una diferencia importante si se ejecuta dentro de un proceso de 32 bits, como complementos de aplicaciones. Tengo un blog sobre la búsqueda de las máquinas valor de bits basado en WMI:

http://adamhouldsworth.blogspot.com/2010/03/64bit-registry-from-32bit-application.html

Nota sin embargo, que estoy todavía no está claro si esto será verdaderamente representar el valor de bits del sistema operativo actual (ya que está utilizando el procesador) .

Para la gran mayoría de las situaciones, bajo compilación normal (AnyCPU) ejecutando su propia aplicación, será suficiente con IntPtr.

En .NET 4, como han dicho otros, ahora hay Environment.Is64BitProcess y Environment.Is64BitOperatingSystem.

+0

No quiero el bitness del sistema operativo, quiero mi bitness :) –

+0

Entonces está bien, IntPtr, como ya he indicado, le devolverá el bit de CLR y se puede utilizar para tal fin. –

Cuestiones relacionadas